LANからのすべてのアウトバウンドDNS要求をlocalhostで実行されているトンネルにリダイレクトし、127.0.0.1:5353でUDPを受信しようとしています。
iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 127.0.0.1:5353
テストしてみてください
nc -u -l -p 5353
そして
nc -u 127.0.0.1 53
大丈夫でUDPセッションが機能しますが、次のコマンドを使用しようとすると:
nc -u 8.8.8.8 53
nc
リスナーはトラフィックを受信できますが、次のように応答しません。
送信2、受信2:接続が拒否されました。
しかし、
iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 192.168.1.108:5353
正常に動作し、同じWi-Fiネットワーク上で動作しているデバイスは正常に応答することができます。
編集する:TCP を使用する DNS クエリは個別に管理されるため、考慮する必要はありません。
答え1
DNS UDP ベースの要求をリダイレクトするには、DNS デーモン/プロキシがポート 5353/UDP でリッスンしている場合は、次の操作を行う必要があります。
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:5353
ループは必要ないので、ソースは内部ネットワークブロック/ネットワークである必要があります(つまり、外部にDNS要求をする必要があるかもしれません)。
マルチホームコンピュータから内部ネットワークをルーティングしている場合は、ソースネットワークなしでこのインターフェイスを適用できます。
iptables -i eth0 -t nat -A PREROUTING -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:5353
ポート53でもこれを行うことができます。次のようにターゲットをブラックリストに追加します。
iptables -t nat -A PREROUTING ! -d 127.0.0.1/32 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:53
OUTPUTキューはローカルテストで機能できますが、リモートコンピュータと現在の構成の場合はPREROUTINGキューを使用することをお勧めします。