Posts Tagged mtu

Windows VPN客户端连接Linux服务端访问慢现象解决

Posted by on 星期二, 13 一月, 2015

我的Vyatta运行一直很好,用ROS和Cisco做Tunnel连接到Vyatta跑OSPF用来翻墙,效果一直不错。可是当使用Windows连接vpn时,经常打开网页超时,但ping各处均正常,所以怀疑是MTU或MSS的问题。

经过几番周折,发现网页超时时,Vyatta日志内出现大量异常:

Jan 12 21:02:39 Xirang kernel: [4838172.516489] pptp2: ppp: compressor dropped pkt

然后学习了一下,出现这个问题是因为,Windows VPN客户端的MPPE(Microsoft point-to-point Encryption)加密需要占用4个字节长度,原始报文加上MPPE报文头开销会超过Linux服务端pptp接口MTU,最终导致报文过大被丢弃。

所以解决问题的本质就是增加Linux服务端pptp接口MTU。

解决办法有三种:

  1. 编辑pptpd源码,增加MTU;
  2. 使用脚本,在pptp接口连接up以后增加MTU;
  3. 不使用MPPE加密;

第一种虽然从根本上解决了问题,但是由于水平问题放弃了;第三种由于取消了传输加密,心理上觉得不安全,也放弃了;

从网上找到了第二种解决办法,如下:

创建脚本(下载):/etc/ppp/ip-up.d/mppefixmtu.sh

#!/bin/sh
CURRENT_MTU=”`ip link show $1 | grep -Po ‘(?<=mtu )([0-9]+)’`”
FIXED_MTU=”`expr $CURRENT_MTU + 4`”
ip link set $1 mtu $FIXED_MTU

确保脚本具有可执行权限
chmod 755 /etc/ppp/ip-up.d/mppefixmtu.sh
这样MTU加上4以后就可以兼容Windows的MPPE了。
参考原文:https://wiki.archlinux.org/index.php/PPTP_server