web-dev-qa-db-ja.com

DNSポートを特定のDNSサーバーにリダイレクトする

NATネットワーク上のユーザーのルーターとしてubuntuサーバーを使用しています。すべてのユーザーにネットワーク上のローカルDNSサーバーセットアップを使用するように強制したいです。パブリックDNSサーバーを使用している場合でも、クライアントマシンでは、DNSポートをローカルDNSサーバーにリダイレクト(DNAT)する必要があります。これが私が思いついたものです。

iptables -t nat -A PREROUTING -i eth5 -p udp --dport 53 -j DNAT --to 192.168.1.1:53
iptables -A FORWARD -d 192.168.1.1 -i eth5 -p udp --dport 53 -j ACCEPT

NATネットワークに面しているインターフェイスはeth5。上記のルールは私にはうまくいきませんでした。より良い解決策はありますか?

編集1:私の目的は、ネットワーク上のビットトレントトラフィックを防ぐためにOpndnsフィルターを実装することです。フィルタは現在非常にうまく機能しており、ユーザーはDHCPを使用しているため、ローカルDNSサーバーを取得します。しかし、IPアドレスとDNSサーバーIPを手動で指定するなどの回避策を発見する可能性があるのではないかと心配しています。

編集2:次のコードはトマトファームウェアの機能を実装しています:

 if (nvram_match("dns_intcpt", "1")) {
     ipt_write("-A PREROUTING -p udp -s %s/%s ! -d %s/%s --dport 53 -j DNAT --to-destination %s\n",
          lanaddr, lanmask,
          lanaddr, lanmask,
          lanaddr);
}

詳細はこちら

1
nixnotwin

より良い解決策はありますか?

はい-まったくしていません。

あなたが解決しようとしている問題が何であれ、通常のDNS解決をいじることはほとんど正しい答えではありません。

[〜#〜] edit [〜#〜] re:更新。ポリシーの問題を解決するためにテクノロジーを不適切に使用しようとしています。しないでください。

4
Alnitak

DNSサーバーからの応答がファイアウォールをバイパスしているため、機能していません。クライアントは、送信されたものと一致しないため、これらの応答を(正しく)ドロップします。

DNSサーバーに向かうパケットをルーターのIPにSNATするには、POSTROUTINGテーブルに別のルールを追加する必要があります。

または、DNSサーバーを別のネットワークに配置すると、応答がルーターを介して強制的に戻されるため、問題が解決します。

3
MikeyB

DNSトラフィックを外部DNSサーバーにドロップしないのはなぜですか?外部サーバーを明示的に指定する人は、それが機能していないことに気付くでしょう。

2
Jaap Eldering