使用 dnsmasq 配置内部 DNS server
前言
為什麼要配置內部的 dns server 呢? 因為現在各種應用溝通都開始使用 FQDN 啦~ 其實要在 public nameserver 配置 private ip 也可以, 但是有幾點考量 :
- 有時候他們被限制不能上網, 那又需要解析 domain 的時候, 就必須要用內部 dns 啦
- 明明要去的目的地就在旁邊, 不需要繞出去 internet 在查詢一次
- 如果被人發現你們的域名解出來是 private ip, 那 ... 其實他也不能怎樣, 就是很有趣的發現這樣XD.
說好的 bind9 呢?
沒有錯! 我這一開始也是安裝 bind9, 但是配置到一半我就投降了! 他比較適合架構比較大的時候使用吧, 我們這就是一個小小的內部 dns server, 追求的就是一個單純快速簡易穩定~
入正題!
安裝環境: Ubuntu 16.04.4 LTS
第一步就是安裝啦 apt-get install dnsmasq
安裝好後會有個設定檔 /etc/dnsmasq.conf
, 裡面寫的落落長但全都註解的, 我們就先把他改名子, 當作之後的配置參考. mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
基本配置
基本配置這樣就可以啦~ 如果還需要其他選項, 比如 ttl
, 或是 ptr
或是要使用哪張網卡, 監聽哪個端口, 都可以去剛剛的 /etc/dnsmasq.conf.bak
裡面找需要的參數使用. 我們就先把目前的配置講完吧.
會有三個配置文件
/etc/dnsmasq.conf
: 主要配置, 要加什麼選項通常在這/etc/hosts_myns.conf
: 裡面內容格式和/etc/hosts
一樣, 就是本地 dns 紀錄/etc/hosts_myns.conf
: 上游選項, 就是說如果你身上沒有紀錄的話, 他要去哪裡幫你找答案
root@ubuntu:~# cat /etc/dnsmasq.conf
# 我们自己的ns纪录对照, 格式和 /etc/hosts一样
no-hosts
addn-hosts=/etc/hosts_myns.conf
# 自己没有纪录的话就向外询问
resolv-file=/etc/resolv_myns.conf
# 如果要指定是 CNAME 的话这样配置
# 这笔纪录一定要存在于hosts (/etc/hosts_myns.conf)
cname=fish01.tux.com,fish.tux.com
root@ubuntu:~# cat /etc/hosts_myns.conf
2.2.2.2 www.bar.com
3.3.3.3 fish.tux.com
root@ubuntu:~# cat /etc/resolv_myns.conf
nameserver=8.8.8.8
nameserver=168.95.1.1
改完後記得 systemctl reload dnsmasq
或是 systemctl restart dnsmasq
兩者的差別是, 如果你配置的 domain, 在 internet 已經查詢的到, 你要強制覆蓋的話, 使用
reload
指令是不會馬上生效的哦, 因為緩存還沒失效
就這樣短短幾行配置, 完成了 A 紀錄
, CNAME 紀錄
, 上游 dns
配置啦~ 下面就演示一下成果
驗收
配置的A紀錄
可以看到預設的 ttl
是 0 哦
配置的CNAME紀錄
沒配置的紀錄, 要去詢問上游
尾聲
嘛~ 有時間還是要把 bind9
學好阿~人家可是老字號阿.