我想在内网搭建一个DNS服务器来实现在内网中,用外网不存在的域名后缀网址来访问内网资源。
Dnsmasq工作原理 当接受到一个DNS请求时,Dnsmasq首先会查找/etc/hosts这个文件,然后查找/etc/resolv.conf中定义的外部DNS。所以说Dnsmasq是一个很不错的外部DNS中继。 配置Dnsmasq为DNS缓存服务器,同时在/etc/hosts文件中加入本地内网解析,这样一来每当内网机器查询时就会优先查询hosts文件,这就等于将/etc/hosts共享给全内网机器使用,从而解决内网机器互相识别的问题。相比逐台机器编辑hosts文件或者添加Bind DNS记录,仅编辑一个hosts文件,这简直太容易了。
xxxxxxxxxx
Ubuntu/Debian系统:
$ apt-get install dnsmasq
Centos/RHEL系统:
$ yum install dnsmasq
++配置的DNS服务器地址是公网的IP地址, 而你要对域名进行解析的话,可以修改Hosts文件,或者在dnsmasq.conf配置文件里面添加解析即可!++
dnsmasq.conf的配置内容比较多,但是只需要搭建一台DNS服务器的话,只需要简单的配置就可以了。dnsmasq.conf通常坐在地位置是/etc/dnsmasq.conf。
xxxxxxxxxx
基本配置:
resolv-file=/etc/resolv.conf(详细参考下一步)
strict-order
listen-address=127.0.0.1,192.168.1.24(请看接下的注释,特别重要)
address=/www.tang.tang/172.18.61.125
cache-size=10000
resolve-file定义dnsmasq从哪里获取上游DNS服务器的地址, 默认是从/etc/resolv.conf获取。 strict-order表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。 listen-address定义dnsmasq监听的地址,默认是监控本机的所有网卡上。 address自定义域名解析的IP地址,在此已www.tang.tang这个域名为例。
这里有个坑,不少人都在这个坑里搞了好长时间,网上很多教程都没有明确强调这一点!这里不少人认为是解析的本机所以就把IP地址写成127.0.0.1,这样局域网其它主机是解析不到的,必须还要写上本机所在局域网内的IP地址,比如这台主机在局域网内的IP地址是192.168.1.24,那么就要加上这个IP地址!所以这个参数正确写法应该是127.0.0.1,192.168.1.24,后面的参数改为你的主机在局域网的IP。
resolv-file配置Dnsmasq额外的上游的DNS服务器,如果不开启就使用Linux主机默认的/etc/resolv.conf里的nameserver。
xxxxxxxxxx
首先
sudo -s
通过下面的选项指定其他文件来管理上游的DNS服务器
vim /etc/dnsmasq.conf
resolv-file=/etc/resolv.dnsmasq.conf
在指定文件中增加转发DNS的地址(若使用你自己的配置文件)
vim /etc/resolv.dnsmasq.conf
nameserver 1.1.1.1
nameserver 1.2.4.8
不使用你自己的配置文件的话
vim /etc/resolv.conf
nameserver 1.1.1.1
nameserver 1.2.4.8
(上面的DNS服务器是公网的dns服务器地址,选用你喜欢的)
(1)使用系统默认hosts 编辑hosts文件,简单列举一下格式
xxxxxxxxxx
vim /etc/hosts
127.0.0.1 localhost
172.18.61.125 www.tang.tang
hosts文件的强大之处还在于能够劫持解析,譬如mirror.centos.org是CentOS仓库所在,几乎是机器正常必访问一个域名,我将它解析成一个内网地址,搭建一个内网镜像站,不仅内网机器也可以及时得到安全更新,每月还可以节省很多流量。
(2)使用自定义hosts文件
xxxxxxxxxx
修改配置,增加自定义hosts文件位置。
vim /etc/dnsmasq.conf
addn-hosts=/etc/dnsmasq.hosts(取消掉注释)
在/etc/dnsmasq.hosts文件中添加DNS记录
vim /etc/dnsmasq.hosts
172.18.61.125 www.tang.tang
如果你找配置文件找了很久都没找到,我建议你看看VIm的相关语法。
(3)使用dnsmasq.conf文件解析
xxxxxxxxxx
vim /etc/dnsmasq.conf
address=/www.tang.tang/172.18.61.125(取消注释)
也可以对指定的域名进行解析,相当于就是本地hosts指向,可以利用这个功能实现广告屏蔽等效果。也是需要修改/etc/dnsmasq.conf文件,DNSmasq也可以对域名进行泛解析,填写*.xiaoz.me,这样的格式即可。
#将广告域名指向到127.0.0.1实现广告屏蔽
address=/ad.youku.com/127.0.0.1
address=/ad.iqiyi.com/127.0.0.1
#对xiaoz.me进行泛解析
address=/*.xiaoz.me/192.168.20.138
xxxxxxxxxx
1.允许本机的53端口可对外访问
iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
2.转发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
3.保存规则并重启
service iptables save
service iptables restart
xxxxxxxxxx
#启动
/etc/init.d/dnsmasq start
#停止
/etc/init.d/dnsmasq stop
#重新启动
/etc/init.d/dnsmasq restart
控制面板\网络和 Internet\网络和共享中心中: