为什么不试试DNS over VPN呢
warning:
这篇文章距离上次修改已过76天,其中的内容可能已经有所变动。
虽然可能听上去比较扯,但是结合背景来看,似乎也就那样:
笔者的学校不知道出于什么原因(更好管控访问?防止53端口偷网?),阻止了所有出站方向目标端口为53的访问流量(是的,包括TCP53),这就让直接指定域外DNS成了一个问题
使用DoH,DoT当然是个解决方法,但是TLS的握手始终需要时间,这就让初次查询的延迟提高。嘛,不过,如果这个加密通道预先已经建立好又会如何呢?
于是本着不作死就不会死的态度,笔者开始尝试DoV,也就是:DNS over VPN
点击此处,展开目录
前言
技术栈其实很简单,找台国内云服务器(就最丐版那种1Mbps的也十分充裕了,不用国外是考虑到延迟和GFW的耐受性不行),然后装好一堆软件就....好了
服务端安装
安装WireGuard
笔者选用的VPN是WireGuard,因为没啥理由不用他:比PPTP安全,比OpenVPN轻量,比IKEv2好配置
对于Debian 11/12来说,安装过程一句话搞定:
sudo apt install wireguard
装好后,用编辑器编辑/etc/wireguard/wg0.conf
,写入如下内容:
[Interface]
Address = 10.20.0.1/24
PrivateKey = <服务器私钥>
ListenPort = 3960
MTU = 1300
[Peer]
PublicKey = <客户端公钥>
AllowedIPs = 10.20.0.2/32
因为我们不需要通过这玩意访问互联网,那么就不必配置iptables了
写完之后保存,然后执行systemctl enable wg-quick@wg0 --now
启用并设置开机自启动
安装SmartDNS
DNS服务器用SmartDNS就行了
sudo apt install smartdns
然后编辑/etc/smartdns/smartdns.conf
,根据你的需求去调整内容。笔者的配置是:
# 仅仅绑定到VPN网口,防止意外对外服务
# 建议在外网口上添加阻止规则
bind 10.20.0.1:53
# 可以适当加大缓存
cache-size 32768
cache-persist yes
# 乐观缓存:即使缓存过期,也优先返回过期结果
# 其实是建议开启的,毕竟域名解析变动的可能性并不大
serve-expired yes
# 上游服务器地址
# 为了应对公共DNS限速,多写了几个
# 下面这两个是阿里云内网DNS,请根据你服务器实际供应商做修改!
server 100.100.2.136
server 100.100.2.138
server 223.5.5.5
server 223.6.6.6
server 120.53.53.53
server 1.12.12.12
server 101.226.4.6
server 218.30.118.6
写完之后记得保存,并重启smartdns
客户端
客户端也安装WireGuard,然后写入如下配置文件:
[Interface]
Address = 10.20.0.2/24
PrivateKey = <客户端私钥>
MTU = 1300
[Peer]
PublicKey = <服务器公钥>
AllowedIPs = 10.20.0.0/24
Endpoint = <服务器地址>
保存,启动接口
现在把本机的DNS服务器设置为10.20.0.1
试试看?
又快又安全咯
(完)