12月 032010
 

August 24, 2010 by LostRiver

        使用OpenVPN一段时间,发现Windows客户端速度一直远小于Linux客户端。我的网络环境两边都是百兆 IPv6共享接入服务端是OpenVZ VPS。linux下客户端和服务端单个TCP连接速度在500KB/s上下波动,通过OpenVPN后速度差别不大。未优化时,Windows下速度明显降低,全局下载带宽只能到100KB/s左右。优化后部分问题能够得到明显改善。

        OpenVPN有TCP和UDP两种连接方式,虽然OpenVPN over TCP不被推荐。
优化Windows TCP接收窗口(RWIN)

        作用有二,优化运行于OpenVPN上的TCP连接,在使用TCP模式时优化OpenVPN所使用的TCP连接。这里Vista/Win7无需优化。

        Windows下情况有些复杂,对于IPv6 TCP,Vista/Win7没有问题但之前版本Windows处理得很不好。首先Windows Server 2003系统下有个BUG,见KB966321,简单说被动打开的TCP连接接收窗口大小固定为16384且不随注册表项相应的设定值影响。我发现XP情况更坏,所有IPv6 TCP连接窗口大小都固定为最大44800,在我这里260ms的RTT下,单IPv6 TCP连接的带宽最大只有约160KB/s,该问题尚未解决。微软并未发布Win32 XP平台的补丁。 Continue reading »

12月 032010
 

前一段时间参照这篇在Ubuntu上搭建OpenVPN服务器,并配合Mac和Windows的客户端 (一)在自己的 VPS 上装好 OpenVPN 服务器后使用一直不太正常,这两天花了点时间调试解决,结果总结如下。调试期间多次得到 @yegle @ChandleWEi @Greendamn 和 @FretiaX 等推友的帮助,尤其是 @ChandleWEi 深夜还在我家现场调试 iptables,特此感谢。

MTU 太大造成的连接不稳定

症状
刚连接上 OpenVPN 只用浏览器打开一两个页面时速度很正常,但随着流量加大网络就会开始阻塞,直到完全无法连接任何服务器。而且与 OpenVPN 服务器之间的连接容易自动断开。

解决方案
在 OpenVPN 服务器的 server.conf 里加入 mssfix 1300。此方案由 @yegle 提供。数字应该是他多次测试得出的较优选择,我试过设为 mssfix 1400 自己的 PC 没问题,而朋友的机器会速度奇慢。

DNS 污染造成的部分墙外网站无法访问

症状
连接 OpenVPN 后 Twitter 可以正常访问,被严重 DNS 污染的 Facebook 则会被浏览器提示无法连接。

解决方案
在 OpenVPN 服务器上使用 iptables 强行劫持客户端对任何 DNS 服务器的查询请求,将请求的目标 IP 地址修改为墙外的 DNS 服务器,例如 Google 的公共 DNS 服务器 8.8.8.8 和 8.8.4.4。此方案参照 @yegle 的方案稍作修改,不需要 OpenVPN 服务器自己提供 DNS 服务。iptables 命令如下:

iptables -t nat -A PREROUTING -p udp –dport 53 -j DNAT –to-destination 8.8.8.8 Continue reading »

12月 032010
 

作者:fqvpn

之前有一个用户抱怨说OpenVPN 不稳定,不定时的断,而且断了之后还不能自动重新连上。 经过调试发现是客户端配置文件中的persist-tun 配置项的问题。 OpenVPN 手册中的说明如下

–persist-tun
Don’t close and reopen TUN/TAP device or run up/down scripts across SIGUSR1 or –ping-restart restarts.

SIGUSR1 is a restart signal similar to SIGHUP, but which offers finer-grained control over reset options.

Windows 下面的客户端如果指定了这个配置项,会导致断线之后 (比如承载OpenVPN 的实际网络比如Wifi或者PPPoE断线)。
断线之后服务器端在一段时候内没有收到客户端的Keep-Alive 包, 认为客户端断线,中断连线。
当网络恢复的时候,客户端发现服务器端没有响应了(因为服务器关闭连接了), 重启自己的进程。 当有 persist-tun 选项时,它会重用之前的TUN/TAP 设备, 但是很奇怪它没有取重新认证,然后就一直卡在哪里,托盘图标一直时黄色的。 将persisit-tun 选项去掉之后,就能马上自动连上了。

12月 012010
 

2010-10-24

笔者(66ip.com)在实践中遇到OPENVPN变慢,以及掉包的现像.在网络上也有许多人询问,但多无明确的答复.现根据研究略作分析.

1 为什么会掉包?
根本原因是由于网络连接质量较差.
当ICMP报文封装成IP数据报,再封装成帧在网络上传输时,由于帧的丢失导致掉包.

2 为什么将UDP改成TCP掉包会减少?
网上许多人答复掉包的解决方案是换用TCP协议.在下测试时,发现换用TCP协议的确使掉包减少了。
原因分析:
ICMP报文封装成IP数据报,此数据报传输在虚拟的VPN线路上。
当OPENVPN使用UDP协议时,虚拟的VPN线路是基于UDP协议的,ICMP本身并无什么差错控制功能,UDP也是一个无连接、不可靠的协议,所以线路质量不佳时就易表现为掉包。
当OPENVPN改用TCP协议时,虚拟的VPN线路是基于TCP协议的,TCP协议是有连接的、可靠的协议,有较强的差错控制、流量控制、拥塞控制功能,故虽然也会有帧丢失,但TCP协议本身进行了对出错的TCP报文段进行了重发,故掉包会得到抑制。

3 为什么UDP改成TCP后PING值会增加,下载速度会减慢?
经66ip.com测试,UDP改成TCP后,使得ping值严重增加,此时测试下载速度会较使用UDP协议有很大的下降.
原因分析:
改用TCP后,与使用UDP相比,丢帧的程度是差不多的,TCP以大量的重发来弥补丢帧,所以PING值会增加,下载速度会减慢。非常有趣的是,PING值会表现得很不稳定。

4 将UDP协议改成TCP是解决掉包的好主意吗?
不是. Continue reading »