DNSmasq 的安裝、配置與使用

tony發表於2016-08-30

1. DNSmasq 簡介

DNSmasq 是一個小巧且方便地用於配置DNS和DHCP的工具。我們在做開發時,經常會把一些域名對映到本地,但我們知道 /etc/hosts 不支援各種稍微高階一些的配置,比如泛域名解析,你想把 *.hello.me 對映到本地,必須在 hosts 檔案裡一個一個地寫,這個就很坑了。

所以就有了 DNSmasq

2. 安裝

Mac 下直接使用 brew 安裝即可:

brew install dnsmasq

安裝成功後提示:

cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf 
sudo brew services start dnsmasq

3. 配置

3.1 配置檔案 /usr/local/etc/dnsmasq.conf

根據上述成功安裝提示照做,生成 /usr/local/etc/dnsmasq.conf 檔案,編輯內容如下:

# 配置上行DNS,對應no-resolv
resolv-file=/etc/resolv.conf

# resolv.conf內的DNS定址嚴格按照從上到下順序執行,直到成功為止
strict-order

# DNS解析hosts時對應的hosts檔案,對應no-hosts
addn-hosts=/etc/hosts
cache-size=1024 

# 多個IP用逗號分隔,192.168.x.x表示本機的ip地址,只有127.0.0.1的時候表示只有本機可以訪問。
# 通過這個設定就可以實現同一區域網內的裝置,通過把網路DNS設定為本機IP從而實現區域網範圍內的DNS泛解析(注:無效IP有可能導至服務無法啟動)
listen-address=192.168.x.x,127.0.0.1  

# 重要!!這一行就是你想要泛解析的域名配置.
address=/hello.me/127.0.0.1 

以上幾乎是最簡配置.

reolve-file=/etc/resolv.conf 配置上行DNS,假設 /etc/resolv.conf 內容如下:

nameserver 183.44.22.19

那就是說如果你訪問域名abc.com沒有被dnsmasq解析,它會嘗試訪問 183.44.22.19 去解析。

3.2 客戶端指定域名伺服器/etc/resolv.conf

你的 Mac 可能同時就是你的 DNS 使用者,所有,需要:系統偏好配置->網路->(你的連線)->DNS增加了一個條目:

# 區域網其它機器則換成實際dnsmasq的IP地址。
127.0.0.1 

一般這一行放到最上面,會優先DNS解析

此時,你 ping 一下 hello.medev.hello.me,就會發現全指向了本地。

4. 啟動

注意需要使用 sudo 來啟動,因為許可權要求較高。

# 啟動
sudo brew services start dnsmasq

# 重啟
sudo brew services restart dnsmasq

# 停止
sudo brew services stop dnsmasq

如果改動了泛解析規則,重啟 dnsmasq 不會立即看到效果,因為有快取,可以稍等便可或清除一下快取再試

sudo killall -HUP mDNSResponder

相關文章