说明
1、dnsmasq是一款小巧且方便地用于配置DNS服务器和DHCP服务器的工具,适用于小型网络,它提供了DNS解析功能和可选择的DHCP功能。
2、dnsmasq可以解决小范围的dns查询问题,如果业务是跨机房、跨地区的话不建议使用dnsmasq做为dns解析服务器。
安装
1、下载
wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.75.tar.gz
2、环境准备
yum -y install gcc
3、解压
tar -xf dnsmasq-2.75.tar.gz
4、编译安装
cd dnsmasq-2.75 make install
5、版本查看
dnsmasq -v
6、编辑启动脚本
#服务启动脚本
vim /etc/init.d/dnsmasq
#!/bin/sh # # Startup script for the <span class='wp_keywordlink_affiliate'><a href="http://itgeeker.net/tag/dns/" title="View all posts in DNS" target="_blank">DNS</a></span> caching server # # chkconfig: - 49 50 # description: This script starts your DNS caching server # processname: dnsmasq # pidfile: /var/run/dnsmasq # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 dnsmasq=/usr/local/sbin/dnsmasq [ -f $dnsmasq ] || exit 0 RETVAL=0 # See how we were called. case "$1" in start) if [ $UID -ne 0 ] ; then echo "User has insufficient privilege." exit 4 fi echo -n "Starting dnsmasq: " daemon $dnsmasq $OPTIONS RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/dnsmasq ;; stop) if test "x`pidof dnsmasq`" != x; then echo -n "Shutting down dnsmasq: " killproc dnsmasq fi RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/dnsmasq /var/run/dnsmasq.pid ;; status) status dnsmasq RETVAL=$? ;; reload) echo -n "Reloading dnsmasq: " killproc dnsmasq -HUP RETVAL=$? echo ;; force-reload) # new configuration takes effect only after restart $0 stop $0 start RETVAL=$? ;; restart) $0 stop $0 start RETVAL=$? ;; condrestart) if test "x`/sbin/pidof dnsmasq`" != x; then $0 stop $0 start RETVAL=$? fi ;; *) echo "Usage: $0 {start|stop|restart|reload|condrestart|status}" exit 2 esac exit $RETVAL
赋予执行的权限
chmod +x /etc/init.d/dnsmasq
7、启动
/etc/init.d/dnsmasq start chkconfig dnsmasq on
备注:
#如果是源码编译安装的,没有启动脚本时启动、验证、关闭、重启
启动: /usr/local/sbin/dnsmasq 验证:netstat -tunlp|grep 53 关闭:killall -KILL dnsmasq 重启: pkill -9 dnsmasp && /usr/local/sbin/dnsmasq -h
8、其他方式安装
Centos安装
yum -y install dnsmasq
Ubuntu 安装
sudo apt-get -y install dnsmasq
配置
一、三个关键配置文件
1、主配置文件,安装后自动生成
/etc/dnsmasq.conf
2、添加内部需要解析的地址和域名
/etc/dnsmasq.hosts
3、dnsmasq的上游DNS服务器,可以将reslove.conf配置文件复制为resolv.dnsmasq.conf,进行添加nameserver
/etc/resolv.dnsmasq.conf
二、编辑配置文件
1、编辑配置/etc/dnsmasq.conf
vim /etc/dnsmasq.conf
#定义dnsmasq从哪里获取上游DNS服务器的地址,默认是从/etc/resolv.conf获取 resolv-file=/etc/resolv.dnsmasq.conf #严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止 strict-order #启用泛域名解析,即自定义解析a记录 #访问baidu.com时的所有域名都会被解析成10.77.3.8 address=/baidu.com/10.77.3.8 address=/blog.csdn.net/10.77.3.8 #定义dnsmasq监听的地址,默认是监控本机的所有网卡上。局域网内主机若要使用dnsmasq服务时,指定本机的IP地址 listen-address=10.77.3.8,127.0.0.1 #本地域名配置文件(不支持泛域名),添加内部需要解析的地址和域名(重新加载即可生效) addn-hosts=/etc/dnsmasq.hosts #缓存条数 cache-size=100 #为防止DNS污染,使用参数定义的DNS解析的服务器。注意:如果是阿里云服务器上配置dnsmasq要启用此项。 bogus-nxdomain=114.114.114.114 #可以通过server对不通的网站使用不通的DNS服务器进行解析。如下表示对于google的服务,使用谷歌的DNS解析 server=/google.com/8.8.8.8 #记录dns查询日志服务器 log-queries #设置日志记录器 log-facility=/var/log/dnsmasq.log
2、在/etc/dnsmasq.hosts中编辑添加需要解析的内部地址
vim /etc/dnsmasq.hosts
#(testhjs.com为自定义的域名与10.77.3.8进行关联,其他pc或服务器等client配置了10.77.3.8为dns,即可解析此域名) 10.77.3.8 testhjs.com #(testhjs2.com为自定义的域名与10.77.3.119进行关联,其他pc或服务器等client配置了10.77.3.8为dns,即可解析此域名) 10.77.3.119 testhjs2.com
3、在/etc/resolv.dnsmasq.conf添加上游dns服务地址,也就是本地dns10.77.3.8无法解析的时候自动切换到上游dns服务
nameserver 114.114.114.114 nameserver 115.115.115.115
三、其他配置以及说明
1、配置日志轮转,编辑/etc/logrotate.d/dnsmasq
/var/log/dnsmasq.log { daily copytruncate missingok rotate 30 compress notifempty dateext size 200M }
2、安装dig&nslookup
Ubuntu:
sudo apt-get install dnsutils
Centos:
yum install bind-utils
客户端测试域名是否生效:nslookup www.freeoa.net检查解析的IP即可,或使用dig指令。
3、关闭防火墙,或放行dns的端口53
4、客户端配置上自己搭建的dns地址进行测试
由于dns服务端配置了/etc/dnsmasq.conf中配置了address=/baidu.com/10.77.3.8,所以下面的dns解析地址为10.77.3.8
root@test ~]# dig baidu.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53090 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;baidu.com. IN A ;; ANSWER SECTION: baidu.com. 0 IN A 10.77.3.8 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Apr 12 10:38:28 2018 ;; MSG SIZE rcvd: 43 [root@test ~]# nslookup baidu.com Server: 10.77.3.8 Address: 10.77.3.8#53 Name: baidu.com Address: 10.77.3.8 自定义域名解析 [root@test ~]# dig testhjs.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.5 <<>> testhjs.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55740 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;testhjs.com. IN A ;; ANSWER SECTION: testhjs.com. 0 IN A 10.77.3.8 ;; Query time: 0 msec ;; SERVER: 10.77.3.8#53(10.77.3.8) ;; WHEN: Thu Apr 12 10:41:13 2018 ;; MSG SIZE rcvd: 45 [root@test ~]# nslookup testhjs.com Server: 10.77.3.8 Address: 10.77.3.8#53 Name: testhjs.com Address: 10.77.3.8