Linux DNS 解析與配置
序
當(dāng)我接收到一批新的服務(wù)器時(shí),嘗試連接外網(wǎng),比如訪問百度的首頁:
curl www.baidu.com
發(fā)現(xiàn)報(bào)錯(cuò),不能解析正確的主機(jī)名。這個(gè)其實(shí)就是主機(jī)在解析主機(jī)名時(shí)沒能正確發(fā)現(xiàn)對(duì)應(yīng)的主機(jī)的 ip。當(dāng)我們使用類似于域名等去訪問時(shí),最后都是由 DNS 解析并返回具體的 ip 地址,最終訪問到具體的 ip 也就是某服務(wù)器。
當(dāng)報(bào)錯(cuò)如上時(shí),多半是 /etc/resolv.cof
文件未能正確配置導(dǎo)致,可以更改為:
# Generated by NetworkManager
search huangyichun.com
nameserver 8.8.8.8
nameserver 114.114.114.114
resolv.conf
這個(gè)文件是 DNS 的 client 端使用的文件,用于設(shè)置 DNS 服務(wù)器的 ip 地址以及 DNS 域名,還可以配置域名搜索順序等等。主要包含如下關(guān)鍵字:
- nameserver
- domain
- search
- sortlist
- options
他們?cè)O(shè)置的格式都是 關(guān)鍵字
+空格
+ 參數(shù)
。他們之間是有順序的,從上往下的順序進(jìn)行加載。
nameserver
標(biāo)示 DNS 服務(wù)器的 IP 地址,可以有多行的 nameserver,優(yōu)先查找上面的 DNS 服務(wù)器,是嘗試通過 DNS 服務(wù)器來解析主機(jī)名的主要方法。當(dāng)?shù)谝粋€(gè) DNS 超時(shí)時(shí),會(huì)轉(zhuǎn)向第二個(gè) DNS 繼續(xù)請(qǐng)求,除非配置了 options
。
domain
主機(jī)的域名。不與 search
共存,只存在最后一條。表示該主機(jī)的域名是多少。比如 www.huangyichun.com
的域名就是 huangyichun.com
。詳細(xì)看 search
。
search
可以有多個(gè)參數(shù),當(dāng)要查詢沒有域名的主機(jī),那么將會(huì)在申明的域中進(jìn)行查找。大體上來說 search
和 domain
并沒有什么區(qū)別,他們都是在如果沒有輸入完整的網(wǎng)址時(shí)進(jìn)行補(bǔ)全域名的功能。比如,我們直接 ping www
都不知道究竟是哪一個(gè) www
,如果配置了 domain
或者 search
那么直接幫助補(bǔ)全:
cat /etc/resolv.conf
# Generated by NetworkManager
#domain huangyichun.com
#nameserver 8.8.8.8
#nameserver 114.114.114.114
nslookup www
sortlist
允許將得到域名結(jié)果進(jìn)行特定的排序。
options
可選的參數(shù)。
-
rotate
,當(dāng)配置rotate后,進(jìn)行DNS解析時(shí),對(duì)配置的多個(gè)search進(jìn)行輪循查詢,這樣可以減輕第一個(gè)DNS的解析工作。 -
debug
,開啟debug模式。 -
ndots:n
,設(shè)置在初始查詢之前,必須出現(xiàn)的點(diǎn)數(shù)閾值。n默認(rèn)為1,意味著如果名稱中只要有點(diǎn),就會(huì)在任何搜索列表元素附加到該名稱之前,將首先嘗試將名稱作為絕對(duì)名稱。 -
timeout:n
,設(shè)置等待nameserver
的秒數(shù),如果超時(shí)則會(huì)開始訪問下一個(gè)nameserver
,默認(rèn)為5。 -
attempts:n
,設(shè)置對(duì)于nameserver
重試次數(shù),默認(rèn)為2。
這里只展示了部分參數(shù),其余參數(shù)請(qǐng)參照:
resolv.conf(5) - Linux manual page
舉個(gè)例子
我們之前配置的 search
與 nameserver
將設(shè)定域名在 huangyichun.com
下進(jìn)行補(bǔ)全,DNS 解析時(shí)優(yōu)先 8.8.8.8
,其次為 114.114.114.114
。
怎么解析百度
百度是我們的好朋友,我們直接想一下怎么解析的百度的網(wǎng)址 www.baidu.com
。
使用 nslookup www.baidu.com
可以直接解析完畢,并返回器結(jié)果:
nslookup www.baidu.comcd
可以看到解析的結(jié)果為 39.156.66.14
,在瀏覽器上直接訪問該地址,可以訪問百度頁面:
現(xiàn)在我們使用 nslookup
查看一下域名的解析流程。
注意是域名的解析流程,在 linux 中,并不止是域名的解析,還有主機(jī)的解析,也就是 /etc/hosts 等等
流程
-
ping www.baidu.com
,然后會(huì)根據(jù)resolv.conf
文件發(fā)送 DNS 解析請(qǐng)求。 -
DNS客戶端
解析器會(huì)將解析請(qǐng)求發(fā)送到本地DNS服務(wù)器
。 - 本地 DNS 服務(wù)器會(huì)向
.根服務(wù)器
發(fā)送com.服務(wù)器
的解析請(qǐng)求。 -
.根服務(wù)器
返回com.服務(wù)器
地址,本地 DNS 繼續(xù)請(qǐng)求com.服務(wù)器
獲取baidu.com.服務(wù)器
地址。 - 根據(jù)返回的地址信息,本地 DNS 繼續(xù)請(qǐng)求
www.baidu.com.服務(wù)器
地址,獲取后返回給DNS客戶端
。 - 客戶端拿到 DNS 后進(jìn)行 ip 訪問。
這里可能有幾個(gè)疑惑的地方:
- 域名的完整格式其實(shí)應(yīng)該是
xxxx.root
,也就是后綴名都是.root
,.root
服務(wù)器我們稱之為根服務(wù)器
。但是根服務(wù)器
每次都是.root
沒有必要顯示,所以可以簡(jiǎn)化去除。
- 查找域名地址,其實(shí)都是從后往前進(jìn)行查找,也就是先
root
,后domain
。 - 本地 DNS 服務(wù)器進(jìn)行查找的時(shí)候,是迭代查找;而 DNS 客戶端在請(qǐng)求本地 DNS 服務(wù)器時(shí),是遞歸查找。如果超時(shí),會(huì)更換 DNS 服務(wù)器。(迭代其實(shí)很慢,但是一個(gè)服務(wù)器沒辦法進(jìn)行所有的域名 +ip 的存儲(chǔ),當(dāng)該服務(wù)器不知道時(shí),會(huì)將請(qǐng)求應(yīng)答為
xxxx服務(wù)器
可能知道。) - 并不是每次查詢都會(huì)到
根服務(wù)器
,當(dāng)本地DNS服務(wù)器
有緩存時(shí),就會(huì)直接返回,并且標(biāo)注Non-authoritative
,如果是查詢到根服務(wù)器
,那么就會(huì)標(biāo)注authoritative
。
nslookup
我們使用 nslookup
來模擬整個(gè)域名解析的流程:
nslookup
> set type=ns
> .
type=ns 代表查詢 nameserver,查詢 根服務(wù)器
地址,返回了 a 到 m 的共計(jì) 13 個(gè) nameserver,并且都是 Non-authoritative
。#53
標(biāo)示 53 端口,也是默認(rèn)的 DNS 端口(一般 UDP 傳輸)。
繼續(xù)查詢 nameserver 對(duì)應(yīng)的 ip 地址:
查詢地址的ipv4
set type=a
a.root-servers.net.
獲取 跟服務(wù)器
的地址后,我們與 根服務(wù)器
進(jìn)行溝通,獲取 com.
地址。
server 198.41.0.4
set type=ns
com.
獲取到了能夠解析 com.
的 nameserver 列表,繼續(xù)獲取對(duì)應(yīng)的 ip:
set type=a
a.gtld-servers.net.
# 這里的gtld 代表:通用頂級(jí)域名,generic top level domain
這樣我們可以跟 com.
進(jìn)行通話,獲取 baidu.com
地址:
server 192.5.6.30
set type=ns
baidu.com
可以看到 baidu.com
有幾個(gè)可以進(jìn)行解析,我們繼續(xù)獲取 ip,然后進(jìn)行 www.baidu.com
的解析:
set type=a
dns.baidu.com.
server 110.242.68.134
www.baidu.com
最后我們得到了 www.baidu.com
的 dns 解析結(jié)果為 39.156.66.14
。
www.huangyichun.com
如果我們要解析 www.huangyichun.com
也是一樣的,找到 .com
地址,然后看 huangyichun.com
哪里能解析,與對(duì)應(yīng)的 nameserver
對(duì)話,解析即可。
gravel.dnspod.net.
mantis.dnspod.net.文章來源:http://www.zghlxwxcb.cn/news/detail-800559.html
這兩個(gè)就是騰訊云的 DNS 解析,說明該服務(wù)器大概率部署在騰訊云上。文章來源地址http://www.zghlxwxcb.cn/news/detail-800559.html
問題
- 為什么我們解析
google.com
這類服務(wù)器無法解析呢?那當(dāng)然是 IPS 提供商的內(nèi)容。 - 誰來管理
.服務(wù)器
,Root Servers 當(dāng)前有 13 個(gè)不同的域名,也就是之前的[a-m].root-servers.net
,當(dāng)前公狗大概 1500 個(gè)服務(wù)器,在 12 個(gè)管理機(jī)構(gòu)中運(yùn)行。
到了這里,關(guān)于Linux DNS 解析與配置 nslookup使用 與 /etc/resolv.conf文件的配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!