iptables를 사용하여 UDP를 로컬 포트로 리디렉션하고 SNAT되지 않은 응답 패킷 [닫기]

iptables를 사용하여 UDP를 로컬 포트로 리디렉션하고 SNAT되지 않은 응답 패킷 [닫기]

Linux에서 서버 DNS를 실행 dnscrypt-proxy하거나 tor나열 하고 있습니다. [::]:1053내 모든 Linux 호스트의 DNS 쿼리가 이 프록시를 투명하게 사용하기를 원합니다.

UDP 트래픽을 투명하게 프록시하기 위해 인터넷에서 찾은 방법은 다음과 같습니다.

iptables -t nat -I OUTPUT -p udp --dport 53 -j REDIRECT--to-ports 1053

또는

iptables -t nat -I OUTPUT -p udp --dport 53 -j DNAT --to 127.0.0.1:1053

( -j REDIRECT동일한 -j DNAT --to 127.0.0.1:)

쓸모 없는. 내 브라우저에서 URL을 열 수 없으며 다음과 nslookup같이 표시됩니다 dig.

;; reply from unexpected source: 192.168.3.60#1053, expected 192.168.3.1#53

( 192.168.3.1/etc/resolv.conf)

와이어샤크에서 봤는데DNS 프록시의 응답 패킷은 SNAT되지 않지만 SNAT 처리되어야 합니다..

이것은 conntrack -E:

[NEW] udp      17 30 src=127.0.0.1 dst=127.0.0.1 sport=35954 dport=35954 [UNREPLIED] src=127.0.0.1 dst=127.0.0.1 sport=35954 dport=35954
[NEW] udp      17 30 src=::1 dst=::1 sport=59799 dport=59799 [UNREPLIED] src=::1 dst=::1 sport=59799 dport=59799
[NEW] udp      17 30 src=192.168.3.60 dst=192.168.3.1 sport=34825 dport=53 [UNREPLIED] src=127.0.0.1 dst=192.168.3.60 sport=1053 dport=34825
[NEW] udp      17 30 src=192.168.3.60 dst=192.168.3.60 sport=1053 dport=34825 [UNREPLIED] src=192.168.3.60 dst=192.168.3.60 sport=34825 dport=1053

그런데 이상한 점은,127.0.0.1에이전트가 Listen 대신 Listen을 하게 하면 [::]작동합니다. Wireshark에서 응답 패킷이 올바르게 SNAT된 것을 확인했습니다. 그리고 투명한 DNS 프록시로부터 응답을 받을 dig수 있습니다 .nslookup

이는 conntract -E에이전트가 듣는 때 입니다 127.0.0.1.

   [NEW] udp      17 30 src=127.0.0.1 dst=127.0.0.1 sport=58584 dport=58584 [UNREPLIED] src=127.0.0.1 dst=127.0.0.1 sport=58584 dport=58584
   [NEW] udp      17 30 src=::1 dst=::1 sport=39482 dport=39482 [UNREPLIED] src=::1 dst=::1 sport=39482 dport=39482
   [NEW] udp      17 30 src=192.168.3.60 dst=192.168.3.1 sport=38165 dport=53 [UNREPLIED] src=127.0.0.1 dst=192.168.3.60 sport=1053 dport=38165
[UPDATE] udp      17 30 src=192.168.3.60 dst=192.168.3.1 sport=38165 dport=53 src=127.0.0.1 dst=192.168.3.60 sport=1053 dport=38165

TCP에서는 이러한 문제가 발생하지 않습니다( dnscrypt-proxyTCP도 제공). TCP 응답 패킷은 항상 올바르게 SNAT됩니다.

그래서 무슨 일이 일어났나요? UDP NAT에 문제가 있는 걸까요? DNS 프록시가 내 Linux 호스트에 대한 DNS 쿼리를 수신 0.0.0.0하거나 투명하게 프록시하기 를 원합니다 .[::]

관련 정보