网络实验:用Dig命令模仿迭代解析

服务器
顶级域名服务器告诉我们,fasionchan.com 这个域应该去找 f1g1ns1.dnspod.net. 或 f1g1ns2.dnspod.net. 来解析。这二者就是 fasionchan.com 的 权威域名服务器 。

 [[396916]]

本文转载自微信公众号「小菜学编程」,作者小菜学编程。转载本文请联系小菜学编程公众号。

上一小节,我们学习了 DNS 服务器的工作原理,它们可以分为很多个角色:

  • 根域名服务器
  • 顶级域名服务器
  • 权威域名服务器
  • 递归解析器(DNS缓存服务器)

于此同时,我们还了解了域名 迭代解析 的过程。本节我们趁热打铁,安排一次实验——按步骤迭代解析域名 test.fasionchan.com ,以此加深理解。

迭代解析从 根域名服务器 开始,根服务器列表可以从 root-servers.org 上获取,也可以通过 dig 命令查询:

  1. root@netbox [ ~ ]  ➜ dig . NS 
  2.  
  3. ; <<>> DiG 9.16.1-Ubuntu <<>> @10.2.66.66 . NS 
  4. ; (1 server found) 
  5. ;; global options: +cmd 
  6. ;; Got answer: 
  7. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42791 
  8. ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 8 
  9.  
  10. ;; OPT PSEUDOSECTION: 
  11. ; EDNS: version: 0, flags:; udp: 4000 
  12. ;; QUESTION SECTION
  13. ;.              IN  NS 
  14.  
  15. ;; ANSWER SECTION
  16. .           1700    IN  NS  k.root-servers.net. 
  17. .           1700    IN  NS  m.root-servers.net. 
  18. .           1700    IN  NS  l.root-servers.net. 
  19. .           1700    IN  NS  b.root-servers.net. 
  20. .           1700    IN  NS  g.root-servers.net. 
  21. .           1700    IN  NS  f.root-servers.net. 
  22. .           1700    IN  NS  d.root-servers.net. 
  23. .           1700    IN  NS  e.root-servers.net. 
  24. .           1700    IN  NS  i.root-servers.net. 
  25. .           1700    IN  NS  a.root-servers.net. 
  26. .           1700    IN  NS  h.root-servers.net. 
  27. .           1700    IN  NS  j.root-servers.net. 
  28. .           1700    IN  NS  c.root-servers.net. 
  29.  
  30. ;; ADDITIONAL SECTION
  31. k.root-servers.net. 3282    IN  A   193.0.14.129 
  32. g.root-servers.net. 2845    IN  A   192.112.36.4 
  33. d.root-servers.net. 118 IN  A   199.7.91.13 
  34. e.root-servers.net. 494 IN  A   192.203.230.10 
  35. a.root-servers.net. 1771    IN  A   198.41.0.4 
  36. j.root-servers.net. 3197    IN  A   192.58.128.30 
  37. c.root-servers.net. 1830    IN  A   192.33.4.12 
  38.  
  39. ;; Query time: 14 msec 
  40. ;; SERVER: 10.2.66.66#53(10.2.66.66) 
  41. ;; WHEN: Thu Apr 08 09:01:17 CST 2021 
  42. ;; MSG SIZE  rcvd: 364 

根域名服务器总共有 13 台,编号从 A 到 M 。我们可以从中选择一台,比如 A ,它的 IP 地址是 198.41.0.4 。

