Wie erzwinge ich DNS für bestimmte Clients?

Wie erzwinge ich DNS für bestimmte Clients?

Ich verwende Shibbys Tomato-Firmware auf meinem ASUS RT-N66U. Ich versuche, OpenDNS-IPs für bestimmte Clients (z. B. meine Kinder) basierend auf der MAC-Adresse zu erzwingen, während andere Clients die Standardwerte des Routers erhalten. So weit, so gut (größtenteils). Hier ist das Dnsmasq-Skript, das ich dazu verwende:

# Assign alternate DNS for select hosts
# Set Specific Clients to be affected
dhcp-mac=set:altdns,XX:XX:XX:XX:XX:XX # kids laptop
dhcp-mac=set:altdns,XX:XX:XX:XX:XX:XX # kids ipod

# Set Alternate DNS
dhcp-option=tag:altdns,option:dns-server,208.67.220.220,208.67.222.222

Das funktioniert hervorragend ... im 2,4-GHz-Band. Wenn sie sich mit dem 5-GHz-Band verbinden, erhalten sie die Standard-DNS-Einträge des Routers.

Frage Nr. 1: Gibt es eine Möglichkeit, dieses Skript sowohl auf 2,4 GHz (eth1) als auch auf 5 GHz (eth2) anzuwenden? Wenn das nicht klappt, kann ich dann mit Tomato Geräte für das 5-GHz-Band auf die Whitelist setzen? Ich kann generell Geräte für drahtlose Verbindungen auf die Whitelist/Blacklist setzen, weiß aber nicht, wie ich das für das eine oder das andere machen kann.

Ich kann immer einfach einen anderen Schlüssel für 5 GHz verwenden, das ist also keine große Sache. Die größere Lücke ist, dass dies nur mit DHCP funktioniert. Das Ändern der DNS-Einstellungen auf dem Laptop umgeht dies vollständig. Mein 12-jähriger Sohn ist an dem Punkt angelangt, an dem er dies ohne große Probleme herausfinden könnte.

Frage Nr. 2: Wie kann ich DNS für einen bestimmten Client erzwingen, wenn dieser kein DHCP verwendet? Ich dachte an eine Art Firewall-Regel, die DNS-Verkehr nur zu bestimmten IPs für bestimmte MAC-Adressen oder so etwas zulässt, aber ich habe keine Ahnung, wie ich das anstellen soll. Gibt es alternativ eine Möglichkeit, DHCP zu erzwingen (oder bestimmte Clients zu blockieren, wenn sie kein DHCP verwenden)?

Antwort1

Hier ist, wie ich es (größtenteils) zum Laufen gebracht habe. Zuerst habe ich sichergestellt, dass alle Geräte, die OpenDNS nicht verwenden sollten, Hostnamen hatten. Als Nächstes habe ich „home“ als Domänennamen in der Router-Identifikation hinzugefügt (ohne diesen funktioniert es nicht). Dann habe ich das folgende Firewall-Skript hinzugefügt:

# For certain devices, use default LAN DNS
# #############################################################
iptables -t nat -A PREROUTING -i br0 -s xxxx_Family_PC.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxx_Family_PC.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Laptop.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Laptop.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Chromecast.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Chromecast.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Galaxy-Note.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Galaxy-Note.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-HTC-One-M8.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-HTC-One-M8.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr) 
iptables -t nat -A PREROUTING -i br0 -s Roku.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Roku.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Sharp-Aquos-HDTV.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Sharp-Aquos-HDTV.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxxsiPhone2.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxxsiPhone2.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-MacBook.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-MacBook.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)

# For every other client, use OpenDNS (including guest network - br1).
# #############################################################
iptables -t nat -A PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 208.67.220.220
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to 208.67.220.220
iptables -t nat -A PREROUTING -i br1 -p udp --dport 53 -j DNAT --to 208.67.220.220
iptables -t nat -A PREROUTING -i br1 -p tcp --dport 53 -j DNAT --to 208.67.220.220

Damit bekomme ich so ziemlich das, was ich wollte. Das einzige, was fehlt, ist, dass Clients, die nicht mit dem ersten Abschnitt übereinstimmen (und daher die OpenDNS-IP erhalten), keinen sekundären DNS haben, falls der erste ausfällt. Es gibt einfach keine Möglichkeit, das mit dieser Methode anzugeben. Trotzdem funktioniert es in 99,99 % der Fälle, was gut genug sein muss. Diese letzten beiden Zeilen für br1 stellen sicher, dass jeder, der sich mit meinem Gastnetzwerk verbindet, gezwungen ist, auch OpenDNS zu verwenden.

Antwort2

Ich experimentiere gerade mit Tomato, aber vielleicht werde ich aus genau diesem Grund wieder zu dd-wrt zurückkehren. So geht es in dd-wrt:

http://www.dd-wrt.com/wiki/index.php/OpenDNS

Scrollen Sie nach unten zum Abschnitt „Intercept DNS Port Specific Ip/Range“

verwandte Informationen