DNSルックアップIPおよびポートをリダイレクトするためのiptables


21

ISP(verizon)がポート53ですべてのDNSトラフィックをインターセプトしていることを発見しました。

iptablesを使用して、すべてのDNSルックアップトラフィックを特定のIPとポート(5353)にリダイレクトします。コンピューターがポート53で別のコンピューターに接続しようとすると、23.226.230.72:5353にリダイレクトされます。

使用しようとしているDNSサーバーとポートを確認するために、このコマンドを実行しました。

~$ dig +short serverfault.com @23.226.230.72 -p5353
198.252.206.16

これは私が使用しようとしているiptablesルールです。

iptables -t nat -A OUTPUT -p udp -m udp --dport 53 -j DNAT --to-destination 23.226.230.72:5353

そのルールを追加した後、すべてのDNSルックアップが見つかりません。ウェブサイトのpingが戻りunknown hostます。Webページには「サーバーが見つかりません」と表示されます。

~$ mtr serverfault.com
Failed to resolve host: Name or service not known

DNSを検索して23.226.230.72:5353からプルするようにします。iptablesルールを機能させるにはどうすればよいですか?

編集

ISPによるDNS(ポート53)インターセプトのデモ。digから23.226.230.72までのポート5353、次にポート53を介して出力をトレースします。

~$ dig +trace stackexchange.com @23.226.230.72 -p5353

; <<>> DiG 9.9.5-3-Ubuntu <<>> +trace stackexchange.com @23.226.230.72 -p5353
;; global options: +cmd
.           86395   IN  NS  ns7.opennic.glue.
.           86395   IN  NS  ns4.opennic.glue.
.           86395   IN  NS  ns3.opennic.glue.
.           86395   IN  NS  ns5.opennic.glue.
.           86395   IN  NS  ns2.opennic.glue.
.           86395   IN  NS  ns10.opennic.glue.
.           86395   IN  NS  ns1.opennic.glue.
.           86395   IN  NS  ns6.opennic.glue.
.           86395   IN  NS  ns8.opennic.glue.
dig: couldn't get address for 'ns8.opennic.glue': no more


~$ dig +trace stackexchange.com @23.226.230.72 -p53

; <<>> DiG 9.9.5-3-Ubuntu <<>> +trace stackexchange.com @23.226.230.72 -p53
;; global options: +cmd
.           7440    IN  NS  f.root-servers.net.
.           7440    IN  NS  d.root-servers.net.
.           7440    IN  NS  j.root-servers.net.
.           7440    IN  NS  i.root-servers.net.
.           7440    IN  NS  g.root-servers.net.
.           7440    IN  NS  k.root-servers.net.
.           7440    IN  NS  a.root-servers.net.
.           7440    IN  NS  h.root-servers.net.
.           7440    IN  NS  e.root-servers.net.
.           7440    IN  NS  m.root-servers.net.
.           7440    IN  NS  c.root-servers.net.
.           7440    IN  NS  b.root-servers.net.
.           7440    IN  NS  l.root-servers.net.
;; Received 239 bytes from 23.226.230.72#53(23.226.230.72) in 2948 ms

stackexchange.com.  215 IN  A   198.252.206.16
;; Received 62 bytes from 192.228.79.201#53(b.root-servers.net) in 116 ms

私の現在のiptables。 iptables-save

