首页 > 技术笔记 > pptp搭建的vpn代理,mtu过小不能访问韩国网站

pptp搭建的vpn代理,mtu过小不能访问韩国网站

2014年9月10日 发表评论 阅读评论

最近公司海外组同事需要在韩国做运营,之前都是外面购买的vpn,不太稳定,特提出让我们帮忙解决。我们在海外机器上搭建了最简单的pptp vpn,在使用时fb tw google都能正常访问,但是韩国www.naver.com网站不能访问,不播vpn可以在国内访问www.naver.com。但是运营同事需要播着vpn。。。

排查过程:
通过简单排查,播vpn前后www.naver.com域名解析到的IP是不同的,可以访问的IP是在美国,不可以访问的IP是在韩国,说明做了DNS VIEW。不过之后就没有思路了。
只能tcpdump抓包看了,不同console分别抓包
tcpdump -i eth1 port 80
tcpdump -i ppp1

终于发现有unreachable的包
unreachable - need to frag (mtu 1396), length 556
19:02:39.732905 IP 1.1.1.1.stone-design-1 > 202.131.30.12.http: Flags [S], seq 720418897, win 64240, options [mss 1360,nop,nop

[root@static-ip- ~]# netstat -i
Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500   0  3143805      0      0      0  1797371      0      0      0 BMRU
lo        16436   0        0      0      0      0        0      0      0      0 LRU
ppp0       1396   0      119      0      0      0       80      0      0      0 MOPRU
tun0       1500   0     5367      0      0      0     6301      0      0      0 MOPRU
tun1       1500   0        0      0      0      0        0      0      0      0 MOPRU


我们可以看到ppp0 的 mtu才1396比正常以太网的1500小了不少,如果在减去ip和tcp的头20+20=40字节的话mss(MSS:MaxitumSegmentSize)才1356字节。这就是报错的原因,通过wireshark分析包,发现分片flag为1,禁止分片,以至包不能通过pptp返回给用户,表象是网站不能访问。
通过设置iptables
/sbin/iptables -I FORWARD -p tcp –syn -i ppp+ -j TCPMSS –set-mss 1356 把mss设置成1356,这样MTU可以满足1396字节。网站可以正常访问。

分析:
用户通过pptp服务器与网站服务器协商时,mss为1460,为什么通过一个pptp后mss协商没有按最小mss协商呢,原因是三方分别协商,用户与pptp,pptp与网站服务器,协商的结果都是1460,但是通不过pptp这座桥。通过设置匹配ppp的syn包的mss,使通过pptp与网站服务器协商的mss调小(其他非ppp包的mss正常大小),这样就能通过pptp这座桥了。

当然这个问题也可以通过设置本地DNS来解决,此方式比较山寨,也不适合运营同学使用,改了dns不知会不会出其他问题。
我们也可以看到tun0 tun1 网卡,这是openvpn的tunnel,这个mtu就是标准的1500,所以为了减少不必要的麻烦,较优的建议还是使用openvpn。

分类: 技术笔记 标签:
  1. 2014年9月24日15:35 | #1

    超爷实在是太厉害了。 抓包定位到很多这种细节的协议问题。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.