Translate

понеділок, 2 травня 2011 р.

dig. Копаємо DNS

Приводом до написання статті послужила так би мовити відсутність нормального російсько чи україномовного хавту в інтернеті. Тож спробую нейтралізувати такі пробіли.

Як відомо, dig - програма з CLI-інтерфейсом, що призначена для опитування DNS-серверів на предмет інформації про хост що нас цікавить і тд. Спробую пояснити на конкретних прикладах.

1) Почнемо з найтривіальнішого прикладу, спробуємо дізнатись дані про перший доменнейм, який прийшов нам на думку (одразу в самому виводі прокоментую що значить виведене):

:~$ dig ubuntu.com

#Програма розповідає трішки про себе (версія програми) та про глобальні опції котрі вона використовує. 

; <<>> DiG 9.7.1-P2 <<>> ubuntu.com
;; global options: +cmd

#dig написав про деякі технічні деталі, які він отримав від ДНСа.

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64973
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0

#Якщо нічого не вказувати в запиті, то по замовчуванню йде запит на наявність A-запису на ДНС-сервері. Власне це нагадування dig-а, щодо того який запит ми зробили.



;; QUESTION SECTION:
;ubuntu.com.                    IN      A

#Відповідь, що отримав dig. Бачимо, що ДНС має запис у своїй базі про домен ubuntu.com.Видно що це А-запис (про записи можна почитати тут, тобто по айпі адресі 91.189.94.156 знаходиться сервер з даним домен-неймом.

;; ANSWER SECTION:
ubuntu.com.             521     IN      A       91.189.94.156


#NS-записи в базі ДНС-сервера, тобто це еталлоні ДНСи, що делегують зону ubuntu.com.

;; AUTHORITY SECTION:
ubuntu.com.             7346    IN      NS      ns3.canonical.com.
ubuntu.com.             7346    IN      NS      ns2.canonical.com.
ubuntu.com.             7346    IN      NS      ns1.canonical.com.

#Певна технічна інформація. Час отримання відповіді, ДНС-сервер, що ми опитували, час опитування і тд.
;; Query time: 1 msec
;; SERVER: 192.168.4.253#53(192.168.4.253)
;; WHEN: Mon May  2 11:19:24 2011
;; MSG SIZE  rcvd: 108

2) Можна опитати доменнейм, що відповідає за зону делегування сервера:

~$ dig @ns2.canonical.com. ubuntu.com

; <<>> DiG 9.7.1-P2 <<>> @ns2.canonical.com. ubuntu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64106
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;ubuntu.com.                    IN      A

;; ANSWER SECTION:
ubuntu.com.             600     IN      A       91.189.94.156

;; AUTHORITY SECTION:
ubuntu.com.             172800  IN      NS      ns1.canonical.com.
ubuntu.com.             172800  IN      NS      ns2.canonical.com.
ubuntu.com.             172800  IN      NS      ns3.canonical.com.

;; ADDITIONAL SECTION:
ns1.canonical.com.      172800  IN      A       91.189.94.173
ns2.canonical.com.      172800  IN      A       91.189.94.219
ns3.canonical.com.      172800  IN      A       209.6.3.210

;; Query time: 47 msec
;; SERVER: 91.189.94.219#53(91.189.94.219)
;; WHEN: Mon May  2 11:46:01 2011
;; MSG SIZE  rcvd: 156

Через собачку пишеться DNS який нас цікавить. Як бачимо записи збігаються з попереднім наведеним прикладом, але як показує практика, таке не завжди. Ось приведу приклад опитування мого університетського ДНС-сервера:

:~$ dig ubuntu.com

; <<>> DiG 9.7.1-P2 <<>> ubuntu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 14312
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;ubuntu.com.                    IN      A

;; Query time: 2 msec
;; SERVER: 77.47.128.130#53(77.47.128.130)
;; WHEN: Mon May  2 11:54:33 2011
;; MSG SIZE  rcvd: 28 

Як бачимо, від ДНС-а відповіді не поступило, хоча це таки ДНС-сервер. Не знаю чия це криворукість, але схоже таки провайдера.

Слід зауважити, що коли не вказувати конкретного ДНС-а dig-у, то він використовує перший доступний з файлу /etc/resolv.conf

В цьому прикладі не видно, проте відповідь може містити також CNAME-запис щодо домена, MX ( поштова адреса, що обслуговує домен ) і тд.

3) Можна попросити dig-а багато не говорити :

:~$ dig ubuntu.com A +short
91.189.94.156

Отримали А-запис.

Ну і таке інше ( приводжу лише приклади команд ) :

dig ubuntu.com CNAME +short
dig ubuntu.com NS +short
dig ubuntu.com MX +short
dig ubuntu.com AAA +short
dig ubuntu.com SOA +short

4) Можна провести трасування по DNS-ам:

~$ dig live.bete.tv +trace

; <<>> DiG 9.7.1-P2 <<>> live.bete.tv +trace
;; global options: +cmd
.                       169696  IN      NS      b.root-servers.net.
.                       169696  IN      NS      k.root-servers.net.
.                       169696  IN      NS      f.root-servers.net.
.                       169696  IN      NS      g.root-servers.net.
.                       169696  IN      NS      i.root-servers.net.
.                       169696  IN      NS      m.root-servers.net.
.                       169696  IN      NS      c.root-servers.net.
.                       169696  IN      NS      l.root-servers.net.
.                       169696  IN      NS      d.root-servers.net.
.                       169696  IN      NS      j.root-servers.net.
.                       169696  IN      NS      e.root-servers.net.
.                       169696  IN      NS      a.root-servers.net.
.                       169696  IN      NS      h.root-servers.net.
;; Received 272 bytes from 192.168.4.253#53(192.168.4.253) in 25 ms

tv.                     172800  IN      NS      a5.nstld.com.
tv.                     172800  IN      NS      c5.nstld.com.
tv.                     172800  IN      NS      d5.nstld.com.
tv.                     172800  IN      NS      f5.nstld.com.
tv.                     172800  IN      NS      g5.nstld.com.
tv.                     172800  IN      NS      h5.nstld.com.
tv.                     172800  IN      NS      l5.nstld.com.
;; Received 272 bytes from 199.7.83.42#53(l.root-servers.net) in 2 ms

bete.tv.                172800  IN      NS      ns1.bete.tv.
bete.tv.                172800  IN      NS      ns2.bete.tv.
;; Received 98 bytes from 192.42.93.34#53(g5.nstld.com) in 188 ms

live.bete.tv.           3600    IN      CNAME   bad.bete.tv.
bad.bete.tv.            3600    IN      CNAME   bad.v.bete.tv.
bad.v.bete.tv.          3600    IN      A       213.186.126.220
bete.tv.                3600    IN      NS      ns2.ntu-kpi.kiev.ua.
bete.tv.                3600    IN      NS      ns2.bete.tv.
bete.tv.                3600    IN      NS      ns.ntu-kpi.kiev.ua.
bete.tv.                3600    IN      NS      ns1.bete.tv.
;; Received 202 bytes from 213.186.126.222#53(ns2.bete.tv) in 2 ms

Як бачимо все відбулось, як написано в мануалах. Спочатку було опитано кореневі ДНС-и, потім ДНС-и більш низьких рівнів.

5) Отримаємо ім’я хоста, знаючи його IP:

$ dig -x 204.152.184.167 +short
mx-1.isc.org.

Як вже стало зрозуміло, dig досить гнучка річ. Про всі інші приклади використання читайте офіційний ман.)

Немає коментарів:

Дописати коментар