DNS használata Cisco routereken, switcheken – OSPF, traceroute

Sok eszköz konfiguráció elválaszthatatlan részét képezi a no ip domain-lookup parancs. Nem véletlenül, hiszen bármilyen karakter elütésre hosszú várakozás következik, ameddig az ember tépheti a haját. Gondolom ismerős az érzés…

De nem feltétlenül kell ennek így lennie, nézzük hogy lehet ezt megoldani és közben egy csomó hasznos dologra használni az eszközön a DNS-t.

Alap topológiánk szög egyszerű: R1-R2 egy OSPF area-ban, illetve van egy DNS szerverünk (szintén egy router) amelyen konfiguráljuk az IP host bejegyzéseket.

Az alap konfigurációk:

----
R1
----

hostname R1
!
!
ip name-server 10.0.23.3
ip cef
no ipv6 cef
!
!
!
username cisco password 0 cisco
!
redundancy
!
!
!
!
interface Loopback0
ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
ip address 10.0.12.1 255.255.255.0
ip ospf network point-to-point
!
!
router ospf 1
router-id 1.1.1.1
passive-interface default
no passive-interface Ethernet0/0
network 1.1.1.1 0.0.0.0 area 0
network 10.0.12.0 0.0.0.255 area 0
!
ip ospf name-lookup
!
!
!
!
line con 0
 logging synchronous
line aux 0
line vty 0 4
 login local
 transport input all
!

----
R2
----

hostname R2
!
!
!
ip name-server 10.0.23.3
!
!
username cisco password 0 cisco
!
!
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
!
interface Ethernet0/0
 ip address 10.0.12.2 255.255.255.0
 ip ospf network point-to-point
!
interface Ethernet0/1
 ip address 10.0.23.2 255.255.255.0
!
router ospf 1
 router-id 2.2.2.2
 passive-interface default
 no passive-interface Ethernet0/0
 network 2.2.2.2 0.0.0.0 area 0
 network 10.0.12.0 0.0.0.255 area 0
 network 10.0.23.0 0.0.0.255 area 0
!
!
ip ospf name-lookup
!
!
line con 0
 logging synchronous
line aux 0
line vty 0 4
 login local
 transport input all
!
!

-----
DNS
-----

hostname DNS
!
!
!
ip host R1 1.1.1.1
ip host R2 2.2.2.2
ip host R1-eth0 10.0.12.1
ip host R2-eth0 10.0.12.2
ip host R2-eth1 10.0.23.2
ip host dns 10.0.23.3

!
!
interface Ethernet0/0
 ip address 10.0.23.3 255.255.255.0
!
!
ip dns server
ip route 0.0.0.0 0.0.0.0 10.0.23.2
!
!
!
!
!
line con 0
 logging synchronous
line aux 0
line vty 0 4
 login
 transport input none
!

Nézzük mi történik ha csinálok egy typo-t valamelyik routeren?

R2#cont
Translating "cont"...domain server (10.0.23.3)
 (10.0.23.3)
Translating "cont"...domain server (10.0.23.3)

% Bad IP address or host name
% Unknown command or computer name, or unable to find computer address
R2#

Ez az amit mindannyian jól ismerünk, csak hosszú másodpercek után kapjuk vissza a konzolt.

De mi történik a háttérben?

Minden olyan bemenetre amit nem ismer a parser küld a router egy DNS query-t és megpróbál rácsatlakozni az eszközre. A query-t jól láthatjuk a szerveren ha bekapcsoljuk a DNS debugot.

DNS#
DNS#
DNS#debug ip domain
Domain Name System debugging is on
DNS#
*Aug 23 12:36:21.296: DNS: Incoming UDP query (id#20166)
*Aug 23 12:36:21.297: DNS: Type 1 DNS query (id#20166) for host 'cont' from 10.0.23.2(49770)
*Aug 23 12:36:21.297: DNS: Servicing request using view default
*Aug 23 12:36:21.297: search_nametype_index: cont
*Aug 23 12:36:21.297: search_nametype_index: cont
*Aug 23 12:36:21.297: search_nametype_index: cont
*Aug 23 12:36:21.297: search_nametype_index: cont

Mivel a DNS nem tudja feloldani a “cont” nevű hosztot ezért nem válaszol, R1 pedig erre vár. Ezért “fagy ki” a konzol.

Ha a névfeloldás rendben működik akkor nyílik a session.

R2#r1
Translating "r1"...domain server (10.0.23.3)
 (10.0.23.3)
Translating "r1"...domain server (10.0.23.3) [OK]
Trying r1 (1.1.1.1)... Open


User Access Verification

Username: cisco
Password:
R1>

Sokan egyszerűen kikapcsolják az eszközökön a névfeloldást, pedig ezzel elesnek pár hasznos funkciótól amire használható lenne a DNS.

Ha el szeretnénk kerülni a hosszú várakozást sokkal egyszerűbb ha bekonfiguráljuk a routeren hogy ne akarjon rácsatlakozni az eszközre. Ehhez minden line alá fel kell vegyük a transport preferred noneparancsot.

R2#sh run | s line
line con 0
 logging synchronous
 transport preferred none
line aux 0
 transport preferred none
line vty 0 4
 login local
 transport preferred none
 transport input all
R2#

Nézzük most mi történik ha megint elütés történik.

R2#
R2#cont
      ^
% Invalid input detected at '^' marker.

R2#

A parser egyből hibára fut, nincs várakozás. Probléma megoldva.

De miért jó nekünk ha van névfeloldás a routeren? Kapásból két jó példát tudok mondani.

 

OSPF name-lookup

Ha bekapcsoljuk az OSPF névfeloldást, akkor Router-ID helyett sok esetben hosztneveket fogunk látni. Pl.

R1#sh ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
r2                0   FULL/  -        00:00:39    10.0.12.2       Ethernet0/0
R1#sh ip ospf database

            OSPF Router with ID (1.1.1.1) (Process ID 1)

                Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         R1              1243        0x80000004 0x0002B9 3
2.2.2.2         r2              1034        0x80000005 0x00591D 4
R1#

Ha nem lehet “szépen” router-ID-kat választani (ami nem IP cím csak egy 32 bites szám, azaz nem kell hogy IP szinten elérhető legyen!) akkor sokkal könnyebb a kimeneteket olvasni, szerintem ez egy hasznos funkció.

Traceroute

A másik eset amit én nagyon szeretek hogy traceroutekimenetben nem csak az IP-ket hanem a hosztneveket is látjuk. Nagy topológiánál szerintem ez nagyban segíti a hibakeresést. Ehhez az kell hogy minden IP be legyen jegyezve a DNS szerveren.

Pl.

R1#traceroute dns
Translating "dns"...domain server (10.0.23.3) [OK]

Type escape sequence to abort.
Tracing the route to dns (10.0.23.3)
VRF info: (vrf in name/id, vrf out name/id)
  1 R2-eth0 (10.0.12.2) 0 msec 0 msec 1 msec
  2 dns (10.0.23.3) 0 msec *  1 msec
R1#traceroute r2
Translating "r2"...domain server (10.0.23.3) [OK]

Type escape sequence to abort.
Tracing the route to r2 (2.2.2.2)
VRF info: (vrf in name/id, vrf out name/id)
  1 R2-eth0 (10.0.12.2) 1 msec *  1 msec
R1#