记录一下我在配置smartdns上遇到的坑
写在最前面:这个方案出于某些原因暂时弃用,虽然原有的会卡,但是smartdns更卡。此文仅作流程参考。
这次将路由器上的dns由
dnsmasq替换为smartdns主要是为了使用 dot (dns over TLS),除此之外,smartdns还提供了多路查询dns的功能。本文主要记录了我在部署到梅林路由器上是遇到的坑。
开发者教程和文件链接:https://github.com/pymumu/smartdns
进入路由器的ssh环境 #
在路由器设置里打开ssh开关,或者和我一样从软件中心里安装shellinabox,使用网页端的ssh。进入shellinabox后输入路由器帐号和密码。
安装entware (opkg) #
- 系统管理 > 系统设置
| Enable SSH | 是 |
| Enable JFFS custom scripts and configs | 是 | - 在ssh环境中:
| |
不同于官方在Tool中提供的方法,以上脚本将entware安装在本体的jffs里,不需要额外的u盘挂载。
安装smartdns #
作者教程 & 软件包下载
按照路由器架构 (armv7) 和安装环境 (entware/optware) 选择安装包,我用的是smartdns.xxx.arm-optware-all.ipk。
| |
安装过程中,我遇到了路由器证书服务openssl协议太旧的问题,opkg在安装的过程中会根据依赖下载其他软件包,由于服务端协议版本比较高,所以最后我还是手动一个一个下载安装依赖。
配置smartdns #
默认情况下,
smartdns工作在模式1,即通过iptables将53端口发向原有dnsmasq的请求转发到535端口。工作模式可以通过修改/opt/etc/smartdns/smartdns-opt.conf中SMARTDNS_WORKMODE参数来调整。
安装完成后nano /opt/etc/smartdns/smartdns.conf,修改以下内容:
| 修改为 | 原有 | 说明 |
|---|---|---|
| conf-file smartdns-list.conf | - | 上游dns的地址 |
| bind :535 | bind [::]:53 | 原作者的启动脚本有问题,需要这里手动修改 |
| bind-tcp :535 | - | 同上 |
| cache-size 40960 | cache-size 4096 | 如果jffs空间不够的话可改小 |
| cache-file /tmp/smartdns.cache | - | 暂存文件应放在ram里 |
| serve-expired yes | - | 防止上游dns卡顿 |
| prefetch-domain yes | - | 自动刷新过期dns |
| force-AAAA-SOA yes | - | 有影响,所以先关闭ipv6解析 |
| rr-ttl-min 60 | - | 从上游dns返回的ttl至少为60s |
| log-level warn | log-level info | 这个可以试完了以后改 |
在/opt/etc/smartdns/smartdns-list.conf添加:
| |
去除原启动脚本中会错误修改端口的bug,修改/opt/etc/init.d/S50smartdns:
| |
在开机启动脚本/jffs/post-mount添加:
| |
重启路由器
测试 #
nslookup -querytype=ptr smartdns或者通过nslookup查询任意一个域名,如果返回ip只有一个,说明部署成功。
时空乱流记录