Linux中的DNS客戶端配置


//

Linux中的DNS客戶端配置

//

最近在搞MGR+Consul的MySQL高可用,在使用Consul域名服務的時候,會用到Linux操作系統中的DNS客戶端配置,這塊兒的知識之前只是在用,今天簡單整理一下,希望能有一點點用。

我們知道,DNS服務器是將域名解析成IP的地方,例如我們輸入www.baidu.com,它會給我們解析出來一個地址。Linux中,DNS進行解析的過程大概是下面這樣的:

首先,我們拿到一個域名aaa.mysql.consul.cn,然后在Linux系統中先去找/etc/nsswitch.conf文件去確定這個域名的解析順序,該文件決定的是域名解析到底從/etc/hosts文件中開始解析還是從/etc/resolv.conf文件中開始解析,一般情況下是先從/etc/hosts中解析域名,當然,我們可以自己設置解析順序。來看一個例子:

[root@]#cat /etc/nsswitch.conf |grep hosts #hosts: db files nisplus nis dns hosts: files dns

我們可以看到,files就是使用/etc/hosts,而dns則是使用/etc/resolv.conf的dns服務器來進行搜尋的。當然,如果我們調換files和dns的位置,就可以先使用/etc/resolv.conf來解析域名,然后再使用/etc/hosts來解析域名。

這里主要說明兩個重要的文件,其中一個是/etc/resolv.conf文件,另外一個是/etc/dnsmasq.conf文件,先來看第一個文件/etc/resolv.conf.

/etc/resolv.conf文件是linux系統的dns配置文件,它的配置格式比較簡單,其中只有四種情況:

nameserver //定義DNS服務器的IP地址 domain //定義本地域名 search //定義域名的搜索列表 sortlist //對返回的域名進行排序

其中,nameserver是最重要的,其他的都是可選的,nameserver可以設置多個,當第一個nameserver無法解析域名的時候,才會用到第二個nameserver,例如我們進行如下配置:

nameserver 1.1.1.1

nameserver 2.2.2.2

那么當我們拿到一個域名的時候,DNS解析的順序將會是先將域名發送到1.1.1.1上進行解析,如果解析不出來,那么再發送到2.2.2.2上進行解析,一般情況,nameserver的指定不要超過3個。

為什么nameserver的設置最好不要超過3個?

因為如果超過3個,那么如果是我們所在的網絡區域發生問題,導致無法練級到DNS服務器,那么我們的主機還是會向每一個DNS服務器發出聯機的要求,每次聯機都有timeout時間的等待,這會導致非常多的時間浪費。

第二個文件是/etc/dnsmasq.conf,要想了解這個文件的內容,首先需要知道DNSmasq的作用。DNSmasq是一個輕量級的網絡基礎服務,它可以用來配置Linux服務器的DNS和DHCP。關於DNSmasq的配置,一般都存在於兩個地方:

/etc/dnsmasq.d/ 文件夾(自定義配置)

/etc/dnsmasq.conf 文件

當我們應用程序傳入一個域名的時候,這兩個文件加載順序為先加載/etc/dnsmasq.d/*.conf來獲取相關IP地址,如果沒有相關文件,則使用/etc/dnsmasq.conf文件來獲取相關的IP地址。

DNSmasq的原理如下:

當我們的本機應用訪問主機的/etc/resolv.conf中的nameserver來獲取DNSServer,該文件會將該請求指向DNSmasq中配置的server,前提是配置了dnsmasq的監聽規則。這句話很難理解,我們先來看一下例子:

[root@  ~]# cat /etc/resolv.conf # file get from config server nameserver 127.0.0.1 nameserver 1.1.1.1 [root@ ~]# cat /etc/dnsmasq.conf #resolve-file=/etc/resolv.dnsmasq.conf listen-address=127.0.0.1 strict-order cache-size=2048 server=10.10.10.10

我們先解釋下dnsmasq.conf文件中的內容:

resolve-file

定義dnsmasq從哪里獲取上游DNS服務器的地址, 默認是從/etc/resolv.conf獲取,上面配置的文件是/etc/resolv.dnsmasq.conf

listen-address

定義dnsmasq監聽的地址,默認是監控本機的所有網卡上,可以配置為127.0.0.1,默認端口是53

strict-order  

表示嚴格按照resolv-file文件中的順序從上到下進行DNS解析

server

指定dnsmasq程序使用哪個DNS服務器進行解析,我們設置的是10.10.10.10

對於這些參數,有個概念即可,可以看到,/etc/resolv.conf中配置了nameserver為127.0.0.1,則在收到域名的時候,會先從本地地址127.0.0.1嘗試解析域名,而我們的dnsmasq監聽的就是本地地址127.0.0.1的53這個默認端口,所以,發給/etc/resolv.conf的域名解析請求,會從dnsmasq中去解析,如果dnsmasq解析不了,但是配置了resolve-file參數,則會使用上面的配置參數中的文件/etc/resolv.dnsmasq.conf去嘗試解析,我們把該文件中配置的DNS稱之為上游DNS。

本機情況下DNS的解析規則圖如下:

局域網內的DNS解析規則圖如下:

可以看到,本地和局域網內的DNS解析規則唯一的不同是局域網內的DNS解析可以繞過/etc/resolv.conf文件而直接從DNSmasq中進行解析。

跟consul有什么關系?

因為我們在做基於MGR+consul的高可用改造的時候,會用到consul的域名服務,consul的域名服務是在MySQL服務器上的,我們的應用服務器一般和MySQL服務器是處於同一個機房的,所以可以直接配置DNSmasq配置文件中的server來實現對consul域名的解析,這樣就免去了查找上游服務的過程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM