30秒了解DNS
设备在打开网站之前,必须先把 example.com 这样的域名转换成IP地址。这一步是通过询问 DNS解析服务器 完成的,这台服务器通常由你的运营商提供。它能看到你查询的每一个域名、查询时间以及你的IP地址。
什么是DNS泄露?
使用VPN时,这些查询本应经过加密隧道,发给VPN自己的DNS服务器。DNS泄露 指的是查询绕过了隧道,直接发给了运营商或其他外部DNS服务器。
你的流量本身仍然是加密的,但DNS服务器能看到你访问过的所有网站列表,监视你网络的人也能看到。在一些国家,运营商会用DNS屏蔽网站,所以DNS泄露还可能导致即使开着VPN,被屏蔽的网站也打不开。
DNS泄露不会改变网站看到的IP地址,它暴露的是你访问了哪些网站,而且是暴露给运营商。所以光查IP是发现不了DNS泄露的。
怎么检测DNS泄露
- 连接VPN。
- 打开DNS泄露检测。它会让浏览器查询几个只有我们的测试服务器才能解析的随机域名,并记录是哪些DNS服务器发来了查询。
- 查看列出的DNS服务器。
没有泄露: 所有DNS服务器都属于你的VPN服务商,或者和VPN出口在同一个国家。
有泄露: 出现了你自己运营商的DNS服务器,或者VPN服务器在别的国家,却出现了你所在国家的DNS服务器。
Google(8.8.8.8)和Cloudflare(1.1.1.1)这类大型公共DNS在全球都有服务器。对于这些服务器,检测结果还会显示它们转发的客户端子网(ECS),即使DNS服务器本身看起来没问题,这个子网也可能暴露你的真实网络。
DNS泄露的常见原因
- VPN没有设置自己的DNS。 有些VPN客户端、手动配置的WireGuard或OpenVPN,以及很多代理工具都不会修改系统的DNS设置。
- Windows会同时询问所有网络。 Windows会把DNS查询发给所有网卡,并采用最快的那个回答,所以查询可能从你的普通网络出去。
- IPv6。 如果VPN只处理IPv4,走IPv6的DNS查询会发给运营商的IPv6 DNS服务器。
- 浏览器的DNS-over-HTTPS(安全DNS)。 Chrome、Edge和Firefox可以把查询发给它们自己的加密DNS服务器。这不算泄露给运营商,但它绕过了VPN的DNS,而且可能带上你的真实位置。
- 代理工具使用"系统代理"模式。 Clash、V2Ray或Shadowsocks等客户端在这种模式下往往只代理浏览器流量,系统仍在本地解析域名。
- 路由器或运营商劫持DNS。 有些运营商会拦截所有53端口的流量,由自己来应答。
怎么修复DNS泄露
从第一步开始,每做完一步就重新检测一次。
- 打开VPN的DNS泄露保护。 大多数好的VPN客户端都有"DNS泄露保护""仅使用VPN DNS"之类的选项。同时把终止开关(Kill Switch)也打开。
- 打开IPv6泄露保护,或在VPN客户端里屏蔽IPv6。原因见IPv4和IPv6的区别。
- 在VPN配置文件里设置DNS。 WireGuard在
[Interface]段里加一行DNS =。OpenVPN在Windows上使用block-outside-dns。 - 代理工具请开启TUN模式(Clash、sing-box等软件里叫TUN模式、增强模式或VPN模式),并开启它们的DNS接管功能,让所有查询都经过代理。
- 检查浏览器的安全DNS设置。 在Chrome或Edge里,路径是 设置 > 隐私和安全 > 安全 > 使用安全 DNS。要么关掉它,让浏览器使用VPN的DNS,要么设置成你信任的DNS服务器。
- 作为兜底方案,把系统DNS改成公共DNS。 这并不能解决泄露给该DNS服务器的问题,但能让运营商看不到你的查询。
然后再运行一次DNS泄露检测。想全面检查VPN,包括WebRTC和IPv6,请看怎么检测VPN是否生效。
常见问题
DNS泄露危险吗?
它暴露的是你访问了哪些网站,而不是密码或网页内容,后者仍受HTTPS保护。不过,如果你用VPN就是为了隐私,DNS泄露基本让VPN失去了大半意义。
DNS泄露会暴露我的真实IP吗?
间接会。运营商的DNS服务器能看到你的真实IP,而转发客户端子网的DNS服务器会告诉网站的DNS服务器你大概在哪里。不过网站本身无法通过DNS看到你的IP。
用1.1.1.1或8.8.8.8能防止DNS泄露吗?
不能。这只是把能看到你查询的人从运营商换成了Cloudflare或Google,查询仍然可能绕过VPN。只有让DNS走VPN才能真正堵住泄露。
为什么检测结果显示其他国家的服务器?
大型DNS服务商会从离你或离VPN服务器最近的数据中心发出查询,这个数据中心可能在邻国。看一下网络名称:如果是你的VPN服务商,或者是VPN服务器附近的大型公共DNS,那就没问题。