すべてのアウトバウンド UDP DNS 要求を localhost DNS サーバーにリダイレクトする

すべてのアウトバウンド UDP DNS 要求を localhost DNS サーバーにリダイレクトする

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キューを使用することをお勧めします。

関連情報