gcp这个网络坑是vm网卡的mtu是1460,一般其他vps或云服务的都是1500。

在gcp上使用更换付费账号的方式重新撸了300刀一年,其实在15/16年就用过一年,当时台湾服务器还没被草烂,联通直连能跑满带宽,后来用的人越来越多,很多ip被墙了,到期之后就没再用。

最近发现gcp新放出来一批ip,识别地址是美国,还没有被各大视频网站(Netflix,hbo,hulu等)加入黑名单,所以又撸了一年,先用着。

之前用gcp只是用ss,没有碰到mtu的问题。这次用gcp做落地机出现了问题。
境内路由器隧道到阿里云香港然后隧道到gcp香港,再出去,由于隧道的原因链路最小mtu是1390,小于gcp网卡1460,所以没有问题。

我的苹果设备需要一个ikev2服务器访问美国服务,按之前的一键脚本一路下来很顺利,却打不开谷歌的各种服务,但是ping正常,telnet正常,刚开始以为是dns问题,一键脚本默认是8.8.8.8,服务器是169.254.169.254的内网ip,修改dns服务器地址之后依然不行。然后想到是不是gcp对nat有什么限制,遍历gcp设置,各种查文档,改配置也是一无所获。

ikev2建立连接后,客户端通过telnet发现是可以建立tcp连接的,然后通过curl -v去请求测试,发现curl -v google.com可以收到301状态码,但是curl -v www.google.com卡在tcp建立连接后接收http报文,curl -v https://www.google.com 卡在tls协商,其实从这基本可以确定是mtu问题了,因为卡住之前都是小包碰不到分片或丢包,到接收http报文或者tls协商都是大包,超过mtu都是要分片或丢包,由于关于mtu的问题很久没有遇到了,一时没想起来。

惆怅迷惑之际拿起了wireshark抓包,curl -v www.google.com后,wireshark出现“tcp previous segment not captured”,终于意识到大包被丢包了,可能是mtu问题。ifconfig发现imac的ipsec0接口mtu是1400,sudo ifconfig ipsec0 mtu 1200 up,问题解决。但是不能每个客户端都修改mtu,ios怎么修改mtu?

查询文档,谷歌建议vm网卡使用1460,说是全球链路中最大1460,先不管了修改vm网卡为1500,vm只作中转不从vm直接上传什么应该问题不大。

gcp关于strongswan的文档根本没有提到mtu问题。