DNS泄漏(产生的原因和修复办法)

浏览器使用域名系统(DNS)来弥补互联网IP地址(数字)和网站域名(文字)之间的差距。

当输入一个网站名称时,它首先被发送到DNS服务器,在那里域名与相关的IP地址相匹配,这样请求就可以转发到正确的计算机上。

这对于隐私来说是一个巨大的问题,因为所有标准的互联网流量都必须通过一个DNS服务器,在那里发送者和目的地都会被记录下来。这也是翻墙软件科学上网工具面临的一大考验。

该DNS服务器通常属于用户的ISP,并受国家法律的管辖。例如,在英国,ISP掌握的信息必须按要求交给执法部门。类似的情况也发生在美国,但ISP可以选择将数据卖给营销公司。

虽然用户的本地电脑和远程网站之间的通信内容可以用SSL/TLS加密(在URL中显示为’https’),但发送者和接收者的地址却无法加密。因此,每一个被访问的目的地都会被合法(或犯罪)访问DNS日志的人知道–也就是说,在正常情况下,用户对他在互联网上的去向没有任何隐私。

VPN的设计就是为了解决这个问题,在用户的电脑和目的地网站之间建立一个间隙。但它们并不总是完美地工作。一系列的问题意味着在某些情况下,DNS数据可能会泄露回ISP,从而进入政府和营销公司的权限。

这些问题被称为DNS泄漏。为了讨论DNS泄漏,我们将主要假设你的VPN使用最常见的VPN协议以及翻墙软件,OpenVPN。

什么是DNS泄漏?

VPN在你的电脑和VPN服务器之间建立一个加密的连接(通常称为 “隧道”);VPN服务器将你的请求发送到所需的网站上。如果VPN工作正常,你的ISP将看到的是你正在连接到一个VPN – 它不能看到VPN连接你的地方。互联网窥探者(政府或犯罪)无法看到任何内容,因为它是加密的。

当发生一些非预期的事情时,就会发生DNS泄漏,VPN服务器被绕过或被忽略。在这种情况下,DNS服务器运营商(通常是你的ISP)将看到你在互联网上的位置,而你认为他不能。

这是一个坏消息,因为它违背了使用VPN的目的。你的网络流量的内容仍然是隐藏的(通过VPN的加密),但最重要的匿名部分 – 你的位置和浏览数据 – 是不受保护的,很可能被你的ISP记录。

如何判断我的VPN是否有DNS泄漏?

对于检测DNS泄漏,有好消息也有坏消息。好消息是,检查你的VPN是否泄漏你的DNS请求是快速。坏消息是,如果不检查,你不太可能永远知道泄漏,直到它为时已晚。

有许多浏览器内的工具来测试你的VPN是否有DNS或其他形式的数据泄漏,包括一些由VPN提供商制作的,如AirVPN(审查)或VPN.ac。如果你不确定该怎么做,你可以简单地去ipleak.net,而你相信你的VPN是运作的。这个网站会自动检查DNS泄漏(顺便说一句,还提供了更多信息)。

  • 1.在浏览器的地址栏中输入ipleak.net。
  • 2.网页加载后,测试自动开始,你会看到一个IP地址。
  • 3.如果你看到的地址是你的IP地址,并显示你的位置,而你使用的是VPN,这意味着你有一个DNS泄漏。如果显示的是你的VPN的IP地址,那么说明你的VPN工作正常。

如果可能的话,最好用多个在线检查器进行测试。

图1显示了ipleak.net与一个配置不好的VPN一起使用。它返回的是正确的IP地址。这是一个DNS泄漏。

你的IP地址

ipleak与ExpressVPN配置使用比利时服务器(ExpressVPN让你从一系列不同的国家选择)。没有明显的DNS泄漏。

你的IP地址

对于大多数用户来说,在继续浏览其他网站之前执行这个检查就足够了。对于一些用户来说,这不会是一个完美的解决方案,因为它需要你连接到互联网并发送DNS请求来访问检查工具。

虽然这需要你知道自己的IP地址和如何使用Windows命令提示符,但不使用这些网站也可以测试DNS和其他泄漏,它还需要一个可信的测试服务器供你直接 “ping”;这可能是一个你知道和信任的私人服务器,或以下公共测试服务器之一。

  • Whoami.akamai.net
  • resolver.dnscrypt.org
  • Whoami.fluffcomputing.com
  • whoami.utladns.net

