前言
hello,大家好,我又出来装逼了 :idea: ;咳咳咳,回归正题,今天我来教大家搭建一个基于smartdns的私人DNS服务器 :mrgreen: ,私人DNS有什么用呢?
我总结了3点:
- 作为本地DNS可以加快查询速度
- 可以自由配置上游DNS
- 可玩性高
- 使用DNS over TCP,DoT,DoH,等DNS服务器可以有效墙、运营商的DNS污染
- 因乐于助人给别人提供公共DNS服务(没错就是我 :idea: ;我在此发表一下我的看法:如果你的DNS返回的结果不是相对纯净的,我建议你还是不要提供公共服务了,因为114DNS等公共DNS比我们自己搭的还优秀 :grin: (没有可比性),通常我们自己搭的主要是避免污染)
本文搭建DNS使用的软件:ChinaDNS-NG,SmartDNS
准备工作
- 一台能上网的电脑
- 一个人
- 梯子(非必要) :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]- 表示忽略# 表示返回SOA4 表示IPV46 表示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:
Comments | 2 条评论
博主 feng jian
你好 按照您的教程 我这里启动命令输入后出现nohup错误,无法解析 ,能帮忙看下吗?谢谢
[root@localhost chinadns-ng]# 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 &
[1] 19505
[root@localhost chinadns-ng]# nohup: 忽略输入并把输出追加到”nohup.out”
[root@localhost chinadns-ng]# dig www.baidu.com @127.0.0.1
; <> DiG 9.9.4-RedHat-9.9.4-72.el7 <> www.baidu.com @127.0.0.1
;; global options: +cmd
;; connection timed out; no servers could be reached
博主 CannonCart
@feng jian 把dig命令的https://去掉