我们有一个新的Google云平台设置。 我们已成功创build了一个VPN连接到我们的办公室路由器。 我们可以通过我们的办公室访问Google Cloud中的私人地址,并且来自GCP内部的一些服务可以访问我们的办公networking。 我们已经build立了kube-dns,通过VPN使用我们的内部DNS服务器来获得私有资源,而且大多数情况下,这个工作正常。 而且,从容器和容器集群节点虚拟机,我们可以ping办公室networking内的地址。
但是,我们希望在Google Container Engine中部署的第一个应用程序需要HTTPS访问防火墙后面的办公室networking中运行的API服务器。 这些HTTPS连接(使用wget和curl进行testing)只是挂起。 没有数据被返回。 我已经在办公室路由器上做了一个stream量捕获,我可以看到数据包按照预期进入隧道。 我也尝试了从Google出站的常规HTTP和SSH连接到我们的办公室。 我尝试从一个正在运行的容器内部和容器引擎集群节点(COS映像)本身。 只有ping和DNS正在从谷歌伸向办公室networking。
GCP中没有出口防火墙规则。 办公室路由器策略目前允许通过VPN的所有stream量。 我发现其他一些类似于我们的情况的post,但是他们年龄较大,其中大部分参考了GCP的修正,而另一些则讨论了复杂的iptables解决scheme。
因此,我们在第一次云部署时完全被阻止。 我们如何解决GCP中的networking问题? 似乎返回的数据包只是没有路由回到他们的来源。 DNS和ping都不是TCP,当然HTTPS和SSH是TCP。 这是我可以区分什么是有效的和什么不可行的主要区别。 我们接下来要做什么?
以下说明了Google Cloud VPN所需的MTU设置。
https://cloud.google.com/compute/docs/vpn/advanced#maximum_transfer_unit_mtu_considerations
在我们的Juniper SSG系列路由器上,我将VPN隧道虚拟接口上的MTU设置为:
set interface tunnel.3 mtu 1460
然而,这个解决scheme不仅仅需要MTU,因为在一个VPN上,encryption会在数据包被分解成MTU大小的块之后增加开销,或者至less我认为这就是它的工作原理。 再次在我们的路由器上,我们不得不应用下面的configuration命令为VPNstream量configuration适当的数据包大小:
set flow tcp-mss 1350 set flow vpn-tcp-mss 1300
我没有花费时间在这些命令中寻找完美的数值,也没有testing是否只有其中一个实际需要,但是在设置这两个值的情况下,我们的VPN开始按预期工作。