Vpn搭建及pptpd因mtu上传下载慢一例

一、环境及安装

  • server: centos 6.3 (kvm虚拟机)。
  • client: ubuntu 10.04。
  • server上yum install安装pptpd,常规设置好ip分配、用户名密码,添加iptables set mss的参数。

    设置/etc/pptpd.conf中的localip与remoteip,分别表示虚拟出来的双方ip范围。
    设置/etc/ppp/chap-secrets中的用户名密码和连接ip等。
    service pptpd start
    iptables -A FORWARD -p tcp –syn -s 172.16.36.0/24 -j TCPMSS –set-mss 1356

  • client上apt-get install安装的pptpsetup,设置好用户名密码,启动vpn连接。

    /usr/sbin/pptpsetup –create vpn –server ...(server ip) –username vpn –password ASDF –encrypt –start

  • pptpd v1.4.0

二、遇到困难

  • scp client_file server 时,速度先很快,级数变慢,最后不动了。
  • scp server_file client 时,同上表现。
  • 因为server处在vm中(某云主机)。
  • server最后的公网ip并不在eth0,而是由母机网卡决定。
  • server的iptable看上去并不生效。

三、联想

  • vpn慢的原因,最大可能是虚拟出的网络mtu大过了中间的网络mtu值。
  • 猜测是双方的虚拟网卡上的mtu与实际的网络有差别。
  • 分别在server client执行netstat -i。
  • 可以看到ppp0默认的mtu值都在1496左右(真实网卡是1500),找到真凶。

四、解决

  • server: /etc/ppp/options.pptpd 最后一行添加 mtu 1300,解决下载慢。
  • client: ifconfig ppp0 mtu 1300 解决上传慢的问题。

  • MTU:Maximum Transmission Unit 网络上传送的最大数据包,单位字节,默认一般是1500。

  • 大于mtu的包,在系统层会被拆成多个来发。
  • 各层级的网络路由设备,会协商大家的mtu,选择一个最小的。
  • 协商mtu的时候要发送ICMP包,很多厂商的防火墙会关闭它的传输(防ddos等)。真凶在此。
  • 在无法实现协商mtu的时候,各种事件都会影响mtu的确定,实际表现为在传大文件的时候,寻找mtu的过程中,数据包丢了。原理在此。


原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]

捐款订阅54chen
捐赠说明

Comments