要做到这一点,打开命令提示符(进入开始菜单,键入 “cmd “并按下Enter键),然后输入以下文本。

ping [服务器名称] -n 1

将[服务器名称]替换为你选择的测试服务器的地址(例如 “ping whoami.akamai.net -n 1″),然后按Enter键。如果在结果文本中发现的任何一个IP地址与你的个人或本地IP相匹配,那就说明存在DNS泄漏,应该只显示你的VPN的IP地址。

图3显示的是ExpressVPN运行时的结果。请注意,唯一返回的IP地址是比利时的IP,如图2所示。没有明显的DNS泄漏。

FREEDOME

如果你发现你的VPN有DNS泄漏,那就应该停止浏览,直到你能找到原因并解决这个问题。下面列出了一些最可能导致DNS泄漏的原因及其解决方案。

DNS泄漏问题和解决方案

问题1:网络配置不当

对于通过不同网络连接互联网的用户来说,这是最常见的DNS泄漏原因之一;例如,有人经常在家里的路由器、咖啡店的WiFi和公共热点之间切换。在连接到VPN的加密隧道之前,你的设备必须首先连接到本地网络。

如果没有适当的设置,你可能会让自己的数据泄露。当连接到任何新的网络时,DHCP设置(确定你的机器在网络中的IP地址的协议)可以自动分配一个DNS服务器来处理你的查找请求 – 一个可能属于ISP,或一个可能没有适当的安全。即使你在这个网络上连接到你的VPN,你的DNS请求也会绕过加密隧道,导致DNS泄漏。

修复方法。

在大多数情况下,在电脑上配置你的VPN,使用VPN提供的DNS服务器或首选的DNS服务器,将迫使DNS请求通过VPN,而不是直接从本地网络。但并非所有的VPN提供商都有自己的DNS服务器,在这种情况下,使用独立的DNS服务器,如OpenDNS或谷歌公共DNS应该允许DNS请求通过VPN而不是直接从你的客户端机器。不幸的是,以这种方式改变配置在很大程度上取决于你的特定VPN提供商和你使用的协议 – 你可能可以设置他们自动连接到正确的DNS服务器,无论你连接到哪个本地网络; 或者你可能不得不手动连接到你的首选服务器每次。查看你的VPN客户端的支持,了解具体说明。

如果你必须手动配置你的计算机使用选择的独立DNS服务器,你可以在下面的 “更改你的设置到一个值得信赖的,独立的DNS服务器 “部分找到逐步说明。

问题#2:IPv6

通常,当你想到IP地址时,你会想到一个由4组最多3位数字组成的32位代码,如123.123.123.123(如上所述)。这就是IP版本4(IPv4),目前最常见的IP地址形式。然而,可用的未使用的IPv4地址池正在变得非常小,IPv4正在被IPv6取代(非常缓慢)。

IPv6地址由8组4个字符组成,可以是字母或数字,如2001:0db8:85a3:0000:0000:8a2e:0370:7334。

互联网仍处于IPv4和IPv6之间的过渡阶段。这造成了很多问题,尤其是对VPN而言。除非VPN明确支持IPv6,否则任何通过IPv6发送的请求或从你的机器发送的请求–或使用双栈隧道将IPv4转换为IPv6(见下文Teredo)–将完全绕过VPN隧道,使你的个人数据不受保护。简而言之,IPv6可以在你不知不觉中破坏你的VPN。

大多数网站都有IPv6地址和IPv4地址,尽管有相当多的网站仍然是IPv4-only。也有一些网站只使用IPv6。你的DNS请求是IPv4还是IPv6地址,通常取决于你的ISP、你的网络设备(如无线路由器)和你试图访问的特定网站(由于IPv6的实施仍未完成,并非所有用户都能访问仅有IPv6的网站)。大多数DNS查询仍将是IPv4,但如果用户能够同时进行IPv4或IPv6请求,大多数用户将不知道自己是在进行IPv4还是IPv6请求。

罗马萨皮恩扎大学和伦敦玛丽女王大学的研究人员在2015年对14家商业VPN提供商进行了研究,发现其中10家提供商–比例高得令人不安–存在IPv6泄露的情况。

  • HideMyAss
  • IPVanish
  • Astrill
  • ExpressVPN
  • StrongVPN
  • PureVPN
  • AirVPN
  • Tunnelbear
  • ProXPN
  • Hotspot Shield Elite

