web-dev-qa-db-ja.com

DNSルックアップIPとポートをリダイレクトするiptables

私の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ルックアップが見つかりません。 Webサイトの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)傍受のデモンストレーション。ポート5353を介してDigから23.226.230.72へのトレース出力、次にポート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
22
Rucent88

これらすべての手順をroot(Sudo)として実行します。

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

/etc/NetworkManager/NetworkManager.conf

dns=dnsmasqをコメント化して、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
13
Rucent88

DNSクエリで何が発生するかを制御しているように見えます。

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

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

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

Bind9の設定についての概要 Digital Oceanのチュートリアル の概要があります。フォワーダーにポートを追加するだけで、すべての準備が整います。

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

3

これを試して:

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

/etc/sysctl.conf

次のいずれかの値に設定します

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

インインターフェース(-i eth1)をPREROUTINGに指定したり、アウトインタクト(-o eth0)を指定したりできる場合は、IN POSTROUTINGが便利です。

注:これにより宛先IPがメインIPでマスクされる間、MASQUARADE行が必要です。

2
tachomi

これを試して:

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)ポートtcp 53に接続しているローカルユーザーは、ポート5353で23.226.230.72に送信します。
2)1と同じですが、udp用です
3)発信パケットのソース情報を、私たちから来るものとして設定します。

1
George Hidalgo
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
0
Zibri