接下来,我们执行 dig 命令,向根域名服务器 A 发起域名解析请求:

  1. root@netbox [ ~ ]  ➜ dig @198.41.0.4 test.fasionchan.com 
  2.  
  3. ; <<>> DiG 9.16.1-Ubuntu <<>> @198.41.0.4 test.fasionchan.com 
  4. ; (1 server found) 
  5. ;; global options: +cmd 
  6. ;; Got answer: 
  7. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44843 
  8. ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 27 
  9. ;; WARNING: recursion requested but not available 
  10.  
  11. ;; OPT PSEUDOSECTION: 
  12. ; EDNS: version: 0, flags:; udp: 1472 
  13. ;; QUESTION SECTION
  14. ;test.fasionchan.com.       IN  A 
  15.  
  16. ;; AUTHORITY SECTION
  17. com.            172800  IN  NS  a.gtld-servers.net. 
  18. com.            172800  IN  NS  b.gtld-servers.net. 
  19. com.            172800  IN  NS  c.gtld-servers.net. 
  20. com.            172800  IN  NS  d.gtld-servers.net. 
  21. com.            172800  IN  NS  e.gtld-servers.net. 
  22. com.            172800  IN  NS  f.gtld-servers.net. 
  23. com.            172800  IN  NS  g.gtld-servers.net. 
  24. com.            172800  IN  NS  h.gtld-servers.net. 
  25. com.            172800  IN  NS  i.gtld-servers.net. 
  26. com.            172800  IN  NS  j.gtld-servers.net. 
  27. com.            172800  IN  NS  k.gtld-servers.net. 
  28. com.            172800  IN  NS  l.gtld-servers.net. 
  29. com.            172800  IN  NS  m.gtld-servers.net. 
  30.  
  31. ;; ADDITIONAL SECTION
  32. a.gtld-servers.net. 172800  IN  A   192.5.6.30 
  33. b.gtld-servers.net. 172800  IN  A   192.33.14.30 
  34. c.gtld-servers.net. 172800  IN  A   192.26.92.30 
  35. d.gtld-servers.net. 172800  IN  A   192.31.80.30 
  36. e.gtld-servers.net. 172800  IN  A   192.12.94.30 
  37. f.gtld-servers.net. 172800  IN  A   192.35.51.30 
  38. g.gtld-servers.net. 172800  IN  A   192.42.93.30 
  39. h.gtld-servers.net. 172800  IN  A   192.54.112.30 
  40. i.gtld-servers.net. 172800  IN  A   192.43.172.30 
  41. j.gtld-servers.net. 172800  IN  A   192.48.79.30 
  42. k.gtld-servers.net. 172800  IN  A   192.52.178.30 
  43. l.gtld-servers.net. 172800  IN  A   192.41.162.30 
  44. m.gtld-servers.net. 172800  IN  A   192.55.83.30 
  45. a.gtld-servers.net. 172800  IN  AAAA    2001:503:a83e::2:30 
  46. b.gtld-servers.net. 172800  IN  AAAA    2001:503:231d::2:30 
  47. c.gtld-servers.net. 172800  IN  AAAA    2001:503:83eb::30 
  48. d.gtld-servers.net. 172800  IN  AAAA    2001:500:856e::30 
  49. e.gtld-servers.net. 172800  IN  AAAA    2001:502:1ca1::30 
  50. f.gtld-servers.net. 172800  IN  AAAA    2001:503:d414::30 
  51. g.gtld-servers.net. 172800  IN  AAAA    2001:503:eea3::30 
  52. h.gtld-servers.net. 172800  IN  AAAA    2001:502:8cc::30 
  53. i.gtld-servers.net. 172800  IN  AAAA    2001:503:39c1::30 
  54. j.gtld-servers.net. 172800  IN  AAAA    2001:502:7094::30 
  55. k.gtld-servers.net. 172800  IN  AAAA    2001:503:d2d::30 
  56. l.gtld-servers.net. 172800  IN  AAAA    2001:500:d937::30 
  57. m.gtld-servers.net. 172800  IN  AAAA    2001:501:b1f9::30 
  58.  
  59. ;; Query time: 169 msec 
  60. ;; SERVER: 198.41.0.4#53(198.41.0.4) 
  61. ;; WHEN: Fri Apr 09 08:38:10 CST 2021 
  62. ;; MSG SIZE  rcvd: 843 

