OpenVPN 的 VPN 可以连接,但在 Linux 上无法打开某些网站,但在 Windows 上可以打开。但当我连接到我的手机网络时,一切正常

OpenVPN 的 VPN 可以连接,但在 Linux 上无法打开某些网站,但在 Windows 上可以打开。但当我连接到我的手机网络时,一切正常

你好,我遇到了与网络有关的奇怪问题。

背景:我可以在 Windows 上无任何限制地工作,但我想设置 Linux。今天我发现当我通过热点和移动网络连接到手机时,vpn 可以正常工作。但当我连接到家庭网络 wifi 时,奇怪的事情就开始了。

  1. 我成功连接到 VPN
  2. 在终端 ping 和 traceroute 工作中
  3. 我无法打开网络中的某些网站和资源。例如,我无法通过 Google 进行身份验证或打开 reddit.com
  4. 在窗户上一切正常。
  5. 我告诉了 vpn 服务器的管理员,他们对服务器上的客户端没有任何限制。

所以我创建了一个讨论在 github 上的 linux openvpn3 repo 中。有一些 traceroute、ping、iptrables 和 dns resolve 输出。总之,openvpn3 客户端工作正常,问题出在我这边。但是,正如我之前提到的,在 windows 上一切都没有问题

看来我的提供商或路由器有问题。我不知道该怎么解决。

对我的问题进行一些更新。

  • 我使用带有 6.2.0-31-generic 内核的 Ubuntu 22.04.1。
  • 嗯,这是公司提供的办公用 vpn,不支持 Linux,但如果我找到解决方案就没问题了。我告诉管理员,服务器上对 Linux 没有任何限制。
  • 我计划用直接以太网电缆进行测试
  • resolvectl dns连接到 VPN 之前:
   global: 8.8.8.8 81.95.225.252 81.95.225.253

    Link 2 (wlp0s20f3): 192.168.1.1
    Link 3 (outline-tun0):
    Link 4 (br-46c07f55586b):
    Link 5 (br-602d2c7126c0):
    Link 6 (br-97e9a873d9ef):
    Link 7 (br-ad2ab74554bb):
    Link 8 (br-b57ce470a7a5):
    Link 9 (docker0):
    Link 10 (br-366dd99965dd):

  • resolvectl dns连接到vpn后:
    Global: 8.8.8.8 81.95.225.252 81.95.225.253
    Link 2 (wlp0s20f3): 192.168.1.1
    Link 3 (outline-tun0):
    Link 4 (br-46c07f55586b):
    Link 5 (br-602d2c7126c0):
    Link 6 (br-97e9a873d9ef):
    Link 7 (br-ad2ab74554bb):
    Link 8 (br-b57ce470a7a5):
    Link 9 (docker0):
    Link 10 (br-366dd99965dd):
    Link 13 (tun0): 10.22.22.1 10.22.22.2

答案1

说到 VPN,每当我遇到“有些能用,有些不能用”的奇怪情况时,通常都是 MTU 的问题。我遇到的 Google 服务访问问题就是因为这个原因。

最大传输单元 (MTU) 是单个数据包在网络上传输时不发生碎片的最大大小。在 OpenVPN 和 Linux 环境中,了解并正确配置 MTU 对于优化网络性能和避免数据包碎片至关重要。

以下是 OpenVPN MTU 的描述以及如何在 Linux 下调整它:

  1. MTU 和数据包大小

MTU 以字节为单位,表示在不被分解成较小片段的情况下,可通过网络传输的最大数据包大小。较大的 MTU 值可实现更高效的数据传输,因为传输相同量的数据所需的数据包较少。但是,如果 MTU 设置得太高,超出了传输路径上任何网络设备的能力,则可能会发生碎片化,从而导致性能问题或数据包丢失。

  1. OpenVPN 和 MTU

OpenVPN 通过将数据封装在自己的数据包中来运行,这些数据包具有自己的 MTU。默认情况下,OpenVPN 将 MTU 设置为 1500 字节,这是以太网的标准 MTU。默认 MTU 可能并不总是适合所有网络配置,因此可能需要对其进行调整以确保最佳性能。

  1. 在 Linux 下调整 OpenVPN MTU

要在Linux下调整OpenVPN的MTU设置,您可以按照以下步骤操作:

A。客户端 MTU 设置

  • 在客户端(连接到 VPN 的计算机),您可以修改 OpenVPN 客户端配置文件(通常为 .conf 或 .ovpn)以使用 mssfix 选项设置 MTU。
  • 例如,将以下行添加到客户端配置文件:mssfix 1400 - 这会将最大段大小 (MSS) 减少到 1400 字节,从而有助于避免碎片化。

b.服务器端 MTU 设置

  • 在服务器端(VPN 服务器),您可以修改 OpenVPN 服务器配置文件,使用 tun-mtu 选项设置 MTU。
  • 例如,将以下行添加到您的服务器配置文件:tun-mtu 1400

C。路径 MTU 发现 (PMTUD)

  • 启用路径 MTU 发现 (PMTUD) 可让端点根据路径条件动态调整 MTU。您可以通过将以下行添加到 OpenVPN 服务器和客户端配置来启用此功能:fragment 1300 mssfix 1300 - 如果遇到问题,这会指示 OpenVPN 尝试将 MTU 减少到 1300 字节。

d.测试和调整

  • 测试特定网络条件下的 MTU 设置非常重要。从保守值(例如 1400)开始,然后逐渐增加该值,同时监控是否存在任何问题。

e.故障排除

  • 如果问题仍然存在,请考虑检查网络路径上的网络设备、防火墙或路由器,它们可能存在 MTU 限制。如有必要,请调整这些设备上的 MTU。

通过调整 OpenVPN 配置中的 MTU 设置,您可以针对特定网络环境优化 VPN 连接并减少与数据包碎片和丢失相关的潜在问题。


不常见的可能原因:您的家庭网络提供 IPv6 连接,而您的 VPN 不提供。

答案2

我遇到了完全相同的问题。有一天,这个问题突然出现了。通过我的测试,我得出结论,问题出在 Ubuntu 上使用 Wireguard 或 OpenVPN 的 UDP 流量上。我的 VPN 提供商建议尝试以下方法之一(他们解决了这个问题):

  1. 降低 MTU/MSS。
  2. 使用 TCP。
  3. 使用 WireGuard 混淆。

相关内容