对于网络加速,有很多种办法。最简单直接的莫过于通过钞能力实现,然而如果不额外花费(比如:提升宽带/加私服/换硬件等)想要达到提升效果,优化 DNS算是一种很有效的手段…
对于我来说,任何时候更换路由器,第一件事就是进入路由器管理后台手动更换运营商提供的 DNS 服务,原因很简单:
- 上网较慢:通常运营商提供的 DNS 都是某个地区特定线路的节点,效果嘛只能说可以用;
- 安全性差:如果说网慢一点(在忍耐范围内)也还能接受,但时不时被劫持、投放广告就过份了,当然还不仅限于此;
一般来说,我们可以在路由器后台或者自己电脑上手动指定适合自己的 DNS 服务,目前国内比较知名的有 阿里、腾讯、114这么几个,读者可以根据自己的情况自行选择。具体姿势如下:
# 以阿里DNS解析为例,获取离我最近的京东官网IP节点
nslookup www.jd.com 223.5.5.5
# 拿到上个命令的最终结果,PING下连通性能(选最合适你的那个)
ping 27.36.125.193 -c 2
本文将分享另一种更为极客范的姿势,即:通过SmartDNS搭建本地 DNS 服务,特别适用于希望获得全球特定加速的人群。
PS:如果浏览器面前的你,对开发工具配置不是太熟练,以下内容可能会有难度。正常上网冲浪,并不需要这么折腾!
SmartDNS
SmartDNS,一个开源、高性能的本地 DNS 服务器工具,支持树莓派、OpenWrt、华硕路由器原生固件和 Windows 系统等。
更多详情,读者可以移步到他们的官网:https://pymumu.github.io/smartdns
基于 macOS 的本地化
smartdns
工具本身是用 C 语言写的,目前该工具并不能直接跑在macOS
下。有两种方式可以完成 mac 本地化
- rust 版:热心网友基于 C 移植了一份跨平台的,用法移步:https://github.com/mokeyish/smartdns-rs
- docker 版:官方容器化方案,相对更方便一些
特别提示:由于rust
版的目前仍在开发阶段,我试了通过brew install smartdns
安装,不过有一些问题。刚好我本地有Docker
环境,所以就换成容器方案了。
工具依赖说明
- Docker:下载和运行容器,具体移步:https://hub.docker.com/r/pymumu/smartdns
- Git:用于dnsmasq-china-list源码下载;
- Make:用于构建基于本地 DNS 服务的 list,如果 mac 有安装过 XCode,则认为
make
命令默认有效;
基于规则分流
由于某些众所周知的原因,国内公共 DNS 服务对海外网站解析是有限的。如果想要实现内外有别,推荐基于dnsmasq-china-list构建自己的清单。否则,仅 Docker 化就可以了
如果你已经准备好了上述工程源码,那现在可以开始构建了
make SERVER=domestic smartdns
这句命令的意思是,把国内节点解析交给smartdns
。
成功后,会生成几个以smartdns.conf
结尾的配置文件,然后再把它复制到系统目录:/et/smartdns/domestic
注意使用sudo
操作,如果对应目录不存在,则手动创建。最后赋予文件可读权限…
配置参考
以下是smartdns.conf的配置参考,该文件位于:/etc/smartdns
。如果没有,需要手动创建它
# Listen on local port 53, both ipv4 and ipv6
bind [::]:53
# 日志信息
log-num 5
log-size 2M
log-level warn
log-console yes
# 禁用全局测速
speed-check-mode none
# 启用双栈优选
dualstack-ip-selection yes
# 域名预先获取功能,开启会提高系统资源占用率
prefetch-domain yes
cache-size 4096
# 配置 bootstrap-dns,如不配置则调用系统的,建议配置
server-https https://cloudflare-dns.com/dns-query -bootstrap-dns -exclude-default-group
# ----- Default Group(解析海外) -----
server 1.0.0.1
server 8.8.4.4
server 9.9.9.9
server-tls 1.1.1.1
server-tls 8.8.8.8
# ----- Domestic Group(解析国内) -----
## 腾讯 DNSPod IP DoT
server-tls 1.12.12.12:853 -group domestic -exclude-default-group
server-tls 120.53.53.53:853 -group domestic -exclude-default-group
## 阿里 IP DoT
server-tls 223.5.5.5:853 -group domestic -exclude-default-group
server-tls 223.6.6.6:853 -group domestic -exclude-default-group
## 114 DNS、使用 TCP 查询
server-tcp 114.114.114.114 -group domestic -exclude-default-group
server-tcp 114.114.115.115 -group domestic -exclude-default-group
## DNSPod 兜底
server 119.29.29.29 -group domestic -exclude-default-group
# ----- Office Group(解析办公区内网) -----
# Configure the Office(Home) upstream server
server 192.168.1.1 -group office -exclude-default-group
# Domain names ending with work are forwarded to the office group for resolution
nameserver /work/office
# ----- 其他个性化配置 -----
# Set static IP for domain name
address /x.tangkunyin.com/127.0.0.1
# Block Domains (Ad Blocking)
address /ads.baidu.com/#
# 加载由 dnsmasq-china-list 生成的 domain-rules 配置文件,使得国内的解析走 domestic 组
conf-file /etc/smartdns/domestic/*.conf -group domestic
以上就是全球均衡的一个配置参考,各项参数的用途参考官方:https://pymumu.github.io/smartdns/configuration
运行和测试
配置文件和容器环境准备妥当后,执行以下命令:
docker run -d --name smartdns --restart=always -p 53:53/udp -v /etc/smartdns:/etc/smartdns pymumu/smartdns:latest
然后,你可能会运行失败!因为53 端口被系统服务占用了,你可以通过lsof -i:53
或sudo lsof -i:53
看下是哪个进程占用了,然后杀掉、重启容器
容器运行后,可以看到它的状态如上,可以清晰的看到事实上它并没有占用过多的系统资源。接着把本机的 DNS 改成:127.0.0.1
nslookup 一把
小结
DNS 之于网络的重要性不言而喻!构建一个合适的 DNS 服务,对每个网民都非常重要,希望本文能对读者带来一些启发和有用的参考。
更多有料有趣的知识,可以看这篇文章:我有特别的 DNS 配置和使用技巧
在此,感谢所有作者的奉献,以上!