虽然严格来说,IPv6泄漏与标准的DNS泄漏并不一样,但它对隐私的影响大同小异。这是任何VPN用户都应该注意的问题。

修复方法

如果你的VPN供应商已经完全支持IPv6流量,那么这种泄漏不应该是一个问题。一些不支持IPv6的VPN反而会有阻止IPv6流量的选项。在任何情况下,我们都建议选择支持IPv6的VPN,因为双栈隧道仍然可以绕过IPv6阻挡。(见下面的Teredo。)不幸的是,大多数VPN都没有为IPv6做准备,因此总是会泄漏IPv6流量。确保你知道在使用商业VPN之前,他们是否有IPv6的规定,并只选择一个有完整的协议支持。

问题#3:透明的DNS代理

一些ISP采取的政策是,如果用户改变设置使用第三方服务器,就会强行将自己的DNS服务器纳入其中。如果检测到DNS设置的变化,ISP将使用透明代理–一个单独的服务器,拦截和重定向网络流量–以确保你的DNS请求被发送到他们自己的DNS服务器。这实际上是ISP “强迫 “DNS泄漏,并试图对用户进行掩饰。大多数DNS泄漏检测工具将能够以与标准泄漏相同的方式检测透明DNS代理。

修复方法

幸运的是,最近版本的OpenVPN协议有一个简单的方法来打击透明的DNS代理。首先,找到你想连接到的服务器的.conf或.ovpn文件(这些文件存储在本地,通常在C:\Program FilesOpenVPNconfig中;更多细节请参见OpenVPN手册),在文本编辑器(如记事本)中打开,并添加这行。

block-outside-dns

旧版本的OpenVPN用户应该更新到最新的OpenVPN版本。如果你的VPN提供商不支持这个功能,可能是时候寻找一个更新的VPN了。除了OpenVPN的修复,很多做得比较好的VPN客户端都会有自己内置的对抗透明DNS代理的规定。请参考你的VPN的支持以获得进一步的细节。

问题#4:Windows 8、8.1或10的不安全 “功能”

从8开始的Windows操作系统已经引入了 “智能多域名解析 “功能,旨在提高网页浏览速度。这将向所有可用的DNS服务器发送所有的DNS请求。原本,只有在收藏夹(通常是ISP自己的服务器或用户设置的服务器)未能响应时,才会接受非标准DNS服务器的响应。这对于VPN用户来说已经很糟糕了,因为这大大增加了DNS泄漏的发生率,但从Windows 10开始,这个功能默认会接受哪个DNS服务器响应最快的响应。这不仅同样存在DNS泄露的问题,而且还让用户容易受到DNS欺骗攻击。

修复方法

这可能是最难修复的一种DNS泄漏,尤其是在Windows 10中,因为它是Windows的内置部分,几乎不可能改变。对于使用OpenVPN协议的VPN用户来说,一个免费提供的开源插件(可在这里获得)可能是最好最可靠的解决方案。

可以在Windows的本地组策略编辑器中手动关闭智能多家园名称解析,除非你使用的是Windows的家庭版。在这种情况下,微软根本不允许你选择关闭这个功能。即使你能够通过这种方式将其关闭,在第一台服务器无法响应的情况下,Windows仍然会将请求发送到所有可用的服务器。强烈建议使用OpenVPN插件来完全解决这个问题。

在这里查看US-CERT的指南可能也会有所帮助。Smart Multi-Homed Name Resolution有如此重大的安全问题,以至于政府机构对这个问题发出了自己的警告。

问题#5:Teredo

Teredo是微软提高IPv4和IPv6兼容性的技术,是Windows操作系统的一个内置功能。对于一些人来说,这是一项必不可少的过渡技术,它可以让IPv4和IPv6共存而不出现问题,使v6地址能够在v4连接上被发送、接收和理解。对于VPN用户来说,它更重要的是一个明显的安全漏洞。由于Teredo是一个隧道协议,它往往可以优先于你的VPN自身的加密隧道,绕过它,从而造成DNS泄漏。

修复方法。

幸运的是,Teredo是一个很容易从Windows中禁用的功能。打开命令提示符并键入

netsh interface teredo set state disabled

虽然在连接到某些网站或服务器或使用torrent应用程序时可能会遇到一些问题,但禁用Teredo是VPN用户更安全的选择。还建议在路由器或网络适配器的设置中关闭Teredo和其他IPv6选项,以确保没有流量可以绕过你的VPN的隧道。

