DNS協(xié)議
DNS協(xié)議是哪一層的協(xié)議
DNS 協(xié)議是基于 udp協(xié)議的應(yīng)用層協(xié)議。DNS協(xié)議在Linux上的默認(rèn)端口是53。
Linux 與 DNS協(xié)議
DNS解析
DNS解析 的作用
根據(jù)域名找到對應(yīng)的ip地址。
DNS解析的原理
簡單地說,是DNS服務(wù)器 存儲有 ip地址與域名的對應(yīng)關(guān)系,然后服務(wù)器通過udp協(xié)議訪問DNS服務(wù)器,獲得ip地址所對應(yīng)的域名。這只是最簡單的描述,事實上比這個復(fù)雜很多。
Linux DNS服務(wù)器地址的配置方式 (ubuntu 18.04)
/etc/resolv.conf 文件之中的配置內(nèi)容是Linux 實時生效的 DNS服務(wù)器地址配置。
注意:
在ubuntu 18.04 版本上,/etc/resolv.conf 文件只是一個軟鏈接,修改它的配置參數(shù),服務(wù)器重啟后會失效。DNS協(xié)議的數(shù)據(jù)包最終會發(fā)向哪里,看 /etc/resolv.conf 文件。
問題
1:為什么服務(wù)器上的 /etc/resolv.conf 文件之中配置的地址是 127.0.0.53, 但是還是可以進(jìn)行域名解析?
因為 Linux的 systemd-resolve 程序,它會把本地的DNS請求轉(zhuǎn)發(fā)到外部的DNS服務(wù)器。
Linux systemd-resolve
如何判斷 Linux 啟動了 systemd-resolve 機(jī)制
systemctl status systemd-resolve
Linux systemd-resolve 機(jī)制的作用
ubuntu中 systemd-resolved 服務(wù)為本地應(yīng)用程序提供了域名解析服務(wù), 實際上是轉(zhuǎn)發(fā)的功能。系統(tǒng)使用 systemd-resolved 進(jìn)行dns請求的時候,除了一些localhost等特殊域名,其他的域名需要它去外部dns服務(wù)器尋找答案,這個外部dns的地址可以手動配置或者自動配置。
Linux systemd-resolve 工作模式
1:local DNS stub模式
服務(wù)器使用 127.0.0.53 作為DNS服務(wù)器地址。systemd-resolve 作為一個虛擬DNS服務(wù)器,然后將DNS請求發(fā)送給外部的DNS服務(wù)器。
2:保護(hù)模式
......
Linux 如何查看 當(dāng)前 systemd-resolve 所設(shè)置的DNS服務(wù)器地址
執(zhí)行 systemd-resolve --status | grep 'DNS Servers' -A2
/etc/resolv.conf 文件說明
/etc/resolv.conf 文件作用
DNS客戶機(jī)的配置文件,用于設(shè)置DNS服務(wù)器的IP地址及DNS域名,還包含了主機(jī)的域名搜索順序。
/etc/resolv.conf 文件參數(shù)說明
參數(shù):nameserver
定義DNS服務(wù)器的IP地址
參數(shù):search
作用:會影響主機(jī)名的解析順序。
例子:
1: 查詢主機(jī)名,因為主機(jī)名后面沒有點,就認(rèn)為是主機(jī)名,所以先添加search里的每一項依次組成FQDN(完全合格域名)來查詢,完全合格域名查詢未找到,就再認(rèn)為主機(jī)名是完全合格域名來查詢
host -a centos7-bind-1
2: 查詢主機(jī)名,因為主機(jī)名中有點(不是末尾有點),就認(rèn)為是完全合格域名,先用它來查詢,查詢失敗就把它當(dāng)成是主機(jī)名來進(jìn)行,添加search里的每一項組成FQDN(完全合格域名)來查詢。
host -a centos7-bind-1.com
3: 查詢主機(jī)名,因為主機(jī)名中末尾有點,則認(rèn)為是完全合格域名,只用它來查詢(不會再添加search里的每一項)。查詢次數(shù)會與search里項域名個數(shù)有關(guān)。
host -a centos7-bind-1.
參數(shù) options
注意:options 后面可以設(shè)置配置參數(shù),參數(shù)與值之間以冒號分隔
options下面的子參數(shù):
- timeout 查詢一個dns的超時時間,單位是秒。系統(tǒng)缺省是5,最大可以設(shè)為30。
- attempts 全部dns都查詢一遍的次數(shù)。缺省是2
......
DNS 緩存:
1: 刪除DNS 緩存操作 的方式
systemd-resolve --flush-caches
2: 查看DNS緩存的命中率 的方式
systemd-resolve --statistics
3: Linux 關(guān)于DNS 緩存是否開啟
Ubuntu 18.04 之后的版本,默認(rèn)會開啟DNS緩存
Linux 命令行 可以手動調(diào)用DNS解析的工具
- 1: host
- 2: dig
- 3: nslookup
Linux DNS 小需求
Linux上 DNS解析失敗,如何排查?
1: 查看DNS解析所使用的 DNS服務(wù)器地址。
nslookup 域名
2: 檢查 DNS 服務(wù)器ip 地址是否正確。
ping DNS服務(wù)器ip地址
如果DNS服務(wù)器ip地址的值為 127.0.0.53,那么通過 systemd-resolve --status,查看對應(yīng)網(wǎng)卡的DNS服務(wù)器ip地址,它們才是真正的外網(wǎng)DNS服務(wù)器ip地址,檢查它們是否正確。
DNS解析失敗之后,如何判斷是什么導(dǎo)致出錯的?這里指DNS服務(wù)器地址配置正確的情況下。
1:首先判斷網(wǎng)絡(luò)是否連通,通過 ping ip 地址來判斷。
2:如果網(wǎng)絡(luò)處于連通的狀況下
使用nslookup -debug 域名,查看DNS解析的每個步驟,以及觀察其中出錯的原因
如何可以測試 DNS解析 耗時?
方式1: 執(zhí)行 time nslookup 域名
使用time 命令,輸出信息會包含 程序執(zhí)行的實際時間 程序處于用戶空間的時間 程序處于內(nèi)核空間的時間。用DNS解析的結(jié)果來佐證 DNS解析 耗時。
方式2: dig 域名
輸出信息之中會包含耗時
導(dǎo)致 DNS 解析耗時的原因有哪些?
- 1:DNS服務(wù)器本身有問題,響應(yīng)慢且不穩(wěn)定
- 2: 客戶端到DNS服務(wù)器的網(wǎng)絡(luò)延遲大
- 3: DNS請求或者響應(yīng)包,在某些情況下被鏈路中的網(wǎng)絡(luò)設(shè)備弄丟了
如何判斷 客戶端 到 DNS服務(wù)器的 網(wǎng)絡(luò)延遲大?
ping -c 次數(shù) DNS服務(wù)器ip地址
命令的輸出信息會顯示 客戶端 到 DNS 服務(wù)器 之間的網(wǎng)絡(luò)延遲。
如何判斷 是數(shù)據(jù)包在鏈路之中丟失,導(dǎo)致DNS解析耗時?
ping -c 次數(shù) DNS服務(wù)器ip地址
命令的輸出信息會包含 數(shù)據(jù)包的丟失信息。這種方式可以作為佐證。
客戶端到DNS服務(wù)器的網(wǎng)絡(luò)延遲大 的解決方式?
修改所設(shè)置的 DNS服務(wù)器地址。
如何判斷 將要被使用的 DNS服務(wù)器 與 客戶端之間的網(wǎng)絡(luò)延遲 比較?。?/h2>
ping -c 次數(shù) ip地址
ping -c 次數(shù) ip地址
使用ping 命令來觀察兩個節(jié)點之間的網(wǎng)絡(luò)延遲。