前言
平时我们都是使用的默认的DNS解析服务器,但是最近本地的DNS服务器出了一些问题,导致打开某些网站的速度变得很慢,所以就打算自己搭建一个dns服务器,这里采用dnsmasq,因为他的使用非常简单。
安装dnsmasq
很多发行版已经可以直接安装dnsmasq了,可以用apt-get install dnsmasq -y
或者yum install dnsmasq -y
来安装。
这里也介绍一下debian9上编译安装的方法。
在这里查看最新的dnsmasq:http://www.thekelleys.org.uk/dnsmasq/
apt-get update apt-get install make gcc xz-utils -y wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.80.tar.xz tar -xvf dnsmasq-2.80.tar.xz cd dnsmasq-2.80 make make install cp dnsmasq.conf.example /etc/dnsmasq.conf
设置dnsmasq
编译安装或者apt
或yum
均是修改下面的文件
配置文件是/etc/dnsmasq.conf,修改vi /etc/dnsmasq.conf
只是简单的使用,修改以下的内容即可。
resolv-file=/etc/resolv.conf strict-order #listen-address=192.168.153.128 address=/demon.com/192.168.153.128 #server=114.114.114.114 #bogus-nxdomain=114.114.114.114
对参数的解释
resolve-file 定义dnsmasq从哪里获取上游DNS服务器的地址, 默认是从/etc/resolv.conf获取。
strict-order 表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。
listen-address 定义dnsmasq监听的地址,默认是监控本机的所有网卡上。局域网内主机若要使用dnsmasq服务时,指定本机的IP地址,如果你的DNS服务器和你欲使用该DNS的设备不在同一个局域网则把你的公网地址放上去,如果你还需要为本机的其他程序提供解析,则需要把127.0.0.1放上去,这里可以同时设置多个IP。
listen-address=127.0.0.1,192.168.1.1,8.8.8.8
address 启用泛域名解析,即自定义解析a记录,如下配置为demon.com这个域名:
address=/demon.com/127.0.0.1 #访问demon.com时的所有域名都会被解析成127.0.0.1
bogus-nxdomain 为防止DNS污染,使用参数定义的DNS解析的服务器。注意:如果是阿里云服务器上配置dnsmasq要启用此项。
server 指定dnsmasq程序使用哪个DNS服务器进行解析。 对于不同的网站可以使用不同的域名对应解析如下配置
server=/google.com/8.8.8.8 #表示对于google的服务,使用谷歌的DNS解析。
因为这里的编译安装没有设置开机自启,我们设置一下开机自启,如果你采用apt
或者yum
方法来安装的话,不需要执行以下步骤。
不支持systemd
的系统,这里利用cron
来实现。
crontab -e
加入以下内容
#开机自启动dnsmasq @reboot /usr/local/sbin/dnsmasq -C /etc/dnsmasq.conf #每隔三十分钟检测dnsmasq进程,如果不存在,则重启dnsmasq */30 * * * * [[ -z $(ps -e | grep dnsmasq) ]] && /usr/local/sbin/dnsmasq -C /etc/dnsmasq.conf
支持systemd
的系统(debian8/ubuntu16.04以上),将一下内容一起复制执行,不要单行复制
echo -e "[Unit] Description=dnsmasq servier After=network.target [Service] ExecStart=/usr/local/sbin/dnsmasq -C /etc/dnsmasq.conf --keep-in-foreground Restart=always [Install] WantedBy=multi-user.target" > /etc/systemd/system/dnsmasq.service
以上配置完毕后,需要设置自启动并,重启dnsmasq服务,重启完毕后其他机器,就可以通过该DNS服务器解析公网的域名。
systemctl enable dnsmasq && systemctl restart dnsmasq
通过netstat -lntp
查看dnsmasq是否监听53端口。如果提示-bash: netstat: command not found,则可以通过apt-get install net-tools -y
进行安装。
dnsmasq的debug模式
dnsmasq --no-daemon --log-queries
补充
在debian系的新系统中,有一个systemd-resolved
的服务会占用53
端口,可通过systemctl disable systemd-resolved && systemctl stop systemd-resolved
来禁用该服务。
自定义DNS地址,修改/etc/netplan
目录下以.yaml
结尾的文件。将nameserver:
后的addresses: -"8.8.8.8"
(或者其他地址)修改为addresses: [DNS1,DNS2]
,然后运行
sudo netplan try
来测试设置是否正确,如果设置不正确,可能会导致服务器无法联网,自然你也就无法通过ssh来连接这台服务器了。
由于部分上游DNS会根据你发起解析请求的IP返回一个最近的解析地址,而这个地址可能只是距离你的服务器比较近,但并不适用于你的个人电脑,这就可能导致,部分网站无法正常打开(例如通过119.29.29.29解析腾讯的qq.com和gtimg.com),这个时候可以通过server=/域名/114.114.114.114(或者别的公共DNS)来解决问题。
dnsmasq的缓存设置是cache-size
dnsmasq还有更强大的功能,具体内容可以查看官方文档:http://www.thekelleys.org.uk/dnsmasq/doc.html
参考链接:
https://www.cnblogs.com/demonxian3/p/7472300.html
首先感谢大佬的指导,成功用国外VPS搭建了DNS服务器,并且解析到了家里公网ip
想必大佬知道,最近电信查家用宽带私设web,很凶,nas通过ddns域名远程登录就会被封停宽带,用群晖官方QC的ddns也会被查到
所以作为小白的我想到了用私有DNS服务器的方式来实现域名登录,避免域名在公共dns解析,如此一来应该不会被检测到家用宽带被绑定域名在使用
大佬可以出一个群晖下用脚本自动更新IP到远程DNS服务器的教程吗,小白也在学习。。。目前网上暂时找不到群晖脚本更新dnsmasq解析记录的方法。。[undefined]
由于我没有群晖,没有办法测试,所以可能没办法帮助你了。