인터페이스에서 다른 인터페이스로 패킷 복사


9

나는 2 개의 이더넷 카드, 즉 eth0과 eth1이있는 두 개의 Linux 시스템 (A가 되겠습니다)이 완전히 관련되지 않은 두 개의 LAN에 연결되어 있습니다.

기본적으로 eth0은 일반 응용 프로그램 트래픽에 사용되고 eth1은 디버깅 목적으로 만 사용됩니다. 디버깅은 eth1이 Crossshark를 사용하여 Wireshark를 실행하는 다른 Linux 상자 (B)에 연결됨을 의미합니다. Wireshark가 A의 eth0을 여행하는 응용 프로그램 패킷을 처리 할 수 ​​있기를 바랍니다.

기본적으로 상자 B의 Wireshark가 스니핑 할 수 있도록 eth0 인터페이스에서 eth1 인터페이스로 이동 패킷 을 복사 해야 합니다 (일부 이유로 LAN eth0에 물리적으로 액세스 할 수 없음). 또한 일부 규칙에 따라 eth0에서 eth1로 복사 할 패킷을 지정해야 할 수도 있습니다 (단, TCP / IP 필드 만 기준).

또한 A의 eth0은 A를 대상으로하는 패킷의 하위 집합 만 복사하기 때문에 무차별 모드로 전환 할 필요가 없습니다.

iptables 만 사용하여 이것을 달성하는 방법이 있습니까? 아니면이 작업을 수행하기 위해 응용 프로그램을 작성해야합니까? 패킷을 "복사"하려면 어떻게해야합니까?

답변:


7

커널이 최신 버전이면 iptables --tee 를 사용 하여 eth0에서 캡처 시스템으로 프레임을 전달할 수 있습니다 .


해당 링크는 이제 비밀번호로 보호됩니다.
파이프

4

tc mirred 액션을 사용할 수 있습니다. 예를 들어 : 들어오는 트래픽의 경우 :

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 1:1 \
   action mirred egress mirror dev eth1

나가는 트래픽의 경우 :

tc qdisc replace dev eth0 parent root handle 10: prio
tc filter add dev eth0 parent 10: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 10:1 \
   action mirred egress mirror dev eth1

3

네트워크에서 tcpbridge를 검색하십시오. 이것은 정확히 작업을 수행하는 것입니다. 가상 머신과도 대화하는 데 사용할 수 있습니다.


1

같은 뭔가 rinetd 힘의 작업 (TCP에 대한 리디렉터 / 서버는 단지 내가 생각없이 ARP, 레이어 2 등 정도)하지만, 모든 정직에서, 포트 미러링 기능이 있거나 상자가 단독으로 Wireshark를 사용하는 경우 일부 관리 스위치를 받고, 다른 NIC를 추가하고 두 인터페이스를 연결하여 시스템 A의 eth0 앞에 놓고 전용 스니핑 시스템을 사용할 수 있습니다.


1

한 인터페이스에서 다른 인터페이스로 이더넷 프레임을 복사하는 장치는 브리지입니다. 브리지로 작동하도록 Linux 시스템을 구성 할 수 있습니다. 일부 문서는 여기에서 찾을 수 있습니다.

레이어 2 트래픽 에 대한 아날로그 인 ebtables를 사용하여 브리지 된 트래픽에 필터링 규칙을 적용 할 수 있습니다 iptables.


0

내 설정에서 멀티 캐스트 TX 트래픽은 iptables로 표시되었지만 새로운 라우팅 테이블을 사용한 정책 라우팅은 작동하지 않았습니다. 유니 캐스트 TX 패킷에서 작동했지만 (원래 패킷을 eth0에서 eth5로 리디렉션) tc를 사용하면 eth5로 eth0 mcast 트래픽을 얻을 수 있음 src mac 및 src ip 주소가 eth5의 주소로 변경되므로 스위치 학습에 문제가 발생하지 않습니다. 커널 패킷 스케줄링 CONFIG_NET_SCHED에 대한 모든 커널 지원이 활성화되어야합니다

eth0에서 eth5로 리디렉션되는 유니 캐스트 및 멀티 캐스트 트래픽에 대한 WORKS 이하

Netfilter는 커널의 패킷을 나타내는 구조와 직접 상호 작용하는 데 사용할 수 있습니다. sk_buff라는이 구조에는 수정하려는“__u32 nfmark”라는 필드가 있습니다. 그러면 TC는이 값을 읽어 패킷의 대상 클래스를 선택합니다.

IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' iptables -t mangle -A 출력 -s $ {IP_ADDR_ETH0} -p udp-멀티 포트 일치 --dports 329,330 -o eth0 -j MARK --set-mark 2

스케줄링 정책을 나타내는 트리를 만들고 PRIO qdisc (패킷 스케줄러)를 사용합니다 (사용 가능한 다른 것을 시도 할 수 있음). 장치의 루트에 연결하는 qdiscs

tc qdisc add dev eth0 루트 핸들 15 : prio

이제 한쪽에는 트래픽 조절 정책이 있고 다른쪽에는 패킷 표시가 있습니다. 이 둘을 연결하려면 필터가 필요합니다.

참조 man tc-mirred (8) : mirred 조치를 통해 패킷 미러링 (복사) 또는 패킷을 재전송 (스틸 링) 할 수 있습니다. 미러링은 SPAN (Switch Port Analyzer)이라고도하며 일반적으로 흐름을 분석 및 / 또는 디버그하는 데 사용됩니다.

man tc-fw (8) 참조 : fw-fwmark 트래픽 제어 필터 fw 필터를 사용하면 iptables에 의해 이전에 설정된 fwmark를 기반으로 패킷을 분류 할 수 있습니다. 필터의 '핸들'과 동일하면 필터가 일치합니다. iptables를 사용하면 MARK 대상으로 단일 패킷을 표시하거나 CONNMARK를 사용하여 전체 연결을 표시 할 수 있습니다.

MAC_ADDR_ETH1 = cat /sys/class/net/eth1/address IP_ADDR_ETH1 = ifconfig eth1 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' tc 필터 추가 dev eth0 상위 15 : 0 프로토콜 ip prio 1 핸들 0x2 fw action pedit ex munge eth src set $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} 파이프 \ action mirgress egress 리디렉션 dev eth1

위에 설정된 규칙 표시 : tc qdisc show dev eth0 tc filter show dev eth0

위의 설정된 규칙 삭제 / 설정 해제 : tc qdisc del dev eth0 root

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.