加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

利用Dnsmasq部署DNS服务

发布时间:2021-01-11 00:10:04 所属栏目:电商 来源:网络整理
导读:《利用Dnsmasq部署DNS服务》要点: 本文介绍了利用Dnsmasq部署DNS服务,希望对您有用。如果有疑问,可以联系我们。 Dnsmasq提供 DNS 缓存和DHCP服务、Tftp服务功能.作为域名解析 服务器 (DNS),Dnsmasq可以通过缓存DNS请求来提高对访问过的网址的连接速度.作

hosts文件的强大之处还在于能够劫持解析,譬如mirror.centos.org是CentOS仓库所在,几乎是机器正常必访问一个域名,我将它解析成一个内网地址,搭建一个内网镜像站,不仅内网机器也可以及时得到安全更新,每月还可以节省很多流量.

  • 使用自定义hosts文件

修改配置,增加自定义hosts文件位置.

$ vi /etc/dnsmasq.conf

addn-hosts=/etc/dnsmasq.hosts

在/etc/dnsmasq.hosts文件中添加DNS记录

$ vi /etc/dnsmasq.hosts

192.168.101.107 ? web01.mike.com ? ?web01 
192.168.101.107 ? web02.mike.com ? ?web02
  • 使用自定义conf
$ vi /etc/dnsmasq.d/address.conf

# 指定dnsmasq默认查询的上游服务器,此处以Google Public DNS为例.
server=8.8.8.8
server=8.8.4.4

# 把所有.cn的域名全部通过114.114.114.114这台国内DNS服务器来解析
server=/cn/114.114.114.114

# 给*.apple.com和taobao.com使用专用的DNS
server=/taobao.com/223.5.5.5
server=/.apple.com/223.5.5.5

# 把www.hi-linux.com解析到特定的IP
address=/www.hi-linux.com/192.168.101.107

在这里hi-linux.com相当于*.mike.com泛解析
address=/hi-linux.com/192.168.101.107

注:也可以直接添加到/etc/dnsmasq.conf中,不过/etc/dnsmasq.d/*.conf的优先级大于/etc/dnsmasq.conf.

修改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

测试Dnsmasq

  • 启动Dnsmasq
$ service dnsmasq start
  • 测试Dnsmasq

将其他机器的DNS换成dnsmasq所在的IP即可,就这么容易.

$ dig @192.168.101.104 www.hi-linux.com

一些Dnsmasq技巧

Dnsmasq性能优化

我们都知道Bind不配合数据库的情况下,经常需要重新载入并读取配置文件,这是造成性能低下的原因.根据这点教训,我们可以考虑不读取/etc/hosts文件.而是另外指定一个在共享内存里的文件,比如/dev/shm/dnsrecord.txt,这样就不费劲了,又由于内存的非持久性,重启就消失,可以定期同步硬盘上的某个内容到内存文件中.

具体实现步骤

  • 配置dnsmasq
$ vim /etc/dnsmasq.conf

no-hosts 
addn-hosts=/dev/shm/dnsrecord.txt
  • 解决同步问题
# 开机启动
$ echo "cat /etc/hosts > /dev/shm/dnsrecord.txt" >>/etc/rc.local 

# 定时同步内容
$ crontab -e 
*/10 * * * * cat /etc/hosts > /dev/shm/dnsrecord.txt

Dnsmasq选择最快的上游DNS服务器

经常会有这样的情景,Dnsmasq服务器配了一堆上游服务器,转发本地的dns请求,缺省是Dnsmasq事实上是只挑了一个上游dns服务器来查询并转发结果,这样如果选错服务器的话会导致DNS响应变慢.

解决方法

$ vi /etc/dnsmasq.conf

all-servers ?
server=8.8.8.8 ?
server=219.141.136.10

all-servers表示对以下设置的所有server发起查询,选择回应最快的一条作为查询结果返回.
上面我们设置了两个dns server,8.8.8.8(谷歌dns)和219.141.136.10(移动的dns),会同时查询这两个服务器,询问dns地址谁返回快就采用谁的结果.

dnsmasq-china-list项目

dnsmasq-china-list项目维护了一张国内常用但是通过国外DNS会解析错误的网站域名的列表,保证List中的国内域名全部走国内DNS服务器解析.

项目地址: https://github.com/felixonmars/dnsmasq-china-list

dnsmasq-china-list使用

  • 取消dnsmasq.conf里conf-dir=/etc/dnsmasq.d这一行的注释
  • 获取项目文件
$ git clone https://github.com/felixonmars/dnsmasq-china-list.git
  • 将accelerated-domains.china.conf,bogus-nxdomain.china.conf,google.china.conf(可选)放到/etc/dnsmasq.d/目录下(如目录不存在则建立一个).
  • dnsmasq-update-china-list放到/usr/bin/,这是一个批量修改DNS服务器的工具(可选).

参考文档

http://www.google.com
http://purplegrape.blog.51cto.com/1330104/1083354
https://i-meto.com/archives/iptables_PREROUTING.html
http://blog.itphp.org/archives/225

文/Mike

文章出处:运维之美

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读