用linode主机搭建的pptp的vpn,北京联通一直存在可以链接上,只能偶尔上个百度,其他的网站基本打不开,更不要说翻墙看世界了。由于使用移动网络链接VPN没有任何问题,百度北京联通 pptp很多反馈说 联通屏蔽了pptp协议的VPN,最近无意中看到一个VPN优化上网慢问题的文章,尝试了一下,奇迹出现了。
优化很简单,在iptables中增加一个规则即可:
/sbin/iptables -I FORWARD -p tcp –syn -i ppp+ -j TCPMSS –set-mss 1356
原因分析
=====在断开vpn链接的情况下:
在windowsXP下用ping -f -l XXXXXX 192.168.0.1一步一步测试(XXXXXXX为MTU大小,可以从1500开始,逐渐减小,知道可以ping通)
我们可以得到可以ping通的MTU最大为1426;
=====在连接vpn的前提下
在windowsXP下用ping -f -l XXXXXX 192.168.0.1一步一步测试(XXXXXXX为MTU大小,可以从1500开始,逐渐减小,知道可以ping通)
我们可以得到可以ping通的MTU最大为1372; 超过这个数则不能通,
====拨通vpn,在服务器上用netstat –i查看接口,得到
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 102528561 0 0 0 194391413 0 0 0 BRU
eth1 1500 0 519820535 954 11553 924 208798037 0 0 0 BRU
lo 16436 0 151062 0 0 0 151062 0 0 0 LRU
ppp0 1396 0 19 0 0 0 8 0 0 0 OPRU 可知ppp的最大mtu为1396,当然,对应的mss应为(mtu-20字节的IP头部+20字节的TCP 头部=)1356 【小知识1】计算机网络中的MSS:
MSS: Maximum Segment Size 最大分段大小
MSS最大传输大小的缩写,是TCP协议里面的一个概念。
MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能,TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在 实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会 根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。