其中,@ 指定目标 DNS 服务器的地址。

从 dig 命令的输出可以看到,根域名服务器告诉我们 .com 域名应该去找 a.gtld-servers.net. 等服务器。这些服务器都是 .com 的 顶级域名服务器 ,根域名服务器把它们的地址一并告诉我们了。

我们可以从这些顶级域名服务器中选择一台,比如 a.gtld-servers.net. ,它的 IP 地址是 192.5.6.30 。然后,再次指定 dig 命令,向它发起域名解析请求:

  1. root@netbox [ ~ ]  ➜ dig @192.5.6.30 test.fasionchan.com 
  2.  
  3. ; <<>> DiG 9.16.1-Ubuntu <<>> @192.5.6.30 test.fasionchan.com 
  4. ; (1 server found) 
  5. ;; global options: +cmd 
  6. ;; Got answer: 
  7. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7836 
  8. ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 1 
  9. ;; WARNING: recursion requested but not available 
  10.  
  11. ;; OPT PSEUDOSECTION: 
  12. ; EDNS: version: 0, flags:; udp: 4096 
  13. ;; QUESTION SECTION
  14. ;test.fasionchan.com.       IN  A 
  15.  
  16. ;; AUTHORITY SECTION
  17. fasionchan.com.     172800  IN  NS  f1g1ns1.dnspod.net. 
  18. fasionchan.com.     172800  IN  NS  f1g1ns2.dnspod.net. 
  19.  
  20. ;; Query time: 212 msec 
  21. ;; SERVER: 192.5.6.30#53(192.5.6.30) 
  22. ;; WHEN: Fri Apr 09 08:38:58 CST 2021 
  23. ;; MSG SIZE  rcvd: 101 

顶级域名服务器告诉我们,fasionchan.com 这个域应该去找 f1g1ns1.dnspod.net. 或 f1g1ns2.dnspod.net. 来解析。这二者就是 fasionchan.com 的 权威域名服务器 。

但这次 .com 域名没有告诉我们 f1g1ns1.dnspod.net. 或 f1g1ns2.dnspod.net. 的 IP 地址。因此,我们必须先自己动手,将它们的域名解析成 IP 地址。

我们可以直接执行 dig 命令,一键完成解析:

  1. root@netbox [ ~ ]  ➜ dig f1g1ns1.dnspod.net. 
  2.  
  3. ; <<>> DiG 9.16.1-Ubuntu <<>> f1g1ns1.dnspod.net. 
  4. ;; global options: +cmd 
  5. ;; Got answer: 
  6. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6244 
  7. ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0 
  8.  
  9. ;; QUESTION SECTION
  10. ;f1g1ns1.dnspod.net.        IN  A 
  11.  
  12. ;; ANSWER SECTION
  13. f1g1ns1.dnspod.net. 15  IN  A   58.247.212.36 
  14. f1g1ns1.dnspod.net. 15  IN  A   61.151.180.44 
  15. f1g1ns1.dnspod.net. 15  IN  A   129.211.176.187 
  16. f1g1ns1.dnspod.net. 15  IN  A   162.14.25.230 
  17. f1g1ns1.dnspod.net. 15  IN  A   183.192.164.118 
  18.  
  19. ;; Query time: 13 msec 
  20. ;; SERVER: 192.168.65.1#53(192.168.65.1) 
  21. ;; WHEN: Fri Apr 09 08:39:38 CST 2021 
  22. ;; MSG SIZE  rcvd: 116 

如果 dig 命令未指定 DNS 服务器,它默认会到本地的 递归解析器 ,也就是 DNS缓存服务器 上去查询。DNS缓存服务器会帮我们做迭代解析,再把结果告诉我们。

如果亲不厌其烦,可以自己进行迭代解析。具体步骤也是类似的,附在本文后半部分。