~# iptables-save
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*mangle
:PREROUTING ACCEPT [79950528:41742899703]
:INPUT ACCEPT [78748282:41360159554]
:FORWARD ACCEPT [13:5427]
:OUTPUT ACCEPT [85455483:57472640071]
:POSTROUTING ACCEPT [85480442:57475512901]
-A POSTROUTING -o lxcbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Tue Jul 15 23:06:52 2014
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*nat
:PREROUTING ACCEPT [71:18713]
:INPUT ACCEPT [7:474]
:OUTPUT ACCEPT [109:7855]
:POSTROUTING ACCEPT [109:7855]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -d 172.17.0.0/16 -j MASQUERADE
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
COMMIT
# Completed on Tue Jul 15 23:06:52 2014
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*filter
:INPUT ACCEPT [78748139:41360144354]
:FORWARD ACCEPT [13:5427]
:OUTPUT ACCEPT [85454926:57472600172]
:fail2ban-ssh - [0:0]
:fail2ban-vsftpd - [0:0]
-A INPUT -p tcp -m multiport --dports 21,20,990,989 -j fail2ban-vsftpd
-A INPUT -p tcp -m multiport --dports 22,6622 -j fail2ban-ssh
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 67 -j ACCEPT
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o lxcbr0 -j ACCEPT
-A FORWARD -i lxcbr0 -j ACCEPT
-A fail2ban-ssh -j RETURN
-A fail2ban-vsftpd -j RETURN
COMMIT

したがって、すべてのポート53トラフィックをそのIP(23.226.230.72)およびポート(5353)にリダイレクトしようとしていますか?
タチョミ

iptables rulesここに投稿してください
Networker

@tachomi正しい
Rucent88

または、ISPのDNSを使用できませんでした... GoogleのパブリックDNSサーバーが8.8.8.8あり、8.8.4.4
クリーク

@Creekあなたは誤解していると思います。私のispはポート53を介してすべてのトラフィックをインターセプトしています。GoogleDNSサーバーを使用したい場合でも、それらにアクセスできません。
Rucent88

回答:


12

これらのすべての手順をルート(sudo)として実行します。

このファイルを編集します。

/etc/NetworkManager/NetworkManager.conf

行をコメントアウトしてDnsMasqを無効にしdns=dnsmasqます。置く#行の前に

#dns=dnsmasq

ネットワークを再起動します。

service network-manager restart

これらのiptableルールを追加します。

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 23.226.230.72:5353
iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to 23.226.230.72:5353

2
このソリューションはOSで更新され、リソースを消費せず、セキュリティリスクがゼロ、ブートスクリプトを使用した非常に簡単なセットアップ、およびゼロメンテナンスです。欠点は、それは非常に柔軟ではないです
Rucent88

3

あなたが本当に望んでいることは、DNSクエリで何が起こるかを制御することであるかのように見えます。

私がiptablesを使用することが私の好ましい解決策になるかどうかはわかりません。

要求をホストとポートに単に転送するローカルDNSサーバーをセットアップすることを考えましたか?1つの例:bind9フォワーダーオプションを使用すると、フォワーダーにポートを追加できます。

このような設定は、保守とトラブルシューティングがはるかに簡単で、はるかに柔軟です。キャッシュの利点を検討するか、外部DNSサーバーがダウンしている場合を検討してください。DNS構成には複数のフォワーダーを含めることができますが、iptablesルールには1つのIPのみが含まれます。

デジタルオーシャンのチュートリアルで bind9のセットアップの良い概要があります。フォワーダーにポートを追加するだけで、設定は完了です。

Bind9は多くのリソースをまったく消費せず、簡単に構成できます(または少なくとも、iptablesより簡単です:-))


言うまでもなく、このセットアップでは、ローカルの転送DNSサーバーを使用するようにデバイスを設定することを忘れないでください。
ビンセントデBaere 14

DNSサーバーを実行していましたが、信頼できませんでした(ジャンクハードウェア)。セキュリティを最新の状態に保つことは苦痛でした。より多くの時間、リソース、電気を消費し、ついにバケツを蹴り上げました。企業ネットワークの背後に数百台のコンピューターがあった場合、DNSサーバーが良いアイデアであることに同意します。しかし、私はラップトップを持っている一人です。いくつかのiptableルールは、最も簡単で最低のリソースでなければなりません。
Rucent88 14

ラップトップに1つ追加するだけで、ほとんどリソースを消費せず、メインのOSで更新され(配布パッケージを使用すると仮定)、localhostでリッスンします。セキュリティリスクはほとんどありません。
ビンセント・デ・Baere 14

