PPTP VPN 服务器上需要把 SYN 中的 MSS 调整成 1320 才能顺利上网

Android 上 pptp 的 MTU 是 1400(https://www.zeitgeist.se/2013/11/26/mtu-woes-in-ipsec-tunnels-how-to-fix/)

因此抓包可以看到 Android 发起的 SYN 都是把 MSS 设置成了 1360

but 服务器上 ppp 设备的 MTU 是 1396,1400的包无法通过这个设备,因此我们需要修改出去的包的 MTU 为1356才能正常工作。网上很多关于 PPTP 的 MSS 设定都提到了 1356 这个数值。

考虑到传输中避免不了本地有POST大量数据的可能,因此还得把3WHS回来的 SYN/ACK 里面的 MSS 值也修改成1356,否则Android自以为双方的min-mss仍然是本地的1360呢

上面说的都是理论,现实则是即使 MSS 设置成了 1356,仍然有些服务是访问不到的,比如 google play。晚上抱着试试看的心情,逐步减少 MSS,最后发现改到 1320 的时候,似乎访问全部正常了。

考虑到 1320 = 1396 - 20(IP Header) - 16(GRE header) - 40(IP+TCP),难道这种算法才是正解?最开始的减40都是错的?对这个问题暂时处于知其然而不知其所以然的状态...

Topic: 技术