域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
DNSmasq
dnsmasq原理
dnsmasq提供DNS缓存和DHCP服务、Tftp服务功能。
作为域名解析服务器,dnsmasq可以通过缓存DNS请求来提供对访问过的网址的的连接速度;
作为DHCP服务器,dnsmasq可以用于为局域网电脑分配内网IP地址和提供路由;
DNS和DHCP两个功能可以同时或分别单独实现,此处只做DNS的配置;
当接受到一个DNS请求时,Dnsmasq首先会查找/etc/hosts这个文件,然后查找/etc/resolv.conf中定义的外部DNS。所以说Dnsmasq是一个很不错的外部DNS中继。
配置dnsmasq为DNS缓存服务器,同时在/etc/hosts文件中加入本地内网解析,这样一来每当内网机器查询时就会优先查询hosts文件,这就等于将/etc/hosts共享给全内网机器使用,从而解决内网机器互相识别的问题。
使用场景
构建私有DNS。例如: 我们有这么一个使用场景,在公司内网开发及测试的时候,我们会把部署好的服务,部署好,然后发送服务对应的IP给开发或者测试人员,开发或者测试通过IP进行访问,但是当IP变的是,我们还要在通知一次,当我们在一台服务器上部署了很多的服务的时候,我们还要指定端口,随着服务的越来越多,发现我们维护IP也越来越多,需要记住的端口也越来越多,怎么办,有没有好的解决方法,可能有人说配置本机Host啊,让公司内外全员配置HOST,下次IP修改或者新增IP的的时候,大家在修改HOST文件,发现工作量还是没有少。有没有更好的方式呢?这时大家想到DNS,内外构建私有DNS,大家只要配置一次DNS,下次测试使用的时候,直接使用域名(域名没有在域名服务商没有注册也可以),感觉和线上使用没有区别。
安装与配置dnsmasq
安装
yum install dnsmasq -y
systemctl start dnsmasq.service 启动
systemctl enable dnsmasq.service # 开机启动
netstat -lnp|grep dnsmasq 查看是否执行 如果没有netstat命令,需要安装 yum install net-tools
vi /etc/resolv.dnsmasq 创建resolve.dnsmasq 文件 添加上游dns服务器地址
nameserver 114.114.114.114
nameserver 8.8.8.8
这个文件配置上游dns,要不可能有些有些内网打不开
vi /etc/dnsmasqhosts 创建dnsmasqhosts文件,这个是域名和服务ip的映射关系文件
192.168.1.148 admin.5188888.com
vi /etc/dnsmasq.conf 编辑配置文件,把上面的两个文件配置到这个配置文件中
cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak 修改之前先备份一下
# If you don't want dnsmasq to read /etc/hosts, uncomment the
# following line.
#no-hosts
# or if you want it to read another file, as well as /etc/hosts, use
# this. 找到这里配置下面 addn-hosts
addn-hosts=/etc/dnsmasqhosts
# Change this line if you want dns to get its upstream servers from
# somewhere other that /etc/resolv.conf 这里配置resolv.dnsmasq文件
resolv-file=/etc/resolv.dnsmasq
service dnsmasq restart 重启 dnsmasq文件
配置电脑DNS
安装完成dnsmasq之后,怎么使用呢?怎么配置?实际上很简单,大家平时都设置过 dns 114.114.114.114
windows电脑配置
控制面板\网络和 Internet\网络和共享中心 ,找到更改适配器设置,右击你的连接 网络的 适配器,选择属性,找到 Internet 协议版本4(TCP/IPv4) ,点击进这项,配置使用下面的DNS,在DNS中输入 安装dnsmasq服务的对应的IP地址,到此完成,大家 就可以使用dnsmasqhosts中配置的 域名访问下,是不是可以访问到服务啦。
Mac 电脑配置
和Window类似,找到WIFI,在WiFi的DNS中配置
系统偏好设置 > 网络 > 高级 > DNS 添加为当前配置的机器的ip即可
注意事项
需要开放dnsmasq的端口 53 ,如果服务器配置有防火墙,需要把这个防火墙放开53端口
大家不知道端口的时候,可以用netstat -lnp|grep dnsmasq 查询
[root@localhost ~]# netstat -lnp|grep dnsmasq
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 128993/dnsmasq
tcp6 0 0 :::53 :::* LISTEN 128993/dnsmasq
udp 0 0 0.0.0.0:53 0.0.0.0:* 128993/dnsmasq
udp6 0 0 :::53 :::* 128993/dnsmasq
不推荐大家修改dns的端口,我们电脑默认使用的DNS端口是53,修改之后,可能访问不了自己构建的dns服务器
每次添加新域名的时候,需要重启下 dnsmasq服务
### 修改iptables配置 允许本机的53端口可对外访问 >iptables -A INPUT -p udp -m udp –dport 53 -j ACCEPT > > iptables -A INPUT -p tcp -m tcp –dport 53 -j ACCEPT ### 转发DNS请求 ###### 开启流量转发功能 >echo ‘1’ > /proc/sys/net/ipv4/ip_forward > > echo ‘1’ > /proc/sys/net/ipv6/ip_forward # IPv6 用户选用 ###### 添加流量转发规则,将外部到53的端口的请求映射到Dnsmasq服务器的53端口 >iptables -t nat -A PREROUTING -p udp –dport 53 -j REDIRECT –to-ports 53 > > iptables -t nat -A PREROUTING -p tcp –dport 53 -j REDIRECT –to-ports 53 ###### 如果要限制只允许内网的请求,方法如下 > iptables -t nat -A PREROUTING -i eth1 -p upd –dport 53 -j REDIRECT –to-port 53 保存规则并重启 > service iptables save > >$ service iptables restart