得到权威域名服务器的 IP 地址后,我们就可以向它发起解析请求:

  1. root@netbox [ ~ ]  ➜ dig @58.247.212.36 test.fasionchan.com 
  2.  
  3. ; <<>> DiG 9.16.1-Ubuntu <<>> @58.247.212.36 test.fasionchan.com 
  4. ; (1 server found) 
  5. ;; global options: +cmd 
  6. ;; Got answer: 
  7. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42646 
  8. ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1 
  9. ;; WARNING: recursion requested but not available 
  10.  
  11. ;; OPT PSEUDOSECTION: 
  12. ; EDNS: version: 0, flags:; udp: 4096 
  13. ;; QUESTION SECTION
  14. ;test.fasionchan.com.       IN  A 
  15.  
  16. ;; ANSWER SECTION
  17. test.fasionchan.com.    600 IN  A   10.0.0.1 
  18.  
  19. ;; AUTHORITY SECTION
  20. fasionchan.com.     600 IN  NS  f1g1ns2.dnspod.net. 
  21. fasionchan.com.     600 IN  NS  f1g1ns1.dnspod.net. 
  22.  
  23. ;; Query time: 57 msec 
  24. ;; SERVER: 58.247.212.36#53(58.247.212.36) 
  25. ;; WHEN: Fri Apr 09 08:55:47 CST 2021 
  26. ;; MSG SIZE  rcvd: 128 

瞧,我们成功解析域名 test.fasionchan.com ,得到它对应的 IP 地址 10.0.0.1 !

迭代解析 f1g1ns1.dnspod.net.

如果不想通过递归解析器,可以自行执行迭代解析,查询 f1g1ns1.dnspod.net. 的 IP 地址。

首先,向 根域名服务器 发起解析请求:

  1. root@netbox [ ~ ]  ➜ dig @198.41.0.4 f1g1ns1.dnspod.net. 
  2.  
  3. ; <<>> DiG 9.16.1-Ubuntu <<>> @198.41.0.4 f1g1ns1.dnspod.net. 
  4. ; (1 server found) 
  5. ;; global options: +cmd 
  6. ;; Got answer: 
  7. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49636 
  8. ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 27 
  9. ;; WARNING: recursion requested but not available 
  10.  
  11. ;; OPT PSEUDOSECTION: 
  12. ; EDNS: version: 0, flags:; udp: 1472 
  13. ;; QUESTION SECTION
  14. ;f1g1ns1.dnspod.net.        IN  A 
  15.  
  16. ;; AUTHORITY SECTION
  17. net.            172800  IN  NS  a.gtld-servers.net. 
  18. net.            172800  IN  NS  b.gtld-servers.net. 
  19. net.            172800  IN  NS  c.gtld-servers.net. 
  20. net.            172800  IN  NS  d.gtld-servers.net. 
  21. net.            172800  IN  NS  e.gtld-servers.net. 
  22. net.            172800  IN  NS  f.gtld-servers.net. 
  23. net.            172800  IN  NS  g.gtld-servers.net. 
  24. net.            172800  IN  NS  h.gtld-servers.net. 
  25. net.            172800  IN  NS  i.gtld-servers.net. 
  26. net.            172800  IN  NS  j.gtld-servers.net. 
  27. net.            172800  IN  NS  k.gtld-servers.net. 
  28. net.            172800  IN  NS  l.gtld-servers.net. 
  29. net.            172800  IN  NS  m.gtld-servers.net. 
  30.  
  31. ;; ADDITIONAL SECTION
  32. a.gtld-servers.net. 172800  IN  A   192.5.6.30 
  33. b.gtld-servers.net. 172800  IN  A   192.33.14.30 
  34. c.gtld-servers.net. 172800  IN  A   192.26.92.30 
  35. d.gtld-servers.net. 172800  IN  A   192.31.80.30 
  36. e.gtld-servers.net. 172800  IN  A   192.12.94.30 
  37. f.gtld-servers.net. 172800  IN  A   192.35.51.30 
  38. g.gtld-servers.net. 172800  IN  A   192.42.93.30 
  39. h.gtld-servers.net. 172800  IN  A   192.54.112.30 
  40. i.gtld-servers.net. 172800  IN  A   192.43.172.30 
  41. j.gtld-servers.net. 172800  IN  A   192.48.79.30 
  42. k.gtld-servers.net. 172800  IN  A   192.52.178.30 
  43. l.gtld-servers.net. 172800  IN  A   192.41.162.30 
  44. m.gtld-servers.net. 172800  IN  A   192.55.83.30 
  45. a.gtld-servers.net. 172800  IN  AAAA    2001:503:a83e::2:30 
  46. b.gtld-servers.net. 172800  IN  AAAA    2001:503:231d::2:30 
  47. c.gtld-servers.net. 172800  IN  AAAA    2001:503:83eb::30 
  48. d.gtld-servers.net. 172800  IN  AAAA    2001:500:856e::30 
  49. e.gtld-servers.net. 172800  IN  AAAA    2001:502:1ca1::30 
  50. f.gtld-servers.net. 172800  IN  AAAA    2001:503:d414::30 
  51. g.gtld-servers.net. 172800  IN  AAAA    2001:503:eea3::30 
  52. h.gtld-servers.net. 172800  IN  AAAA    2001:502:8cc::30 
  53. i.gtld-servers.net. 172800  IN  AAAA    2001:503:39c1::30 
  54. j.gtld-servers.net. 172800  IN  AAAA    2001:502:7094::30 
  55. k.gtld-servers.net. 172800  IN  AAAA    2001:503:d2d::30 
  56. l.gtld-servers.net. 172800  IN  AAAA    2001:500:d937::30 
  57. m.gtld-servers.net. 172800  IN  AAAA    2001:501:b1f9::30 
  58.  
  59. ;; Query time: 172 msec 
  60. ;; SERVER: 198.41.0.4#53(198.41.0.4) 
  61. ;; WHEN: Fri Apr 09 08:40:49 CST 2021 
  62. ;; MSG SIZE  rcvd: 840 

