Inhaltsverzeichnis
Android - DNS-Problem
Als ich am Wochenende die Firewall Verstöße auf meinem Gateway/Router überprüfte, viel mir auf, dass mein Mobiltelefon ständig versuchte die DNS-Namensauflösung gegen die DNS-Server von Google
8.8.8.8
8.8.4.4
durchzuführen, und nicht gegen meinen, im heimischen Netzwerk befindlichen DNS-Server. (ISC BIND).
Firewall Verstöße aus /var/log/messages
- (nur relevanter Ausschnitt):
... Jan 3 22:10:14 rechner01 kernel: FORWARD Defend IN=eth0 OUT=eth0 SRC=192.168.0.12 DST=8.8.8.8 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=38163 DPT=53 LEN=40 Jan 3 22:10:14 rechner01 kernel: FORWARD Defend IN=eth0 OUT=eth0 SRC=192.168.0.12 DST=8.8.4.4 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=34705 DPT=53 LEN=40 ...
Problem
Ich übermittle meinem Mobiltelefon mit meinem DHCP-Server im heimischen Netzwerk beim beziehen einer IP-Adresse auch den DNS-Server-Eintrag. (Auszug aus meiner ISC DHCP-Konfiguration):
... subnet 192.168.0.0 netmask 255.255.255.0 { option broadcast-address 192.168.0.255; option domain-name "tachtler.net"; option domain-name-servers 192.168.0.1; option domain-search "tachtler.net"; ...
Dies wird jedoch von meinem Mobiltelefon IGNORIERT !!!
Aufgrund dieser vielleicht gewollten oder auch ungewollten Ignoranz meines Mobiltelefons, wollte ich die Firewall Verstöße nicht länger sehen und auch mein Mobiltelefon im heimischen Netzwerk, meinen DNS-Server ISC BIND ausschließlich nutzen lassen.
Mögliche Lösungen für dieses Problem sind
- Transparenter DNS-Server, realisiert durch NAT auf meinem Gateway/Router via
iptables
! - Transparenter DNS-Server, realisiert durch NAT auf einen DNS-Server via
iptables
!
iptables: NAT-Gateway/Router
HINWEIS - Beispiel mit DNS-Server auf dem Gateway/Router!
Im folgendem Beispiel sind nachfolgende Ergänzungen im Regelsatz von iptables
durchzuführen, um
- Alle DNS-Anfragen TCP/UDP auf Port 53 umzuleiten
- Dies transparent (unsichtbar) für das jeweilige Endgerät
- Auf einen auf dem Gateway/Router laufenden DNS-Server
durchzuführen.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -t nat -L -nv --line-numbers Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk ab der Position 1 hinzu, ohne das der Paketfilter angehalten werden muss:
-A PREROUTING -s 192.168.0.0/24 -i eth0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.0.1:53
-A PREROUTING -s 192.168.0.0/24 -i eth0 -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.0.1:53
und hier die Befehle:
# iptables -A PREROUTING -s 192.168.0.0/24 -i eth0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.0.1:53 # iptables -A PREROUTING -s 192.168.0.0/24 -i eth0 -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.0.1:53
Eine erneute Abfrage des iptables
-Regelwerts, sollte dann in etwa nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -t nat -L -nv --line-numbers Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DNAT tcp -- eth0 * 192.168.0.0/24 0.0.0.0/0 tcp dpt:53 to:192.168.0.1:53 2 0 0 DNAT udp -- eth0 * 192.168.0.0/24 0.0.0.0/0 udp dpt:53 to:192.168.0.1:53 Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Die neuen Zeilen sind an Position 1 und Postition 2 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 1 0 0 DNAT tcp -- eth0 * 192.168.0.0/24 0.0.0.0/0 tcp dpt:53 to:192.168.0.1:53 2 0 0 DNAT udp -- eth0 * 192.168.0.0/24 0.0.0.0/0 udp dpt:53 to:192.168.0.1:53 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
iptables: DNS-Server
HINWEIS - Beispiel mit DNS-Server Weiterleitung!
Im folgendem Beispiel sind nachfolgende Ergänzungen im Regelsatz von iptables
durchzuführen, um
- Alle DNS-Anfragen TCP/UDP auf Port 53 umzuleiten
- Dies transparent (unsichtbar) für das jeweilige Endgerät
- Auf einen beliebigen DNS-Server - HIER –> 192.168.0.20 !!!
durchzuführen.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -t nat -L -nv --line-numbers Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
UND
# iptables -L FORWARD -nv --line-numbers Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- + * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 DROP all -- + * 0.0.0.0/0 0.0.0.0/0 state INVALID 3 0 0 ACCEPT icmp -- + * 0.0.0.0/0 0.0.0.0/0 icmp type 255
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk ab der Position 1 hinzu, ohne das der Paketfilter angehalten werden muss:
-A PREROUTING -s 192.168.0.0/24 -i eth0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.0.20:53
-A PREROUTING -s 192.168.0.0/24 -i eth0 -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.0.20:53
-I INPUT 4 -s 192.168.0.0/24 -d 192.168.0.20/32 -i eth0 -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT
-I INPUT 5 -s 192.168.0.0/24 -d 192.168.0.20/32 -i eth0 -p udp -m udp --dport 53- m state --state NEW -j ACCEPT
und hier die Befehle:
# iptables -A PREROUTING -s 192.168.0.0/24 -i eth0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.0.20:53 # iptables -A PREROUTING -s 192.168.0.0/24 -i eth0 -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.0.20:53 # iptables -I INPUT 4 -s 192.168.0.0/24 -d 192.168.0.20/32 -i eth0 -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT # iptables -I INPUT 5 -s 192.168.0.0/24 -d 192.168.0.20/32 -i eth0 -p udp -m udp --dport 53- m state --state NEW -j ACCEPT
Eine erneute Abfrage des iptables
-Regelwerts, sollte dann in etwa nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -t nat -L -nv --line-numbers Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DNAT tcp -- eth0 * 192.168.0.0/24 0.0.0.0/0 tcp dpt:53 to:192.168.0.20:53 2 0 0 DNAT udp -- eth0 * 192.168.0.0/24 0.0.0.0/0 udp dpt:53 to:192.168.0.20:53 Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
UND
# iptables -L FORWARD -nv --line-numbers Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- + * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 DROP all -- + * 0.0.0.0/0 0.0.0.0/0 state INVALID 3 0 0 ACCEPT icmp -- + * 0.0.0.0/0 0.0.0.0/0 icmp type 255 4 0 0 ACCEPT tcp -- eth0 * 192.168.0.0/24 192.168.0.20 tcp dpt:53 state NEW 5 0 0 ACCEPT udp -- eth0 * 192.168.0.0/24 192.168.0.20 udp dpt:53 state NEW
Die neuen Zeilen sind an Position 1 und Postition 2 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 1 0 0 DNAT tcp -- eth0 * 192.168.0.0/24 0.0.0.0/0 tcp dpt:53 to:192.168.0.20:53 2 0 0 DNAT udp -- eth0 * 192.168.0.0/24 0.0.0.0/0 udp dpt:53 to:192.168.0.20:53 ...
UND
an Position 4 und Postition 5 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 4 0 0 ACCEPT tcp -- eth0 * 192.168.0.0/24 192.168.0.20 tcp dpt:53 state NEW 5 0 0 ACCEPT udp -- eth0 * 192.168.0.0/24 192.168.0.20 udp dpt:53 state NEW ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]