为什么不试试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试试看?

又快又安全咯

(完)

none
最后修改于:2024年09月06日 15:25

添加新评论