Cisco IOS: DNS-Views

Heute lese ich im IPExpert-Blog über DNS-Views und sage mir, “Hey, darüber habe ich doch auch gerade geschrieben”. Nun, geschrieben schon, aber noch nicht veröffentlicht, was ich hiermit nachhole:

Über den im IOS eingebauten DNS-Server habe ich schon vor längerer Zeit berichtet. Seit einiger Zeit (genauer gesagt seit IOS 12.4(9)T) unterstützt das IOS auch sogenannte DNS-Views. Dabei werden die DNS-Anfragen in Abhängigkeit der angefragten Domains an unterschiedliche DNS-Server gesendet. Ich benutze das z.B. für Wartungszugänge zu Kunden. Wenn eine Anfrage an server.firma1.local am DNS-Server ankommt, wird die Anfrage über das Firma1-VPN weitergeleitet, bei allen anderen Anfragen aber an den DNS-Server des Providers.

Die Konfiguration startet mit den DNS Name-Lists. In diesen werden per Regular Expression die Domain-Namen oder FQDNs beschrieben, für die eine abweichende Behandlung gewünscht ist. In meinem Fall ist dies eine Namensauflösung durch einen anderen DNS-Server:

ip dns name-list 1 permit .firma.local

Als nächstes werden die DNS-Views konfiguriert:

ip dns view FIRMA
 logging
 dns forwarder 10.11.12.13
 dns forwarding source-interface Vlan254
ip dns view default
 logging
 domain timeout 2
 dns forwarder 8.8.8.8

In meinem Beispiel gibt es eine dedizierte View FIRMA und eine optionale default-View.
In der View FIRMA setze ich den zuständigen DNS-Server und die Source-Adresse der Anfrage, damit die Anfrage auch wirklich durch den VPN-Tunnel gesendet wird. Die Default-View verwendet den Google DNS-Server. Für beide Views wird das Logging aktiviert.

Die Verwendung der beiden Views muss als nächstes aktiviert werden:

ip dns view-list DNS
 view FIRMA 10
  restrict name-group 1
 view default 1000
!
ip dns server view-group DNS

Die View-List mit dem Namen DNS spezifiziert, welche View für welche Domains verwendet werden soll. Die View FIRMA wird dabei nur für die Domains verwendet, die in der name-list 1 spezifiziert wurden. Die View default wird für den gesamten Rest verwendet. Die “10” und “1000” gibt dabei die Priorität der Einträge in der List an.
Die View-List kann dann entweder Interface-basiert, oder global (wie in diesem Beispiel) angewendet werden.

Durch das Logging kann man kontrollieren ob die Views verwendet werden:

Feb 20 19:41:34.213 CET: %DNS-6-LOG_ACCESS: DNS View default used for client 10.255.253.74/1904, querying A 'time.apple.com'
Feb 20 19:42:41.301 CET: %DNS-6-LOG_ACCESS: DNS View FIRMA used for client 10.255.250.2/62733, querying AAAA 'www.firma.local'
Advertisements
Cisco IOS: DNS-Views

Laut SPD bin ich ein Unterstützer der Kinderschänder

Denn ich habe nicht nur einen eigenen DNS-Server, sondern habe auch bei Kunden schon diverse installiert.

Heise Telepolis: Danke für diesen hübschen Server! Danke im Namen aller Kin…

Es ist wirklich erstaunlich wie laut die SPD “Bitte wählt uns nie wieder!” ruft. Und das wird mir mindestens bei der nächsten Wahl sehr leicht fallen.

Laut SPD bin ich ein Unterstützer der Kinderschänder

Konfiguration eines DNS-Servers im Cisco IOS

In meinem Heim-Netz stehen im Moment ein paar Änderungen an, um einen PC-Server mit seinen diversen Diensten abzulösen. Der erste Schritt war die Migration des DHCP-Servers auf einen Catalyst 3560. Über den DHCP-Server im IOS bzw. der ASA wurde aber vermutlich schon genug geschrieben.

Der nächste Schritt ist die Migration des Windows 2003 DNS-Servers auf meinen Internet-Router (im Moment ein Cisco 1841 mit IOS AdvSec. 12.4(20)T). Im IOS ist ein fast vollwertiger DNS-Server enthalten, dessen Konfiguration dem eines “richtigen” DNS-Servers sehr ähnlich ist. Alles was man in dem hervorragenden Buch “DNS and BIND” gelernt hat, bleibt auch hier gültig. Einschränkungen sind, daß man im IOS keinen Zonentransfer machen kann, was für ein Heim-Netz aber verschmerzbar ist. Weiterhin funktionieren die Reverse-Lookup-Zonen nicht, das vermisse ich schon mehr.

