NAT를 통해 전송되는 나가는 UDP 패킷에 대해 iptables에서 암시적 소스 포트 매핑을 비활성화하는 방법은 무엇입니까?

NAT를 통해 전송되는 나가는 UDP 패킷에 대해 iptables에서 암시적 소스 포트 매핑을 비활성화하는 방법은 무엇입니까?

iptables는 tun 인터페이스에서 나가는 UDP 패킷의 소스 포트를 다시 작성합니다. NAT 규칙을 설정하고 포트 X를 전달했습니다(자세한 내용은 아래 참조). NAT 뒤에 있는 애플리케이션이 포트 X에서 전달된 UDP 패킷을 수신한 다음 다른 UDP 패킷(소스 포트 1024를 얻기 위한 소스 포트 방법이 있어야 함)을 보내 "응답"하는 경우입니다. 소스 포트가 재할당되었습니다. - NATed 상자를 떠나기 전에 작성되었습니다. 원격 애플리케이션은 1024가 아닌 소스 포트 X가 필요하기 때문에 이 패킷을 거부합니다.

제 생각에는"암시적 소스 포트 매핑"가 발생하고 있습니다. 포트 때문에 필요하지 않습니다.

소스 포트를 다시 쓰는 패킷이 시작된 NAT 뒤에 있는 호스트에서 다음을 시도했지만(한 번에 하나씩) 동일한 결과가 나왔습니다.

iptables -t nat -A POSTROUTING -o tun0 -p udp --sport X -j SNAT --to 10.7.0.5:X
iptables -t nat -A POSTROUTING -o tun0 -p udp -j SNAT --to 10.7.0.5
iptables -t nat -A POSTROUTING -o tun0 -p udp -j MASQUERADE

NAT를 수행하는 원격 외부 장치에서:

iptables -t nat -A PREROUTING -i eth0 -p udp --dport X -j DNAT --to-destination 10.7.0.5:X
 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

답변1

이 문제는 0.0.0.0 대신 tun0 인터페이스에 애플리케이션을 바인딩하여 해결되었습니다.

conntrack -E에서 연결에 다른 인터페이스(tun0이 아님)의 소스 주소가 있다는 것을 알았 기 때문에 이것을 시도했습니다 . 따라서 패킷이 올바른 대상에 도달하고 올바른 소스 주소가 다시 쓰여지더라도 연결 추적기의 패킷 상태가 올바르지 않습니다.

관련 정보