在開發或測試環境, 可能有大量服務器, 數據庫, 應用服務器, 中間件服務器等. 特別大數據系統, 涉及的服務器很多的時候, ip很難記, 就算修改本機host, 但每次新增刪除一個ip對於的域名, 都是很麻煩的. 於是搭建一個dns就非常必須了.
這裏使用docker無侵入式的搭建DNS服務, 不要時刪除container即可.
1.新建三個文件
在宿主(ip:192.168.31.107)新建三個文件, 分別是dnsmasq.conf,dnsmasq.hosts,dnsmasq.resolv.conf
[root@localhost dns]# pwd
/root/dns
[root@localhost dns]# ls
dnsmasq.conf dnsmasq.hosts dnsmasq.resolv.conf
dnsmasq.conf文件用於配置DNS應用的配置, 指定dnsmasq.resolv.conf文件及dnsmasq.hosts文件的路徑, dnsmasq.conf內容如下:
cache-size=50000
dns-forward-max=1000
resolv-file=/etc/dnsmasq.resolv.conf
addn-hosts=/etc/dnsmasq.hosts
dnsmasq.hosts文件, 就是我們經常修改的host了, 自定義指定ip和域名的映射關係, dnsmasq.hosts文件內容如下:
192.168.31.101 s1.jevoncode.com
192.168.31.102 s2.jevoncode.com
192.168.31.103 s3.jevoncode.com
192.168.31.104 s4.jevoncode.com
192.168.31.105 s5.jevoncode.com
192.168.31.106 s6.jevoncode.com
dnsmasq.resolv.conf文件, 由於DNS服務器是不知道baidu.com這些域名所對應的ip是什麼, 所以要指定外網的DNS, 如果在dnsmasq.hosts文件找不到域名的映射關係, 則請求外網的DNS獲取, dnsmasq.resolv.conf文件的內容如下:
nameserver 114.114.114.114
nameserver 223.5.5.5
2.運行docker的contener
docker run \
--name dnsmasq \
-d \
-p 53:53/udp \
-p 8080:8080 \
-v /root/dns/dnsmasq.conf:/etc/dnsmasq.conf \
-v /root/dns/dnsmasq.hosts:/etc/dnsmasq.hosts \
-v /root/dns/dnsmasq.resolv.conf:/etc/dnsmasq.resolv.conf \
--log-opt "max-size=100m" \
-e "HTTP_USER=admin" \
-e "HTTP_PASS=adminpassword" \
--restart always \
jpillora/dnsmasq
其中8080, 可以不用指定, 那是頁面查看DNS應用的情況而已. 不太需要. 關鍵是53端口.
這裏使用-v參數在容器上掛着宿主的文件, 這樣就可以在宿主修改dnsmasq.hosts文件, 就不需要進入容器裏修改配置.
3.修改本機的DNS, 在windows下則是修改設備器的ip4屬性裏有DNS的配置. 而Linux則是修改/etc/resolv.conf 文件
# Generated by NetworkManager
nameserver 192.168.31.107
4.想想空間
基於這基礎上, 有些想法, 雖然我沒實踐過, 不過我覺得應該可以. 如管理局域網的機子的上網情況, 可以知道哪些人瀏覽過什麼網站, 控制瀏覽網站行爲等.