通過(guò)Dnsmasq部署本地DNS服務(wù)

在開發(fā)、測(cè)試和正式環(huán)境中,我們總希望通過(guò)同一個(gè)域名找到對(duì)應(yīng)環(huán)境中的服務(wù)實(shí)例,簡(jiǎn)化配置流程,例如在測(cè)試環(huán)境中,讓api.changjinglu.net關(guān)聯(lián)到IP為192.168.1.34的測(cè)試服務(wù)器,而在正式環(huán)境中,讓api.changjinglu.net關(guān)聯(lián)到IP為47.96.51.143的正式服務(wù)器。

我們現(xiàn)在的解決方案是在本機(jī)的/etc/hosts文件中記錄相應(yīng)的域名IP映射關(guān)系,本機(jī)在嘗試解析一個(gè)域名時(shí),會(huì)先去/etc/hosts中查找該域名對(duì)應(yīng)的IP,并訪問(wèn)相應(yīng)IP的服務(wù)器。只有當(dāng)/etc/hosts中沒(méi)有該域名的記錄時(shí),本機(jī)才會(huì)去DNS服務(wù)器進(jìn)行域名解析。

本機(jī)解析域名的優(yōu)先級(jí)為DNS緩存>/etc/hosts>DNS服務(wù)。

原方案

這個(gè)解決方案稍顯繁瑣,因?yàn)槊颗_(tái)機(jī)器都必須在自己的/etc/hosts文件中配置正確的域名IP映射關(guān)系,一旦映射關(guān)系發(fā)生改變,所有機(jī)器又必須全部做相應(yīng)的修改。一個(gè)更簡(jiǎn)潔的解決方案是構(gòu)建一個(gè)本地DNS服務(wù)器,讓路由器指向該本地DNS服務(wù)器,讓它統(tǒng)一管理所有通用的域名IP映射,如果個(gè)別開發(fā)者有自己的特別需要,可以利用域名解析的優(yōu)先級(jí)順序,通過(guò)修改自己本機(jī)的/etc/hosts覆蓋本地DNS服務(wù)的映射關(guān)系。使用這個(gè)新方案,當(dāng)局域網(wǎng)中新增某個(gè)服務(wù)或某個(gè)原有服務(wù)改變IP地址時(shí),只需要在本地DNS服務(wù)器上新增或修改映射配置,局域網(wǎng)中的所有機(jī)器無(wú)需做修改,就能享受到正確的映射關(guān)系了。

新方案

下面講一講如何通過(guò)Dnsmasq實(shí)現(xiàn)這個(gè)新方案。

1. 安裝Dnsmasq

我將本地DNS服務(wù)安裝在了192.168.1.98上,因?yàn)樵摐y(cè)試服務(wù)器的系統(tǒng)是ubuntu,使用自帶的包管理器下載并安裝Dnsmasq最簡(jiǎn)潔。

    sudo apt-get install dnsmasq
2. 配置Dnsmasq

Dnsmasq所有的配置都在/etc/dnsmasq.conf文件中完成,按照需要簡(jiǎn)單做了以下修改。

    #首先配置resolv-file,這個(gè)參數(shù)表示dnsmasq會(huì)從這個(gè)指定的文件中尋找上游DNS服務(wù)器

    resolv-file=/etc/resolv.dnsmasq.conf

    #單設(shè)置127.0.0.1為只能本機(jī)使用,單設(shè)置本機(jī)IP為只能內(nèi)部全網(wǎng)使用而本機(jī)不能用,這里需要同時(shí)設(shè)置兩者

    listen-address=127.0.0.1,192.168.1.98

    #dnsmasq緩存設(shè)置
    
    cache-size=1024

然后根據(jù)自己設(shè)置的resolv-file=/etc/resolv.dnsmasq.conf,配置/etc/resolv.dnsmasq.conf文件,指定上游DNS服務(wù)器

    nameserver 114.114.114.114
3. 坑

按以上配置配置好Dnsmasq并啟動(dòng)后,會(huì)發(fā)現(xiàn)Dnsmasq無(wú)法正常解析域名,使用ps -ef | grep dnsmasq查看后發(fā)現(xiàn)如下信息

    dnsmasq  10384     1  0 15:16 ?        00:00:00 /usr/sbin/dnsmasq -x /var/run/dnsmasq/dnsmasq.pid -u dnsmasq -r /var/run/dnsmasq/resolv.conf -7 /etc/

    dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,19036,8,2,49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5

其中dnsmasq -r /var/run/dnsmasq/resolv.conf說(shuō)明Dnsmasq是從/var/run/dnsmasq/resolv.conf文件中獲取上游DNS服務(wù)器,而非我們指定的resolv-file=/etc/resolv.dnsmasq.conf。
查閱了無(wú)數(shù)文檔以后,發(fā)現(xiàn)在/etc/default/dnsmasq中有一個(gè)IGNORE_RESOLVCONF屬性,說(shuō)明如下

    # If the resolvconf package is installed, dnsmasq will use its output

    # rather than the contents of /etc/resolv.conf to find upstream

    # nameservers. Uncommenting this line inhibits this behaviour.

    # Note that including a "resolv-file=<filename>" line in

    # /etc/dnsmasq.conf is not enough to override resolvconf if it is

    # installed: the line below must be uncommented.

    # IGNORE_RESOLVCONF=yes

這里必須取消IGNORE_RESOLVCONF=yes前的注釋,才能讓resolv-file=/etc/resolv.dnsmasq.conf生效。

4. 啟動(dòng)Dnsmasq

大功告成,啟動(dòng)Dnsmasq。

    sudo service dnsmasq start
5. 設(shè)置路由器,將DNS服務(wù)指向本地DNS服務(wù)器
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • dnsmasq是什么我就不說(shuō)了,請(qǐng)自行百度。 目前我需要使用的用途是:1.dhcp(分配一個(gè)或者多個(gè)內(nèi)網(wǎng)ip地址)...
    dnaEMx閱讀 16,279評(píng)論 0 6
  • NAME dnsmasq - A lightweight DHCP and caching DNS server....
    ximitc閱讀 2,906評(píng)論 0 0
  • 在使用consul做docker容器服務(wù)化的過(guò)程中,使用到了dnsmasq做DNS請(qǐng)求轉(zhuǎn)發(fā),于是研究了下DNS協(xié)議...
    __七把刀__閱讀 4,012評(píng)論 2 13
  • 1. 概述 在網(wǎng)絡(luò)環(huán)境中一般用戶只需要在瀏覽器中輸入url如www.sunny.com就可以到對(duì)應(yīng)服務(wù)器獲取相應(yīng)的...
    ghbsunny閱讀 2,957評(píng)論 0 7
  • 用DNSmasq搭建小型的內(nèi)網(wǎng)DNSyum install dnsmasq -yservice dnsmasq s...
    NamasAmitabha閱讀 557評(píng)論 0 0