其他 · 2020年12月4日 0

DNSMasq安装及使用

域名系统英文Domain Name System,缩写DNS)是互联网的一项服务。它作为将域名IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCPUDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

域名系统_百度百科 (baidu.com)

DNSmasq

DNSmasq_百度百科 (baidu.com)

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

Share this: