为了有效提供用户隐私和安全性,VPN应用程序必须确保用户的DNS请求在与VPN的连接的整个持续时间内保持私有。应用程序通常通过保证所有DNS请求通过VPN隧道加密发送并由VPN提供商的DNS服务器处理。
为了保持这一保证,了解在什么情况下可能会发生DNS泄漏。仅考虑简单的场景,例如当网络连接稳定时,是不够的。在现实世界中,网络通常是不稳定的,或者它们的配置可以改变,一般来说,这是当泄漏发生时。因此,对复杂场景进行调查是设计防漏VPN应用程序过程的关键部分。
在ExpressVPN,我们花费大量的时间和精力调查您的VPN应用程序可能泄漏的复杂场景。在本文的其余部分中,我们将讨论我们发现DNS泄漏可能发生的一个特定场景。我们将解释如何以及为什么发生DNS泄漏,并为您提供一种自己测试漏洞的方法。
场景:网络接口切换后DNS泄漏
在网络接口之间切换是DNS泄漏可能的常见情况。请考虑以下示例:
- 你在家里和你的笔记本电脑连接到Wi-Fi
- 您连接到VPN应用程序
- 稍后,您可以插入以太网电缆
大多数VPN应用程序将不会检测到此网络配置更改。他们将继续通知您,您的隐私和安全性仍然受到100%的保护,但现实情况可能会有很大的不同。
在封面下,您的DNS请求可能会持续泄露给您的ISP或其他第三方,您可能永远都不知道。
技术细分
什么时候可以真的发生?
我们来看一个Mac的例子(不过请注意,这个漏洞也会发生在Windows设备上)。假设您有Wi-Fi和以太网连接可用。打开“系统偏好设置”应用程序并导航到“网络”。您将看到如下所示:
这表示您已连接到Wi-Fi和以太网,但以太网是您首选的连接。
假设您的DNS进入“本地”IP地址。当您的以太网连接突出显示,然后导航到“DNS”时,您可以点击“高级”来检查。您应该看到如下:
如果“DNS服务器”下的IP地址为10.xxx,192.168.xx或172.16.xx和172.31.xx之间的IP地址,则为“本地”IP地址。这很可能意味着您的路由器充当您的DNS服务器,因此,没有VPN,您的ISP可以看到您的所有DNS请求。如果您有这样的设置,那么您可能会容易受到此DNS泄漏的攻击。
请注意,即使您的DNS服务器没有本地IP地址,您仍然可能会遇到DNS泄漏漏洞。在这种情况下,DNS请求可以通过VPN隧道。但是,它们不会被路由到VPN的服务器,而是路由到其他DNS服务器,如ISP或第三方DNS提供商。
你如何检查你是否泄漏?
最简单的方法是使用ExpressVPN的DNS泄漏工具,并执行以下操作:
- 确保您的以太网电缆已拔下
- 确保您已连接到Wi-Fi网络
- 连接您的VPN应用程序
- 使用ExpressVPN的DNS泄漏测试仪或第三方测试仪
- 您应该看到只列出一个DNS服务器
- 如果您使用ExpressVPN,那么我们的测试人员也会告诉您,它是我们公认的服务器
- 插入以太网电缆
- 刷新DNS泄漏页面。如果您正在泄漏DNS,那么您现在将看到不同的DNS服务器列表
您还可以通过使用tcpdump检查DNS泄漏,而不依赖于我们的网页,如下所示。
首先,找到与您的以太网连接对应的网络接口:
- 打开一个终端窗口
- 键入networksetup -listallhardwareports
- 寻找像“硬件端口:Thunderbolt以太网”一样的行,例如
- 您的以太网连接的网络接口显示在“设备”旁边。在此示例中为en4
现在,我们来运行测试:
- 确保您的以太网电缆已拔下
- 通过Wi-Fi连接您的VPN应用程序
- 插入以太网电缆
- 打开一个终端窗口
- 键入sudo tcpdump -i en4 port 53并输入您的密码
- sudo给tcpdump捕获网络流量所需的权限
- -i en4告诉tcpdump在以太网接口上监听
- 用你以前发现的界面替换en4
- 端口53是用于DNS流量的端口,因此仅显示DNS请求
- 如果您看到任何流量,那么您有DNS泄漏,例如
这里实际发生了什么?
这种泄漏的根本原因在于操作系统如何确定要使用的DNS服务器。系统使用的DNS服务器始终是与最高优先级的主动网络服务相关联的DNS服务器,这对应于上图中列表顶部的绿色服务。
禁用以太网时,将接收DNS查询的服务器是与Wi-Fi服务相关联的服务器,因为它现在是最高优先级的主动网络服务。当您连接到VPN时也是如此。要正确地将您的DNS流量发送到VPN的DNS服务器,大多数VPN提供商将最高优先级接口上的DNS服务器更改为自己的DNS服务器。在这种情况下,这意味着它们会更改与Wi-Fi网络服务相关联的DNS服务器。
当您插入以太网电缆时,以太网网络服务将跳回到活动列表的顶部,因为它现在是最高优先级的网络服务。然后,操作系统将尝试使用与该服务相关联的DNS服务器进行任何DNS查找。
许多VPN应用程序不会注意到这个问题,因为您的Wi-Fi网络仍然运行 - 它从未中断。然而,当他们可能通过Wi-Fi网络发送您的数据加密时,您的DNS请求将被不加密地发送到您的ISP。
如果您的VPN应用程序无法防范此情况,则意味着您的DNS请求将泄漏到您的ISP的隧道之外。
检查终端中的DNS名称服务器
作为附注,您可以使用scutil命令自己调查DNS服务器的行为。要查看系统正在使用的DNS服务器:
- 打开一个终端窗口
- 键入scutil --dns
- 在输出的顶部,您应该看到具有“名称服务器”列表的“解析器#1”,例如
- 每个“名称服务器”旁边的IP地址指示系统将用于DNS请求的内容