根域名服务器告诉我们,.net 应该去找 a.gtld-servers.net. 等服务器,服务器地址附在后面的附加节。

我们选择 a.gtld-servers.net. 这台 顶级域名服务器 ,它的地址是 192.5.6.30 。然后向它发起解析请求:

  1. root@netbox [ ~ ]  ➜ dig @192.5.6.30 f1g1ns1.dnspod.net. 
  2.  
  3. ; <<>> DiG 9.16.1-Ubuntu <<>> @192.5.6.30 f1g1ns1.dnspod.net. 
  4. ; (1 server found) 
  5. ;; global options: +cmd 
  6. ;; Got answer: 
  7. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53457 
  8. ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 7 
  9. ;; WARNING: recursion requested but not available 
  10.  
  11. ;; OPT PSEUDOSECTION: 
  12. ; EDNS: version: 0, flags:; udp: 4096 
  13. ;; QUESTION SECTION
  14. ;f1g1ns1.dnspod.net.        IN  A 
  15.  
  16. ;; AUTHORITY SECTION
  17. dnspod.net.     172800  IN  NS  v6ns3.dnsv2.net. 
  18. dnspod.net.     172800  IN  NS  v6ns4.dnsv2.com. 
  19.  
  20. ;; ADDITIONAL SECTION
  21. v6ns3.dnsv2.net.    172800  IN  A   129.211.176.248 
  22. v6ns3.dnsv2.net.    172800  IN  A   162.14.24.245 
  23. v6ns3.dnsv2.net.    172800  IN  A   183.192.164.118 
  24. v6ns3.dnsv2.net.    172800  IN  A   223.166.151.17 
  25. v6ns3.dnsv2.net.    172800  IN  AAAA    2402:4e00:1430:1102:0:9136:2b2f:bf6b 
  26. v6ns3.dnsv2.net.    172800  IN  A   61.129.8.141 
  27.  
  28. ;; Query time: 213 msec 
  29. ;; SERVER: 192.5.6.30#53(192.5.6.30) 
  30. ;; WHEN: Fri Apr 09 08:41:27 CST 2021 
  31. ;; MSG SIZE  rcvd: 210 

