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-proxy
TCPも提供します)。 TCP応答パケットは常に正しくSNATされます。
それで何が起こりましたか? UDP NATに問題がありますか? DNSプロキシが私のLinuxホストに対するDNSクエリを受信し0.0.0.0
たり、透過的にプロキシしたいと思います。[::]