다소 특이한 네트워크 설정이 있습니다. 그것은 인터넷의 vps로 시작됩니다. 수년 동안 사용했지만 연결 문제가 없었습니다. 그 위에 ip-networkstack-in-userspace(지금부터 "MyIP"; 이미 인터넷의 다른 곳에서 실행 중이며 sip 및 http를 제공하므로 작동합니다. 적어도 기본적으로는 충분하다고 말합니다).
이제 vps의 eth0을 통해 들어오는 UDP 포트 161 트래픽을 가상 네트워크 인터페이스로 리디렉션하고 싶습니다. 어떤 이유로 일반적인 iptables 규칙은 작동하지 않습니다. tcpdump는 가상 인터페이스에 트래픽을 표시하지 않으며 IP 스택("MyIP")에는 아무것도 수신하지 않는다는 표시가 있습니다(ARP도 포함).
internet -> vps[eth0, 37.34.63.177] -> vps[myip, 192.168.4.1] -> MyIP[myip, 192.168.4.2]
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j LOG --log-prefix "DNAT: " --log-level 0
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j DNAT --to 192.168.4.2:161
iptables -A FORWARD -d 192.168.4.2 -p udp --dport 161 -j LOG --log-prefix "FWD: " --log-level 0
iptables -A FORWARD -d 192.168.4.2 -p udp --dport 161 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --destination-port 161 -j ACCEPT
이제 eth0에서 tcpdump를 수행하면 들어오는 요청이 표시됩니다. "myip" 네트워크 인터페이스의 tcpdump에는 아무것도 표시되지 않습니다. dmesg에는 아무것도 없으며 iptables -t nat -L -n -v는 증가하는 카운터를 표시하지 않습니다.
따라서 패킷을 가상 네트워크 인터페이스(VPN에 영향을 미침)로 전달할 수 없거나 내 iptables 규칙이 잘못되었습니다. 누구든지 아이디어가 있나요?
(패킷은 일반적으로 200바이트보다 작으므로 MTU 문제라고 생각하지 마십시오.)
답변1
이는 깨진 규칙을 지우고 INPUT 체인의 SSH 규칙을 처리했다고 가정합니다.
DNAT 명세서는 다음과 같아야 합니다.
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j LOG --log-prefix "DNAT: " --log-level 0
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j DNAT --to 192.168.4.2:161
FORWARD 문은 다음과 같아야 합니다.
iptables -A FORWARD -d 37.34.63.177 -p udp --dport 161 -j LOG --log-prefix "FWD: " --log-level 0
iptables -A FORWARD -d 37.34.63.177 -p udp --dport 161 -j ACCEPT
마지막으로 반환 트래픽을 허용합니다.
iptables -A FORWARD -o eth0 -p udp -s 192.168.4.2 --sport 161 -m state --state RELATED,ESTABLISHED -j ACCEPT
DNAT는 작동하기 위해 INPUT 문이 필요하지 않습니다.