DNSMASQ 管理筆記

起因:不爽用 network manager 的 dns 管理方式,想自架 DNS Server 然後自己 resolve 自己
環境:Arch Linux + Gnome3 + NetworkManager (fuck u nmcli)
原因:在玩 docker 時想要自動對應每一台 Container 的連線(問候)方式,因此想用 hostname 管理,發現了容器互通了但是外對內依然不互通


先來說說看我想要怎樣弄

一般上網時 nameserver 用 8.8.8.8 或是 hinet dns
對容器連線時 ns 用 172.99.0.255 這臺綁定IP的 dns container 進行解析
但是我好懶的動 resolv.conf 或是用 resolvconf.conf 來做 search 動作

讓我們開始吧


Step 1. Fxck default dns manager in NM

我們先把 nm 的 dns 管理功能拔了 要不然你會發現 每次開機你的電腦都會幫你透過 nm 建立 resolv.conf

	sudo vim /etc/NetworkManager/NetworkManager.conf 

用自己常用的編輯器 將此config 的 dns 由 default 變成 none

Step 2. Install DNSMASQ & config

安裝就老樣子沒有技術可言

	sudo pacman -S dnsmasq

安裝後修改以下的 Config

	sudo vim /etc/dnsmasq.conf 

其實你可以自己研究看看 dnsmasq.conf 裡面的 example 很完善 而且 man dnsmasq 也很棒

	no-resolv<-不繼承系統本身的 resolv.conf
no-poll<-不檢測 resolv.conf的變更
server=8.8.8.8
server=8.8.4.4
	server=/docker/172.99.0.255<-把.docker的域名一律導向用這臺dns去解析

這樣其實就完成了,只要把 dnsmasq enable / start 就好

Step 3. resolvconf.conf 將resolver 設定為 127.0.0.1

最後透過 openresolv 提供的 resolvconf 將本地的 nameserver 設定為本機

sudo vim /etc/resolvconf.conf

檢查name_servers 有沒有東西有就全刪掉,改成

name_servers=127.0.0.1

Done , enjoy it><