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たり、透過的にプロキシしたいと思います。[::]

ベストアンサー1

おすすめ記事