OpenVPN的性能可怕的服务器的子网上的其他机器

我正在使用一台运行Linux的第一代Apple TV的“服务器”。

我在OpenVPN性能方面遇到了很多麻烦,而这正是我所期望的新的OpenVPN设置。 networking看起来像这样:

Home局域网172.16.1.0/24 VPN客户端(10.8.0.0/24) – > Airport Extreme(转发OpenVPN端口) – > OpenVPN服务器(在OpenVPN端口1294上收听) – > Home iMac – > NAS Box

我正在使用路由,使用以下configuration文件。 路由是在OpenVPN服务器上使用IP Masquerading设置的,因为我无法在我的网关(这是一个Airport Extreme)上创build静态路由)。 请注意,在下面的所有testing中,VPN服务器上的CPU使用率是最小的。

服务器configuration:

port 1294 proto udp dev tun ca privnet/ca.crt cert privnet/server.crt key privnet/server.key dh privnet/dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 comp-lzo user nobody group nobody persist-key persist-tun status openvpn-status.log verb 4 script-security 2 push "route 172.16.1.0 255.255.255.0" topology subnet route 192.168.163.0 255.255.255.0 10.8.0.2 tun-mtu 1500 fragment 1000 mssfix 

我正在运行的testing只使用一个VPN客户端。 没有客户端和服务器configuration中的fragment和mssfix行,性能非常糟糕,以至于在跨两个35Mb FiOS连接进行VPN连接时,我每秒获得一个VNC帧。 当我添加这些线路时,VPN性能得到改善,但仍然非常缓慢。

我更容易的testing案例是SCP性能。

  • 客户端通过SCP从没有VPN的OpenVPN服务器上下载的速度很快(1 MBps)。
  • 客户端通过SCP从OpenVPN服务器上下载VPN(使用VPN服务器的本地局域网IP和端口)是快速的(1 MBps)
  • 客户端在OpenVPN服务器的子网通过SCP从任何其他计算机上下载,激活VPN非常慢(<50 KBps)。
  • 客户端通过SCP上传到没有VPN的OpenVPN服务器很快(> 300 KBps)
  • 客户端通过SCP上传到启动了VPN的OpenVPN服务器是快速的(> 300 KBps)
  • 客户端通过SCP上传到OpenVPN服务器子网上的任何其他计算机上,激活的VPN速度很快(> 300 KBps)

任何人都可以build议做什么,为什么我看到这些巨大不同的速度?

MTU通常是VPN中的问题。 碎片可能会有所帮助,但是您可以尝试降低testing机器上的MTU并testingSCP。

另一件你可能会看到的是NAT。 在内部接口(未encryption的stream量)上执行TCP转储,并确保您看到您期望的IP。 我已经看到一些错误configuration的NAT和路由,这些完全无法实现的性能。

此外,TCPdump会告诉你数据包大小,这是很好的排除故障。

那么这是在黑暗中的一个镜头:与传统的智慧相反,我有一个容易拥塞的连接(ADSL 6 / 0,6Mbit / s),如果OpenVPNstream量封装在一个更好的工作情况TCPstream,而不是UDP数据报。

问题在于内部TCPstream的超时因encryptionstream的UDP数据包丢失(拥塞是主要来源)而发生。 不知怎的,内部TCP通道中的窗口缩放并没有像预期的那样有帮助(它应该缩减为基本的发送 – 等待 – 周期)。

至于诊断:安装wireshark并捕获openvpnstream量和lanstream量,并注意过多的TCP重新传输。 这些是丢包的迹象。 也看看是否有一些路由问题出现在错误的接口或错误的IP(如杰克罗宾逊指出)。

还要尽量把tun-mtu减less到像1300这样无辜的东西。这会伤害到最高速度,但是不会在你遇到问题的地区。

祝你好运,让我们知道,如果你找出原因!

想通了:这是一个问题,无论是硬件或驱动程序,与服务器上的网卡。 “服务器”是运行Linux的第一代Apple TV,由于某种原因,内置的以太网在伪装时performance不佳。 我插入了一个USB千兆以太网encryption狗,一切都很好!

如果我理解你的configuration,我认为,你在服务器的configuration中有这样一行:

 push "route 172.16.1.0 255.255.255.0" 

这条线是服务器发送给客户端的指令,到子网172.16.1.0/24的路由是通过VPN服务器,这是不对的,不是吗?

其次,我认为你必须在服务器的这一行中设置这一行:

 push "route 192.168.163.0 255.255.255.0" 

因为这是VPN服务器背后的networking…

你可以检查它,当你连接到VPN服务器,并列出你的路线…