自己搭建一个DNS服务器来防止运营商DNS污染

发布于 2020-03-23  473 次阅读


前言

hello,大家好,我又出来装逼了 :idea: ;咳咳咳,回归正题,今天我来教大家搭建一个基于smartdns的私人DNS服务器 :mrgreen: ,私人DNS有什么用呢?

我总结了3点:

  1. 作为本地DNS可以加快查询速度
  2. 可以自由配置上游DNS
  3. 可玩性高
  4. 使用DNS over TCP,DoT,DoH,等DNS服务器可以有效墙、运营商的DNS污染
  5. 因乐于助人给别人提供公共DNS服务(没错就是我 :idea: ;我在此发表一下我的看法:如果你的DNS返回的结果不是相对纯净的,我建议你还是不要提供公共服务了,因为114DNS等公共DNS比我们自己搭的还优秀 :grin: (没有可比性),通常我们自己搭的主要是避免污染)

本文搭建DNS使用的软件:ChinaDNS-NG,SmartDNS

准备工作

  1. 一台能上网的电脑
  2. 一个人
  3. 梯子(非必要) :cool:

适用系统

Ubuntu,Debian,Centos(小宋我搭建测试DNS时就是Centos8环境 :cool: )

本文介绍基于centos x86_64(即64位)系统的安装方法(其实都通用的,就是我懒不想写多几篇文章 :grin:  :smile: )

安装

SmartDNS

去smartdns官网github下载deb包

安装名:smartdns.xxxxxxxxxxxxxxxxx.x86_64-debian-all.deb

安装deb包:

#Centos用户需要先执行这一步
yum install dpkg -y
#视你自己的包名,不要无脑复制(捂脸)
sudo dpkg -i smartdns.xxxxxxxxxxxxxxxxx.x86_64-debian-all.deb

修改配置文件:

sudo vim /etc/smartdns/smartdns.conf
###################3以下是我提供的配置文件#############################
#bind [::]:55
bind :55
#bind-tcp [::]:853
bind-tcp :853
#这个配置是专门解析国外域名的,如果用来解析国内的域名,访问速度会很慢
server 208.67.222.222:853
server 208.67.220.220:853
server-tls	 1.1.1.1:853
server-tls	 [2606:4700:4700::1111]:853
server-tls	 8.8.8.8:853
server-tls	 9.9.9.9:853
server-tls	 [2620:fe::fe]:853
server-https https://cloudflare-dns.com/dns-query
server-https https://1.1.1.1/dns-query
server-https https://[2606:4700:4700::1111]/dns-query
server-https https://[2001:4860:4860::64]/dns-query
server-https https://dns.adguard.com/dns-query
speed-check-mode tcp:80,tcp:443,ping
然后输入:wq 保存并退出

如果要使用CannonDNS作为上游DNS,请在配置文件中添加:

server-tcp 39.104.113.121:853

启动smartdns:

sudo systemctl start smartdns
sudo systemctl enable smartdns

修改系统默认DNS:

sudo echo "nameserver 127.0.0.1" > /etc/resolv.conf

试试能不能正常解析:

dig www.baidu.com @127.0.0.1 -p 55

ChinaDNS-NG

官网处git源码下来并编译:

git clone https://github.com/zfl9/chinadns-ng
cd chinadns-ng
make && sudo make install

接下来修改update-chnlist.sh:

sudo vim update-chnlist.sh
看到那个url了没?将引号内的东西删掉,在里面写入https://pexcn.me/daily/chinalist/chinalist.txt

然后输入:wq保存并退出

更新规则:

bash update*.sh

关闭那个蛋疼的systemd-resolved

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

启动chinadns-ng并启用守护

#监听ipv4
nohup chinadns-ng -b 0.0.0.0 -l 53 -c 114.114.114.114,180.76.76.76 -t 127.0.0.1#55 --gfwlist-file /root/chinadns-ng/gfwlist.txt --chnlist-file /root/chinadns-ng/chnlist.txt  -r &
#监听ipv6
nohup chinadns-ng -b :: -l 53 -c 114.114.114.114,180.76.76.76 -t 127.0.0.1#55 --gfwlist-file /root/chinadns-ng/gfwlist.txt --chnlist-file /root/chinadns-ng/chnlist.txt  -r &