Eine kleine Basis-Konfiguration (der IOS DNS-Server kann noch deutlich mehr):

Als erstes wird die Zone definiert:

ip dns primary domain-name soa primary-server-name mailbox-name 
     [refresh-interval [retry-interval [expire-ttl [minimum-ttl]]]]

Im einfachsten Fall ist das also ein

gw(config)#ip dns primary example.com soa ns.example.com admin.example.com

Für die fehlenden Angaben werden vom Router automatisch Default-Werte eingetragen:

gw(config)#do sh run | i ip dns
ip dns server
ip dns primary example.com soa ns.example.com admin.example.com 21600 900 7776000 86400

Die Zeile “ip dns server” wurde vom Router auch automatisch konfiguriert.

Als nächster Schritt wird dem Router noch ein eigener Domain-Name mitgegeben und die Ressourcen des Netzes werden definiert:

gw(config)#ip domain-name example.com
gw(config)#ip host gw.example.com 10.255.250.1
gw(config)#ip host server.example.com 10.255.255.10
gw(config)#ip host csamc.exampe.com 10.255.255.14
gw(config)#ip host c3560.exampe.com 10.255.255.1
gw(config)#ip host c2940.exampe.com 10.255.255.5

und so weiter und so fort. Ein Eintrag, der bei dem DNS-Server nicht zwingend ist, aber zu einer “sauberen” Konfiguration dazugehört, ist,

gw(config)#ip host example.com ns ns.example.com
gw(config)#ip host ns.example.com 10.255.250.1

Genau so können bei Bedarf MX- und SRV-Records eingetragen werden.

Wer in seinem Home-Netz redundante Server hat, kann natürlich auch mehrere Adressen für einen FQDN konfigurieren:

gw(config)#ip host www.example.com 10.255.255.11 10.255.255.12

Als letzte Konfiguration muss dafür gesorgt werden, daß der Router auch Anfragen für fremde Domains zu einem Upstream-DNS-Server weiterleiten kann. Ich benutze vor meinem 1841 eine Fritzbox als DSL-Router, daher reicht ein einfacher name-server-Eintrag:

gw(config)#ip name-server 192.168.178.1

Wenn der Router seine IP-Konfiguration per DHCP oder PPP bekommt, kann auch der gelernte DNS-Server verwendet werden:

interface Dialer1
 ip address negotiated
 encapsulation ppp
 ppp ipcp dns request

Überprüfen kann man die Konfiguration mit einem “show hosts”:

gw#sh hosts
Default domain is example.com
Name/address lookup uses domain service
Name servers are 192.168.178.1

Codes: UN - unknown, EX - expired, OK - OK, ?? - revalidate
temp - temporary, perm - permanent
NA - Not Applicable None - Not defined

Host                      Port  Flags      Age Type   Address(es)
example.com               NA    (perm, OK)  0  NS       ns.example.com
SOA      ns.example.com admin.example.com
0 21600 900 7776000 86400
gw.example.com            None  (perm, OK)  0   IP    10.255.250.1
server.example.com        None  (perm, OK)  0   IP    10.255.255.10
csamc.exampe.com          None  (perm, OK)  0   IP    10.255.255.14
c3560.exampe.com          None  (perm, OK)  0   IP    10.255.255.1
c2940.exampe.com          None  (perm, OK)  0   IP    10.255.255.5
ns.example.com            None  (perm, OK)  0   IP    10.255.250.1
www.example.com           None  (perm, OK)  0   IP    10.255.255.11
10.255.255.12
security-planet.de        None  (temp, OK)  0   IP    88.198.206.211
gw#

Der letzte Eintrag (security-planet.de) ist ein temporärer, den der Router über seinen Upstream-DNS aufgelöst hat.

Und hier komplett die relevante Konfiguration:

hostname gw
!
ip domain name example.com
ip host example.com ns ns.example.com
ip host gw.example.com 10.255.250.1
ip host server.example.com 10.255.255.10
ip host csamc.exampe.com 10.255.255.14
ip host c3560.exampe.com 10.255.255.1
ip host c2940.exampe.com 10.255.255.5
ip host ns.example.com 10.255.250.1
ip host www.example.com 10.255.255.11 10.255.255.12
ip name-server 192.168.178.1
!
ip dns server
ip dns primary example.com soa ns.example.com admin.example.com 21600 900 7776000 86400
Konfiguration eines DNS-Servers im Cisco IOS