顶级域名服务器告诉我们,dnspod.net. 这个域应该去找 v6ns3.dnsv2.net. 或者 v6ns4.dnsv2.com. 。这两者就是所谓的 权威域名服务器 。这次,顶级域名服务器已经在附加节中,附上了它们的 IP 地址。

我们从中挑选一个,比如 129.211.176.248 ,继续发起解析请求:

  1. root@netbox [ ~ ]  ➜ dig @129.211.176.248 f1g1ns1.dnspod.net. 
  2.  
  3. ; <<>> DiG 9.16.1-Ubuntu <<>> @129.211.176.248 f1g1ns1.dnspod.net. 
  4. ; (1 server found) 
  5. ;; global options: +cmd 
  6. ;; Got answer: 
  7. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23542 
  8. ;; flags: qr aa rd; QUERY: 1, ANSWER: 5, AUTHORITY: 2, ADDITIONAL: 1 
  9. ;; WARNING: recursion requested but not available 
  10.  
  11. ;; OPT PSEUDOSECTION: 
  12. ; EDNS: version: 0, flags:; udp: 4096 
  13. ;; QUESTION SECTION
  14. ;f1g1ns1.dnspod.net.        IN  A 
  15.  
  16. ;; ANSWER SECTION
  17. f1g1ns1.dnspod.net. 172800  IN  A   183.192.164.118 
  18. f1g1ns1.dnspod.net. 172800  IN  A   162.14.25.230 
  19. f1g1ns1.dnspod.net. 172800  IN  A   58.247.212.36 
  20. f1g1ns1.dnspod.net. 172800  IN  A   61.151.180.44 
  21. f1g1ns1.dnspod.net. 172800  IN  A   129.211.176.187 
  22.  
  23. ;; AUTHORITY SECTION
  24. dnspod.net.     86400   IN  NS  v6ns3.dnsv2.net. 
  25. dnspod.net.     86400   IN  NS  v6ns4.dnsv2.com. 
  26.  
  27. ;; Query time: 34 msec 
  28. ;; SERVER: 129.211.176.248#53(129.211.176.248) 
  29. ;; WHEN: Fri Apr 09 08:42:07 CST 2021 
  30. ;; MSG SIZE  rcvd: 185 

最终,我们成功解析到 f1g1ns1.dnspod.net. 对应的 IP 地址,总共有 5 个。

扩展阅读

dig (https://linux.die.net/man/1/dig)

责任编辑:武晓燕 来源: 小菜学编程
相关推荐

2020-02-26 18:00:12

dig命令Linux域名解析

2023-10-20 14:08:35

digDNS

2019-12-11 10:42:10

Linuxdignslookup

2011-09-08 11:38:44

2011-08-12 09:23:16

dig中文man

2021-12-06 10:21:50

LinuxDNS 查询

2010-04-20 10:00:58

Unix操作系统

2010-12-24 10:25:20

SCP 命令

2021-07-07 10:48:00

DigGoWire

2022-12-06 11:57:54

Lua参数

2009-06-26 10:37:32

树的汇总

2009-09-08 13:58:42

CCNA考试

2009-12-17 16:15:00

CCNP学习笔记

2010-07-19 13:23:03

Linux Telne

2010-07-22 09:25:09

telnet命令

2010-06-07 17:04:21

rsync 命令

2010-07-12 17:48:03

HART命令

2010-07-27 15:06:31

telnet端口

2009-08-31 15:07:32

CCNA考试实验常用命令

2016-03-28 10:39:05

Python迭代迭代器
点赞
收藏

51CTO技术栈公众号