我正在使用的“服务器”是运行 Linux 的破解版第一代 Apple TV。
我在使用新 OpenVPN 设置时很难让 OpenVPN 性能达到我的预期。网络如下所示:
家庭 LAN 172.16.1.0/24 VPN 客户端(10.8.0.0/24)-> Airport Extreme(转发 OpenVPN 端口)-> OpenVPN 服务器(监听 OpenVPN 端口 1294)-> 家庭 iMac -> NAS Box
我使用路由,配置文件如下。路由是使用 OpenVPN 服务器上的 IP 伪装设置的,因为我无法在网关(即 Airport Extreme)上创建静态路由。请注意,在以下所有测试中,VPN 服务器上的 CPU 使用率都很低。
服务器配置:
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
我运行的测试仅使用一个 VPN 客户端。如果客户端和服务器配置中都没有 fragment 和 mssfix 行,性能会非常差,以至于我在通过两个 35Mb FiOS 连接进行 VPN 时每秒只能得到一个 VNC 帧左右。当我添加这些行时,VPN 性能有所改善,但速度仍然非常慢。
不过,我比较容易的测试案例是 SCP 性能。
- 客户端无需 VPN 即可通过 SCP 从 OpenVPN 服务器下载,速度很快(1 MBps)。
- 客户端通过 SCP 从激活 VPN 的 OpenVPN 服务器下载(使用 VPN 服务器本地 LAN IP 和端口)速度很快(1 MBps)
- 客户端通过 SCP 下载OpenVPN 服务器子网上的任何其他计算机激活 VPN 后速度极慢 (<50 KBps)。
- 客户端无需 VPN 即可通过 SCP 上传到 OpenVPN 服务器,速度很快 (>300 KBps)
- 客户端通过 SCP 上传到激活 VPN 的 OpenVPN 服务器速度很快 (>300 KBps)
- 客户端通过 SCP 上传到 OpenVPN 服务器子网上的任何其他计算机(如果已激活 VPN),速度很快(>300 KBps)
有人能建议我该怎么做吗?为什么我看到的速度差别这么大?
答案1
MTU 通常是 VPN 之间的问题。Fragment 可能会有所帮助,但您可以尝试在测试机器上降低 MTU 并进行测试 SCP。
您可能要考虑的另一件事是 NATing。对内部接口(未加密的流量)执行 TCPdump,并确保您看到的是预期的 IP。我见过一些配置错误的 NAT 和路由,它们完全降低了性能。
此外,TCPdump 还会告诉您数据包大小,这对排除故障很有帮助。
答案2
好吧,这是瞎猜:相反一般常识,我遇到过一种容易拥塞的连接(ADSL 6/0,6Mbit/s)的情况,如果 OpenVPN 流量封装在 TCP 流中而不是 UDP 数据报中,效果会更好(我应该说只有这样吗?)。
问题是由于加密流的 UDP 数据包丢失(主要原因是拥塞)导致内部 TCP 流超时。不知何故,内部 TCP 通道中的窗口缩放并没有像预期的那样起作用(它应该缩小到基本上是发送-等待-循环)。
至于诊断:安装wireshark并捕获 openvpn 流量和 lan 流量,并注意过多的 TCP 重传。这些是数据包丢失的迹象。还要查看是否存在路由问题,数据包是否出现在错误的接口上或错误的 IP 上(如 JakeRobinson 所述)。
还可以尝试将 tun-mtu 减少到 1300 等无害的值。这会影响最高速度,但不会影响您遇到问题的区域。
祝您好运,如果您找到原因请告诉我们!
答案3
搞清楚了:服务器网卡有问题,要么是硬件问题,要么是驱动程序问题。“服务器”是运行 Linux 的被破解的第一代 Apple TV,出于某种原因,内置以太网在进行伪装时表现得非常糟糕。我插入了一个 USB 千兆以太网加密狗,一切正常!
答案4
如果我理解您的配置很好的话,我认为您在服务器的配置中这一行是错误的:
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 服务器后面的网络……
当您连接到 VPN 服务器并列出您的路线时,您可以检查它...