実際、私見、99%のケースでシナリオを維持するより良い方法です。適用されない唯一の1%は、キャプティブポータルシステムを構成しているときですが、それは別の話です。
-ivanleoncz

2

これを試して:

最初に、転送オプションを有効にする必要があります

/etc/sysctl.conf

値を1に設定します

net.ipv4.ip_forward = 1

変更を有効にする

sysctl -p 

次を保存して実行します。

iptables -t nat -A PREROUTING -p tcp --sport 53 -j DNAT --to-destination 23.226.230.72:5353
iptables -t nat -A POSTROUTING -j MASQUERADE

PREROUTINGでin-interface(-i eth1)またはout-interfect(-o eth0)でin-interface(-i eth1)を指定できる場合、IN POSTROUTINGが役立ちます。

注:MASQUARADE行は、宛先IPをメインIPでマスクしている間に必要です。


sysctl net.ipv4.ip_forward=1はiptablesルールを入力します。DNSは機能していますが、まだispによってインターセプトされています。だから、DNSはまだポート53を介して送信されていることを私に示している
Rucent88

ルールをに変更しましたudpが、同じ結果が得られました。
Rucent88

iptables-saveの出力をお願いします。あなたがその行を無効にして、-A POSTROUTING -j MASQUERADE 1を残すことができる場合は10.0.3.0/24、そう、役に立つことができ-私は何をかもしれないことはあなたのマスキングのみ指定MASQUERADEすべてがということです
tachomi

あなたが要求した情報を追加しました
Rucent88

さて、少しビートを理解しましょう。...ポート53の着信トラフィックはすべて、23.226.230.72または発信トラフィックにリダイレクトするトラフィックですか?
タコミ14

1

これを試して:

iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to 23.226.230.72:5353;

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 23.226.230.72:5353;

iptables -t nat -A POSTROUTING -j MASQUERADE

それは意味:
1)を任意のローカルユーザがポート5353で23.226.230.72に53送信TCPポートを世界に出て接する
2)1としてではなく、UDPの同じ
3)弊社から来るとして発信パケットの送信元情報を設定します。


0
iptables -t nat -A PREROUTING -p tcp --dport 53 -j DNAT --to XX.XX.XX.XX:5353
iptables -t nat -A PREROUTING -p udp  --dport 53 -j DNAT --to XX.XX.XX.XX:5353
iptables -t nat -A POSTROUTING -j MASQUERADE

この答えが「5353」に言及していないという事実は、それが自動的に間違っていると信じさせます。
G-Manによると、「Reinstate Monica」

修正済み.........
Zibri

OK、あなたの答えをもう一度見てみましょう。と非常に似ているように思わtachomiの答え変更した(1)を除いsportに  dport(これは、明らかに、ということtachomiの答えではエラーだったbattman622が3年前に指摘したあなたのために行(コマンド)を加え、(2) udp(これは、タコミの答えは正当に改善されていますが、すでにコメントで言及されているものは  …(続き)
G-Manは「Reinstate Monica」と言っています

(続き)…および他のいくつかの回答)、および(3)に置き換え--to-destinationました  --to。  マニュアルページにはそれが記載されておらず--to、  --to-destination同等です。それどころか、それは(ターゲットではなく)ターゲットで  --to使用され、その引数にはポート番号が含まれていないという。(私は他のいくつかの答えがあなたがした方法を使用していることに気づきましたが)それがあなたがそれを使用する方法で動作することを確信しています(ターゲットで、ポート番号で  )?…(続き)NETMAPDNAT--to--toDNAT
G-Manが「Reinstate Monica」と言う

(続き)…(もしそうなら、おそらく誰かが変更要求をmanページのメンテナーに提出するべきでしょう。)  簡潔さ以外の方法--toよりも優れてい   --to-destinationますか?
G-Manが「Reinstate Monica」と言う
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.