Ich habe festgestellt, dass mein ISP (Verizon) den gesamten DNS-Verkehr auf Port 53 abfängt.
Mit iptables möchte ich den gesamten DNS-Suchverkehr auf eine bestimmte IP und einen bestimmten Port umleiten (5353). Jeder Versuch meines Computers, eine Verbindung zu einem anderen Computer an Port 53 herzustellen, sollte auf 23.226.230.72:5353 umgeleitet werden.
Um den DNS-Server und den Port zu überprüfen, den ich verwenden möchte, habe ich diesen Befehl ausgeführt.
~$ dig +short serverfault.com @23.226.230.72 -p5353
198.252.206.16
Dies ist die Iptables-Regel, die ich zu verwenden versuche.
iptables -t nat -A OUTPUT -p udp -m udp --dport 53 -j DNAT --to-destination 23.226.230.72:5353
Nach dem Hinzufügen dieser Regel werden nicht alle DNS-Lookups gefunden. Website-Pings kehren zurück unknown host
. Auf den Webseiten wird "Server nicht gefunden" angezeigt.
~$ mtr serverfault.com
Failed to resolve host: Name or service not known
Ich möchte, dass meine DNS-Lookups von 23.226.230.72:5353 abgerufen werden. Wie kann ich die iptables-Regel anwenden?
BEARBEITEN
Demonstration der DNS-Überwachung (Port 53) durch meinen Internetdienstanbieter. Verfolgen Sie die Ausgabe von dig auf 23.226.230.72 über Port 5353 und dann über Port 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
Meine aktuellen 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
iptables rules
hier8.8.8.8
und8.8.4.4
Antworten:
Führen Sie alle diese Anweisungen als root (sudo) aus.
Bearbeiten Sie diese Datei.
Deaktivieren Sie DnsMasq, indem Sie die Zeile auskommentieren
dns=dnsmasq
. Setzen Sie ein#
vor die LinieStarten Sie Ihr Netzwerk neu.
Fügen Sie diese iptable-Regeln hinzu.
quelle
Es sieht so aus, als ob Sie wirklich die Kontrolle darüber haben möchten, was mit Ihren DNS-Abfragen geschieht.
Ich bin mir nicht sicher, ob iptables meine bevorzugte Lösung wäre.
Haben Sie darüber nachgedacht, einen lokalen DNS-Server einzurichten, der Ihre Anforderungen einfach an den gewünschten Host und Port weiterleitet? Ein Beispiel: Mit der Option bind9 forwarders können Sie einem Forwarder einen Port hinzufügen.
Eine solche Einrichtung ist viel einfacher zu warten und zu beheben und kann viel flexibler sein. Ziehen Sie den Vorteil des Cache in Betracht, oder betrachten Sie nur den Fall, in dem Ihr externer DNS-Server ausfällt. Sie können mehrere Weiterleitungen in Ihrer DNS-Konfiguration haben, aber nur eine IP in den iptables-Regeln ....
Einen guten Überblick über die Einrichtung von bind9 gibt es in einem Tutorial bei Digital Ocean . Fügen Sie einfach den Port zu den Weiterleitungen hinzu und Sie sollten fertig sein.
Bind9 verbraucht nicht viel Ressourcen und ist einfach zu konfigurieren (oder zumindest: einfacher als iptables :-))
quelle
Versuche dies:
Zuerst müssen Sie die Weiterleitungsoption in aktivieren
Setzen Sie den Wert von auf eins
Aktivieren Sie die Änderungen
Speichern Sie und führen Sie Folgendes aus:
Wenn Sie die In-Schnittstelle (-i eth1) in PREROUTING oder / und die Out-Schnittstelle (-o eth0) in POSTROUTING angeben könnten, wäre dies hilfreich.
HINWEIS: MASQUARADE-Leitung ist erforderlich, während diese die Ziel-IP mit der Haupt-IP maskiert.
quelle
sysctl net.ipv4.ip_forward=1
die Iptables-Regeln eingegeben. DNS funktioniert, wird aber immer noch von meinem ISP abgefangen. Das bedeutet für mich, dass DNS immer noch über Port 53 gesendet wird.udp
, aber ich habe die gleichen Ergebnisse erzielt.Versuche dies:
Es bedeutet:
1) Jeder lokaler Benutzer kontaktiert an Port 23.226.230.72 tcp 53 Sende Welt Port aus 5353.
2) Den gleichen wie 1 , aber für udp
3) Stellen Sie die Quelle Informationen über das ausgehende Paket als von uns kommen.
quelle
quelle
sport
zudport
(dies war offenbar ein Fehler in tachomi Antwort , dass battman622 vor drei Jahren darauf hingewiesen , (2) Sie haben eine Linie (Befehl) fürudp
(dies ist eine legitime Verbesserung von Tachomis Antwort, aber eine, die bereits in einem Kommentar erwähnt wurde … (Fortsetzung)--to-destination
mit--to
. Die Manpage sagt das nicht--to
und--to-destination
ist äquivalent; Im Gegenteil, es wird angegeben, dass dies--to
mit demNETMAP
Ziel verwendet wird (im Gegensatz zumDNAT
Ziel) und dass sein Argument keine Portnummer enthält. (Obwohl mir aufgefallen ist, dass einige andere Antworten so lauten,--to
wie Sie es getan haben.) Sind Sie sicher, dass dies so--to
funktioniert, wie Sie es verwendet haben (mit einer Portnummer, mit demDNAT
Ziel)? … (Fortsetzung)--to
besser als--to-destination
in irgendeiner anderen Form als Kürze?