用户尝试在我们的远程站点连接到他的 VPN。他使用 Windows 7 和拆分隧道 VPN,之前多次连接都没有问题。他成功连接但没有 DNS。我尝试重新启动计算机,更新 IP 地址(w ipconfig /renew、ipconfig /release),刷新 DNS,但没有任何效果。我退出 Wireshark,没有看到任何异常,尽管我想知道我是否未能捕获其中一个 DNS 故障。
我无法 100% 地确认问题出在我们这边,但用户回家后启动电脑,一切正常。再回来后一切又恢复正常。因此,我的问题分为两部分:
可能的原因是什么?如果再次发生这种情况我该怎么办?
对于可能的原因,我怀疑是 Comcast DNS 和我的 Sonicwall TZ210 防火墙,按顺序。我的 Sonicwall 不会干扰他的 VPN,但我想知道它是否会将他的 DNS 请求错误地定向到 VPN。Comcast 可能会做同样的事情,这对我来说似乎更有可能。错误出在用户办公室的 VPN 客户端上的可能性很小,但在我看来不太可能。
如果再次发生这种情况该怎么办,我目前的想法是:让他在防火墙外短暂运行,看看是否能解决问题。使用另一个 DNS 提供商(我认为 Google 的 DNS 是 8.8.8.8)。使用 netsh 重建他的 TCP/IP 堆栈(这真的是个好主意吗?)。
欢迎任何建议或只是验证。
答案1
我发现,由于 DNS 服务器无法解析地址时不会发送错误,因此分割隧道出现了问题。
我对分割隧道的理解是,VPN 驱动程序首先将 DNS 查询定向到隧道的一侧。如果查询失败,则切换到隧道的另一侧并重试。
我见过的问题发生在 VPN 驱动程序首先尝试隧道的本地端,而用户的 DNS 服务器没有正确返回错误代码时。这种情况现在更常见,因为许多 ISP 都试图提供友好的 DNS 服务,如果查询无法解析,它们不会返回 DNS 错误,而是返回搜索页面。这在浏览器中很好,但会破坏分离隧道 VPN。VPN 驱动程序认为响应意味着用户正在寻找的资源位于隧道的本地端,因此它永远不会检查 VPN 端。
一种解决方案是更改为 Google 的 DNS,它确实可以正确报告错误。
另一个解决方案是切换 VPN 驱动程序中的查找顺序。假设您控制隧道 VPN 端的 DNS,并确保其正常运行。如果 VPN 驱动程序无法在隧道 VPN 端获得 DNS 解析,则它将切换回本地端。