在開發或測試環境, 可能有大量服務器, 數據庫, 應用服務器, 中間件服務器等. 特別大數據系統, 涉及的服務器不少的時候, ip很難記, 就算修改本機host, 但每次新增刪除一個ip對於的域名, 都是很麻煩的. 因而搭建一個dns就很是必須了. docker
這裏使用docker無侵入式的搭建DNS服務, 不要時刪除container便可.數據庫
1.新建三個文件
在宿主(ip:192.168.31.190)新建三個文件, 分別是dnsmasq.conf,dnsmasq.hosts,dnsmasq.resolv.confwindows
[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內容以下:centos
cache-size=50000 dns-forward-max=1000 resolv-file=/etc/dnsmasq.resolv.conf addn-hosts=/etc/dnsmasq.hosts
dnsmasq.hosts文件, 就是咱們常常修改的host了, 自定義指定ip和域名的映射關係, dnsmasq.hosts文件內容以下:bash
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文件, 就不須要進入容器裏修改配置.
訪問8080頁面是這樣的大數據
3.使用DNS的方法有三種方法(任意一種便可):
3.1在windows下則是修改設備器的ip4屬性裏有DNS的配置.
3.2而Linux則是修改/etc/resolv.conf 文件網站
# Generated by NetworkManager nameserver 192.168.31.190
3.3修改路由器的DNS配置centos7
4.想一想空間
基於這基礎上, 有些想法, 雖然我沒實踐過, 不過我以爲應該能夠. 如管理局域網的機子的上網狀況, 能夠知道哪些人瀏覽過什麼網站, 控制瀏覽網站行爲等.
遇到的問題:
若是開啓了防火牆,需開啓udp協議的53端口,如centos7:
firewall-cmd --zone=public --add-port=53/udp --permanent
dns是採用udp協議進行通信。