再一次试一试解析:

dig www.baidu.com @127.0.0.1
dig www.google.com @127.0.0.1

如果能成功解析,那么恭喜你,你的DNS搭建成功了! :wink: :wink:

将系统DNS修改为你运行DNS的电脑的IP就可以防止运营商DNS污染辣 :wink:

如果解析失败,也不用沮丧,你可以在评论区@我,我会尽全力帮你的 :wink:

高级模式

smartdns配置参数

参数 功能 默认值 配置值 例子
server-name DNS服务器名称 操作系统主机名/smartdns 符合主机名规格的字符串 server-name smartdns
bind DNS监听端口号 [::]:53 可绑定多个端口
IP:PORT: 服务器IP,端口号。
[-group]: 请求时使用的DNS服务器组。
[-no-rule-addr]:跳过address规则。
[-no-rule-nameserver]:跳过Nameserver规则。
[-no-rule-ipset]:跳过Ipset规则。
[no-rule-soa]:跳过SOA(#)规则.
[no-dualstack-selection]:停用双栈测速。
[-no-speed-check]:停用测速。
[-no-cache]:停止缓存
bind :53
bind-tcp TCP DNS监听端口号 [::]:53 可绑定多个端口
IP:PORT: 服务器IP,端口号。
[-group]: 请求时使用的DNS服务器组。
[-no-rule-addr]:跳过address规则。
[-no-rule-nameserver]:跳过Nameserver规则。
[-no-rule-ipset]:跳过Ipset规则。
[no-rule-soa]:跳过SOA(#)规则.
[no-dualstack-selection]:停用双栈测速。
[-no-speed-check]:停用测速。
[-no-cache]:停止缓存
bind-tcp :53
cache-size 域名结果缓存个数 512 数字 cache-size 512
tcp-idle-time TCP链接空闲超时时间 120 数字 tcp-idle-time 120
rr-ttl 域名结果TTL 远程查询结果 大于0的数字 rr-ttl 600
rr-ttl-min 允许的最小TTL值 远程查询结果 大于0的数字 rr-ttl-min 60
rr-ttl-max 允许的最大TTL值 远程查询结果 大于0的数字 rr-ttl-max 600
log-level 设置日志级别 error fatal,error,warn,notice,info,debug log-level error
log-file 日志文件路径 /var/log/smartdns.log 路径 log-file /var/log/smartdns.log
log-size 日志大小 128K 数字+K,M,G log-size 128K
log-num 日志归档个数 2 数字 log-num 2
audit-enable 设置审计启用 no [yes|no] audit-enable yes
audit-file 审计文件路径 /var/log/smartdns-audit.log 路径 audit-file /var/log/smartdns-audit.log
audit-size 审计大小 128K 数字+K,M,G audit-size 128K
audit-num 审计归档个数 2 数字 audit-num 2
conf-file 附加配置文件 文件路径 conf-file /etc/smartdns/smartdns.more.conf
server 上游UDP DNS 可重复
[ip][:port]:服务器IP,端口可选。
[-blacklist-ip]:blacklist-ip参数指定使用blacklist-ip配置IP过滤结果。
[-whitelist-ip]:whitelist-ip参数指定仅接受whitelist-ip中配置IP范围。
[-group [group] ...]:DNS服务器所属组,比如office, foreign,和nameserver配套使用。
[-exclude-default-group]:将DNS服务器从默认组中排除
server 8.8.8.8:53 -blacklist-ip -group g1
server-tcp 上游TCP DNS 可重复
[ip][:port]:服务器IP,端口可选。
[-blacklist-ip]:blacklist-ip参数指定使用blacklist-ip配置IP过滤结果。
[-whitelist-ip]:whitelist-ip参数指定仅接受whitelist-ip中配置IP范围。
[-group [group] ...]:DNS服务器所属组,比如office, foreign,和nameserver配套使用。
[-exclude-default-group]:将DNS服务器从默认组中排除
server-tcp 8.8.8.8:53
server-tls 上游TLS DNS 可重复
[ip][:port]:服务器IP,端口可选。
[-spki-pin [sha256-pin]]: TLS合法性校验SPKI值,base64编码的sha256 SPKI pin值
[-host-name]:TLS SNI名称。
[-tls-host-verify]: TLS证书主机名校验。
[-blacklist-ip]:blacklist-ip参数指定使用blacklist-ip配置IP过滤结果。
[-whitelist-ip]:whitelist-ip参数指定仅接受whitelist-ip中配置IP范围。
[-group [group] ...]:DNS服务器所属组,比如office, foreign,和nameserver配套使用。
[-exclude-default-group]:将DNS服务器从默认组中排除
server-tls 8.8.8.8:853
server-https 上游HTTPS DNS 可重复
https://[host][:port]/path:服务器IP,端口可选。
[-spki-pin [sha256-pin]]: TLS合法性校验SPKI值,base64编码的sha256 SPKI pin值
[-host-name]:TLS SNI名称
[-http-host]:http协议头主机名。
[-tls-host-verify]: TLS证书主机名校验。
[-blacklist-ip]:blacklist-ip参数指定使用blacklist-ip配置IP过滤结果。
[-whitelist-ip]:whitelist-ip参数指定仅接受whitelist-ip中配置IP范围。
[-group [group] ...]:DNS服务器所属组,比如office, foreign,和nameserver配套使用。
[-exclude-default-group]:将DNS服务器从默认组中排除
server-https https://cloudflare-dns.com/dns-query
speed-check-mode 测速模式选择 [ping|tcp:[80]|none] speed-check-mode ping,tcp:80
address 指定域名IP地址 address /domain/[ip|-|-4|-6|#|#4|#6]
-表示忽略
#表示返回SOA
4表示IPV4
6表示IPV6
address /www.example.com/1.2.3.4
nameserver 指定域名使用server组解析 nameserver /domain/[group|-], group为组名,-表示忽略此规则,配套server中的-group参数使用 nameserver /www.example.com/office
ipset 域名IPSET None ipset /domain/[ipset|-], -表示忽略 ipset /www.example.com/pass
ipset-timeout 设置IPSET超时功能启用 auto [yes] ipset-timeout yes
domain-rules 设置域名规则 domain-rules /domain/ [-rules...]
[-speed-check-mode]: 测速模式,参考speed-check-mode配置
[-address]: 参考address配置
[-nameserver]: 参考nameserver配置
[-ipset]:参考ipset配置
domain-rules /www.example.com/ -speed-check-mode none
bogus-nxdomain 假冒IP地址过滤 [ip/subnet],可重复 bogus-nxdomain 1.2.3.4/16
ignore-ip 忽略IP地址 [ip/subnet],可重复 ignore-ip 1.2.3.4/16
whitelist-ip 白名单IP地址 [ip/subnet],可重复 whitelist-ip 1.2.3.4/16
blacklist-ip 黑名单IP地址 [ip/subnet],可重复 blacklist-ip 1.2.3.4/16
force-AAAA-SOA 强制AAAA地址返回SOA no [yes|no] force-AAAA-SOA yes
prefetch-domain 域名预先获取功能 no [yes|no] prefetch-domain yes
serve-expired 过期缓存服务功能 no [yes|no],开启此功能后,如果有请求时尝试回应TTL为0的过期记录,并并发查询记录,以避免查询等待 serve-expired yes
serve-expired-ttl 过期缓存服务最长超时时间 0 秒,0:表示停用超时,> 0表示指定的超时的秒数 serve-expired-ttl 0
dualstack-ip-selection 双栈IP优选 no [yes|no] dualstack-ip-selection yes
dualstack-ip-selection-threshold 双栈IP优选阈值 30ms 毫秒 dualstack-ip-selection-threshold [0-1000]

最后

又成功水了一篇文章 :idea:


世界上本没有博客,直到有了程序员