Linux 에서 port-mirroring 하기

CISCO 스위치의 monitor 처럼 포트미러링 설정 하려면

# source interface 를 `eth0` 으로 하고, destination interface를 `eth3` 로
SOURCE_IF=eth0
MIRROR_IF=eth3

ifconfig dummy0 127.4.4.4/32 up
ifconfig $MIRROR_IF 0/0 up

brctl addbr tap-$MIRROR_IF
brctl addif tap-$MIRROR_IF dummy0 $MIRROR_IF
ifconfig tap-$MIRROR_IF 127.5.5.5/32 up

# RX
tc qdisc add dev $SOURCE_IF ingress
tc filter add dev $SOURCE_IF parent ffff: protocol all u32 match u8 0 0 action mirred egress mirror dev tap-$MIRROR_IF
# TX
tc qdisc add dev $SOURCE_IF handle 1: root prio
tc filter add dev $SOURCE_IF parent 1: protocol all u32 match u8 0 0 action mirred egress mirror dev tap-$MIRROR_IF

위와 같이 설정하고 tcpdump -nni tap-eth3 로 보면 eth0의 패킷들이 미러링 되어 eth3으로 전달 되는 것을 확인 할 수 있습니다.

다음과 같이 ifconfig dummy0 127.4.4.4/32 up 입력시

root@ilsungHQ:/home/shieldone# ifconfig dummy0 127.4.4.4/32 up
SIOCSIFADDR: No such device
dummy0: ERROR while getting interface flags: No such device
dummy0: ERROR while getting interface flags: No such device

해당 에러가 발생 합니다.
dummy0 를 생성 해야 하는 것인 가요?

리눅스에서 라우팅 메시지가 이상하게 나와서 혼동이 되고 있는데 정리하자면

  • dymmy0 장치를 다음의 명령으로 생성 시켜야 합니다.
  • ip link add dummy0 type dummy
  • 업무 flow 는 다음과 같습니다.
# ip link ls dev dummy0
Device "dummy0" does not exist.
# ip link add dummy0 type dummy
RTNETLINK answers: File exists
# ip link ls dev dummy0
9: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default
    link/ether ca:17:de:2a:84:86 brd ff:ff:ff:ff:ff:ff