192.168.0.1/24
eth1
LAN( )과 공용 IP 140.82.118.4
( ) eth2
사이에서 표준(즉시 사용 가능) NAT를 수행하는 OpenWrt 라우터(v18.06.5, r7897-9d401013fc)가 있습니다 . 라우터에는 iptables-mod-tee
모듈이 로드되어 실행 중입니다.
eth2
내 목표는 인터페이스에서 WAN으로 나가는 트래픽을 모니터링하는 것입니다 . 모니터링은 LAN( 위치 192.168.0.3
)에 있는 "Wireshark"를 실행하는 컴퓨터에 의해 수행됩니다.
ping 8.8.8.8
예를 들어, LAN에 있는 다른 컴퓨터(예: 에서)에서 == 및 ==를 보낼 192.168.0.2
때 WAN 인터페이스로 나가는 IP/ICMP 에코 요청을 보고 싶습니다 .ip.src
140.82.118.4
ip.dst
8.8.8.8
eth2
다음 명령을 사용하여 "Wireshark"를 실행하는 호스트에 복제된 패킷을 보내도록 iptables를 수정했습니다.
iptables -t mangle -A POSTROUTING -o eth2 -j TEE --gateway 192.168.0.3
ip.src
작동하지만 "Wireshark"는 == 192.168.0.2
및 ip.dst
== ...를 사용하여 IP/ICMP Echo 요청을 표시합니다 . 이는 SNAT(또는 위장) 이전인 것처럼 보이기 8.8.8.8
때문에 잘못된 것입니다 !ip.src
내 공용 WAN 인터페이스의 IP 여야 ip.src
합니다 140.82.118.4
. 그렇지 않으면 8.8.8.8 host
ICMP Echo 응답을 어디로 보낼지 알 수 없지만 ping 명령은 호스트로부터 ICMP Echo 응답을 받고 있기 8.8.8.8
때문입니다. .
왜 이런 일이 발생하며 이를 해결하는 방법은 무엇입니까?
답변1
mangle의 POSTROUTING 규칙은 nat의 POSTROUTING 규칙보다 먼저 실행됩니다. 따라서 mangle의 POSTROUTING에서 TEE 작업을 수행할 때 소스 NAT가 발생하지 않습니다.... 아래 첨부된 iptables 다이어그램을 참조하세요.https://th.bing.com/th/id/R.aa2afe9a3c09b762af0b59c8670c7740?rik=SvxGxvrwso1veg&riu=http%3a%2f%2flinux-ip.net%2fnf%2fnfk-traversal.png&ehk=kT6op7%2bDt4yCPX1npGPAw9m WO pRiFTZsA5qJ0HMDQZo%3d&risl=&pid =ImgRaw&r=0