防止未来的泄漏

现在,你已经测试了DNS泄漏,并且要么是干净的,要么是发现并补救了一个泄漏,现在是时候研究如何最大限度地减少你的VPN在未来出现泄漏的机会。

首先,确保以上所有的修复措施都已经提前进行,禁用Teredo和智能多域名解析,确保你的VPN支持或阻止IPv6流量,等等。

1. 更改设置到一个可信任的独立DNS服务器

你的路由器或网络适配器应该有一个改变TCP/IP设置的方法,你可以通过IP地址指定特定的受信任的DNS服务器。许多VPN提供商会有自己的DNS服务器,使用VPN通常会自动将你连接到这些服务器;查看你的VPN的支持以获得更多信息。

如果你的VPN没有专有服务器,一个流行的替代方案是使用开放的第三方DNS服务器,如谷歌开放DNS。要在Windows 10中更改你的DNS设置。

  • 1.进入你的控制面板
  • 2.点击 “网络和互联网”
  • 3.点击 “网络与共享中心”
  • 4.点击左侧面板上的 “更改适配器设置”。
  • 5.右键点击网络图标,选择 “属性”
  • 6.在打开的窗口中找到 “Internet协议版本4″;点击它,然后点击 “属性”
  • 7.点击 “使用以下DNS服务器地址”

现在你可以为DNS服务器输入首选和备选地址。这可以是任何你想要的服务器,但是对于Google Open DNS来说,首选的DNS服务器应该是8.8.8.8,而备选的DNS服务器应该是8.8.4.4。

设置windows的DNS

你可能还希望改变你的路由器上的DNS设置 – 请参阅你的手册或支持你的特定设备的进一步信息。

2. 使用防火墙或你的VPN来阻止非VPN流量

一些VPN客户端将包括一个功能,自动阻止任何不通过VPN的流量 – 寻找 “IP绑定 “选项。如果你还没有VPN,可以考虑从这里购买一个中国最佳VPN

或者,你可以配置你的防火墙,只允许通过VPN进出的流量。你也可以改变你的Windows防火墙设置。

  • 1.确保你已经连接到你的VPN。
  • 2.打开 “网络和共享中心”,确保你可以看到你的ISP连接(应该显示为 “网络”)和你的VPN(应该显示为VPN的名称)。”网络 “应该是家庭网络,而你的VPN应该是公共网络。如果它们中的任何一个被设置为不同的东西,你需要点击它们,并在打开的窗口中将它们设置为适当的网络类型。
  • 3.确保你在机器上以管理员身份登录,并打开Windows防火墙设置(具体步骤根据你运行的Windows版本不同而不同)。
  • 4.点击 “高级设置”(见图5)。
  • 5.在左侧面板上找到 “入站规则 “并点击它。
  • 6.在右侧面板的 “操作 “下,你应该看到一个 “新规则… “的选项。点击这个选项。
  • 7.在新窗口中,选择 “程序”,然后点击 “下一步”。
  • 8.选择 “所有程序”(或选择要阻止非VPN流量的单个程序),点击 “下一步”。
  • 9.选择 “阻止连接 “并点击 “下一步”。
  • 10.勾选 “域 “和 “私有”,但确保 “公开 “没有被勾选。点击 “下一步”。
  • 11.你应该回到Windows防火墙的 “高级设置 “菜单中;找到 “出站规则”,重复步骤6到10。
Windows防火墙

3. 定期进行DNS泄漏测试

请参考上面 “如何判断我的VPN是否有DNS泄漏?”一节的说明。预防不是铁板钉钉的,重要的是要经常检查你所有的预防措施仍在坚持。

4. 考虑VPN “监控 “软件

这可能会在你现有的VPN订阅基础上增加额外的费用,但实时监控VPN流量的能力将使你能够一目了然地看到DNS检查是否进入了错误的服务器。一些VPN监控产品还提供额外的,自动修复DNS泄漏的工具。

5. 如有必要,更改你的VPN

你需要最大可能的隐私。理想的VPN将具有内置的DNS泄漏保护,完全的IPv6兼容性,支持最新版本的OpenVPN或你选择的协议,并具有对抗透明DNS代理的功能。尝试本站的深入比较和评论,以找到VPN,提供一切你需要保持你的浏览数据的隐私。