用 dnsmasq 快速搭建本地 DNS Server

什么是 DNS Server

簡單的說昌腰,DNS Sever 就是把域名轉(zhuǎn)換為 IP 地址的一個服務您宪。如 Google 提供了 8.8.8.8

為什么需要搭建本地的 DNS Server?

最常見的兩種情況是:

  1. 你有一些虛擬主機芍躏,本次都通過 IP 地址去訪問的太麻煩邪乍,因為 IP 地址很不容易記。
  2. 本地開發(fā)時对竣,不想每次都用 http://127.0.0.1:3000, http://127.0.0.1:3001 這種來訪問庇楞,而是想用 http://app1.dev

這兩種情況都需要把虛擬的域名轉(zhuǎn)換為對應的 IP, 最簡單的方式是直接修改 /etc/hosts, 還有一種方式就是搭建一個本地的 DNS Server

安裝前

/本文所有操作都是在 macOS 下完成否纬,其他 *nix 操作系統(tǒng)會稍有區(qū)別/

首先查看一下當前配置了哪些的 DNS resolver

scutil --dns

可以看到類似這樣的輸出

DNS configuration

resolver #1
  nameserver[0] : 192.168.31.1
  if_index : 4 (en0)
  flags    : Request A records
  reach    : Reachable, Directly Reachable Address

后面還有 resolver #2 resolver #3

另外先了解一下 dig 命令, dig 是用來查詢 DNS 的一個工具姐刁。

dig www.google.com

輸出

; <<>> DiG 9.8.3-P1 <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11696
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.            IN  A

;; ANSWER SECTION:
www.google.com.     30  IN  A   93.46.8.89

;; Query time: 7 msec
;; SERVER: 192.168.31.1#53(192.168.31.1)
;; WHEN: Wed Apr  5 22:23:18 2017
;; MSG SIZE  rcvd: 48

這里可以看到,域名 www.google.com 在我的電腦中解析出來 IP 地址是 93.46.8.9

安裝 dnsmasq

brew install dnsmasq

然后 copy 一下配置文件

cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

配置文件所有的配置都是已經(jīng)注釋掉的烦味,可根據(jù)自己的需要取消注釋并修改聂使。dnsmasq 同時還提供了如 DHCP 的其他功能,這里我們只關注 DNS Server 這一塊谬俄。
先在文件最底部增加一行

address=/dev/127.0.0.1

重啟dnsmasq

sudo brew services restart dnsmasq

然后通過 dig 命令來檢查是否生效

dig abc.dev @127.0.0.1

這里的 @127.0.0.1 用來告訴 dig去 127.0.0.1 這個 dns server 來查詢
輸出結(jié)里(隱藏了頭尾)

;; QUESTION SECTION:
;abc.dev.           IN  A

;; ANSWER SECTION:
abc.dev.        0   IN  A   127.0.0.1

此時已經(jīng)可以看到柏靶,域名abc.dev 的 IP 地址已經(jīng)被解析為 127.0.0.1
但時我們用 ping 命令來測試,是不正確的溃论。這里ping和沒用指定 @127.0.0.1dig是一樣的屎蜓,默認都是使用 /etc/resolv.conf指定的 nameserver 來查詢的。

給 macOS 增加更多的nameserver

新建一個 /etc/resolver目錄钥勋,然后新建一個 /etc/resolver/dev文件炬转,然后增加新的 nameserver

sudo mkdir -p /etc/resolver
echo 'nameserver 127.0.0.1' | sudo tee /etc/resolver/dev

然后每次系統(tǒng)做 DNS 查詢時,發(fā)現(xiàn)是以 dev 結(jié)尾的域名時算灸,就會使用 /etc/resolver/dev 這個文件里指定的 nameserver 來解析扼劈。同樣的,我們也可以創(chuàng)建一個 /etc/resolver/staging菲驴,然后讓所有的以 staging 為結(jié)尾的域名都用該文件指定的 nameserver 來解析荐吵。
再次執(zhí)行

scutil --dns

