chwzmx 2019-06-29
在开发或测试环境, 可能有大量服务器, 数据库, 应用服务器, 中间件服务器等. 特别大数据系统, 涉及的服务器很多的时候, ip很难记, 就算修改本机host, 但每次新增删除一个ip对于的域名, 都是很麻烦的. 于是搭建一个dns就非常必须了.
这里使用docker无侵入式的搭建DNS服务, 不要时删除container即可.
1.新建三个文件
在宿主(ip:192.168.31.190)新建三个文件, 分别是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文件, 就不需要进入容器里修改配置.
访问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配置
4.想想空间
基于这基础上, 有些想法, 虽然我没实践过, 不过我觉得应该可以. 如管理局域网的机子的上网情况, 可以知道哪些人浏览过什么网站, 控制浏览网站行为等.
遇到的问题:
如果开启了防火墙,需开启udp协议的53端口,如centos7:
firewall-cmd --zone=public --add-port=53/udp --permanent
dns是采用udp协议进行通讯。