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.me
、dev.hello.me
,就會發現全指向了本地。
4. 啟動
注意需要使用 sudo 來啟動,因為許可權要求較高。
# 啟動
sudo brew services start dnsmasq
# 重啟
sudo brew services restart dnsmasq
# 停止
sudo brew services stop dnsmasq
如果改動了泛解析規則,重啟 dnsmasq 不會立即看到效果,因為有快取,可以稍等便可或清除一下快取再試
sudo killall -HUP mDNSResponder