會發(fā)現(xiàn)輸出多了一個 resolver

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1
  flags    : Request A records, Request AAAA records
  reach    : Reachable, Local Address, Directly Reachable Address

我們可以用 traceroute命令來查看解析的路徑

traceroute abc.dev

輸出為

traceroute to abc.dev (127.0.0.1), 64 hops max, 52 byte packets
 1  localhost (127.0.0.1)  0.196 ms  0.034 ms  0.034 ms

這里可以看到,只有一跳就完成了解析赊瞬。
至此先煎,一個本地的 DNS server 就搭建完成了

More

  1. 可在 dnsmasq 的配置文件中增加一行
conf-dir=/usr/local/etc/dnsmasq.d/,*.conf

然后按需在相應的目錄創(chuàng)建 dev.conf, staing.conf等文件。注意每次修改完配置文件要重啟 dnsmasq

  1. address=/dev/127.0.0.1 是一種通配方式巧涧,把所有的以 dev 結(jié)尾的域名都解析為 127.0.0.1薯蝎。
    也可以為每個域名都指定一個獨立的 IP ,如在 /usr/local/etc/dnsmasq.d/staging.conf里谤绳,我們可以指定各種 staging 相關的 服務
address=/db.staging/192.168.1.10
address=/app.staging/192.168.1.11
address=/job.staging/192.168.1.12

注意增加新的域名后綴要在 /etc/resolver/ 下創(chuàng)建相應的文件并增加 nameserver

  1. dnsmasq 默認監(jiān)聽的端口為 53占锯, 所有啟動該服務需要用 sudo
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袒哥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子烟央,更是在濱河造成了極大的恐慌统诺,老刑警劉巖歪脏,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疑俭,死亡現(xiàn)場離奇詭異,居然都是意外死亡婿失,警方通過查閱死者的電腦和手機钞艇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豪硅,“玉大人哩照,你說我怎么就攤上這事±粮。” “怎么了飘弧?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長砚著。 經(jīng)常有香客問我次伶,道長,這世上最難降的妖魔是什么稽穆? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任冠王,我火速辦了婚禮,結(jié)果婚禮上舌镶,老公的妹妹穿的比我還像新娘柱彻。我一直安慰自己,他們只是感情好餐胀,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布哟楷。 她就那樣靜靜地躺著,像睡著了一般否灾。 火紅的嫁衣襯著肌膚如雪吓蘑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天坟冲,我揣著相機與錄音磨镶,去河邊找鬼。 笑死健提,一個胖子當著我的面吹牛琳猫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播私痹,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼脐嫂,長吁一口氣:“原來是場噩夢啊……” “哼统刮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起账千,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤侥蒙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匀奏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞭衩,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年娃善,在試婚紗的時候發(fā)現(xiàn)自己被綠了论衍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡聚磺,死狀恐怖坯台,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘫寝,我是刑警寧澤蜒蕾,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站焕阿,受9級特大地震影響咪啡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捣鲸,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一瑟匆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栽惶,春花似錦愁溜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至汁蝶,卻和暖如春渐扮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掖棉。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工墓律, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人幔亥。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓耻讽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親帕棉。 傳聞我的和親對象是個殘疾皇子针肥,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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

  • NAME dnsmasq - A lightweight DHCP and caching DNS server....
    ximitc閱讀 2,822評論 0 0
  • 1. 概述 在網(wǎng)絡環(huán)境中一般用戶只需要在瀏覽器中輸入url如www.sunny.com就可以到對應服務器獲取相應的...
    ghbsunny閱讀 2,876評論 0 7
  • 在使用consul做docker容器服務化的過程中饼记,使用到了dnsmasq做DNS請求轉(zhuǎn)發(fā),于是研究了下DNS協(xié)議...
    __七把刀__閱讀 3,980評論 2 13
  • DNS 是什么 DNS (Domain Name System)慰枕, 也叫網(wǎng)域名稱系統(tǒng)具则,是互聯(lián)網(wǎng)的一項服務。它實質(zhì)上...
    interstellar多米諾閱讀 2,796評論 0 6
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理具帮,服務發(fā)現(xiàn)博肋,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139