如何在Google计算引擎上添加静态路由

我正在Google Compute Engine中构build一个集群,目前我需要向同一个networking中的另一台计算机添加静态路由,但出现问题,并且出现“RTNETLINK答案:networking无法访问”错误。

重要说明 :我不是networking专家,我可能在这个过程中犯了一些基本错误。

我有一台机器A和一台机器B,其中A有一个子网11.10.0.0/16,而其他机器B不能到达,所以A将是B的网关。 两个标志IP forwarding处于活动状态,并且位于同一个networking中(两者都使用eth0),并且可以直接到达另一个networking。

命令和错误(在B上执行)是:

  B:〜$ sudo ip route通过10.240.0.8 dev eth0添加11.10.0.0/16
 RTNETLINK答案:networking无法访问 

主持人A.

 答:〜$ ip路由列表
默认通过10.240.0.1 dev eth0 
 10.240.0.1 dev eth0范围链接 
 11.10.0.0/16通过11.10.0.2 dev tun0 
 11.10.0.2 dev tun0 proto kernel scope链接src 11.10.0.1 
 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1 
 答:〜$ ip addr
 1:lo:mtu 65536 qdisc noqueue state UNKNOWN组默认 
    链接/回放00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1/8作用域主机lo
       永远永远的preferred_lft永久valid_lft
 2:eth0:mtu 1460 qdisc pfifo_fast状态UP组默认qlen 1000
     link / ether 42:01:0a:f0:00:08 brd ff:ff:ff:ff:ff:ff
     inet 10.240.0.8/32 brd 10.240.0.8 scope global eth0
       永远永远的preferred_lft永久valid_lft
 3:docker0:mtu 1500 qdisc noqueue state DOWN组默认值 
     link / ether 02:42:7d:6d:9b:0b brd ff:ff:ff:ff:ff:ff
     inet 172.17.42.1/16作用域全局docker0
       永远永远的preferred_lft永久valid_lft
 7:tun0:mtu 1500 qdisc pfifo_fast状态UP组默认qlen 100
    链接/无 
     inet 11.10.0.1 peer 11.10.0.2/32 scope global tun0
       永远永远的preferred_lft永久valid_lft 
 答:〜$ sudo iptables --list -t nat
连锁PREROUTING(政策接受)
目标人select源目的地         
 DOCKER全部 - 随处随地ADDRTYPE与dst-type LOCAL相匹配

连锁input(政策接受)
目标人select源目的地         

链式输出(策略ACCEPT)
目标人select源目的地         
 DOCKER all  -  anywhere!loopback / 8 ADDRTYPE匹配dst-type LOCAL

连锁POSTROUTING(政策接受)
目标人select源目的地         
 MASQUERADE全部 -  172.17.0.0/16任何地方            

连锁DOCKER(2参考)
目标人select源目的地 
 答:〜$ sudo iptables --list -t filter
连锁input(政策接受)
目标人select源目的地         

连锁FORWARD(政策接受)
目标人select源目的地         
随时随地都可以            
接受所有 - 在任何地方ctstate RELATED,ESTABLISHED
随时随地接受            
随时随地接受            

链式输出(策略ACCEPT)
目标人select源目的地         

连锁DOCKER(1参考)
目标人select源目的地

主持人B

  B:〜$ ip路由
默认通过10.240.0.1 dev eth0 
 10.240.0.1 dev eth0范围链接 
 11.11.0.0/16通过11.11.0.2 dev tun0 
 11.11.0.2 dev tun0 proto kernel scope链接src 11.11.0.1 
 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1 
  B:〜$ ip addr
 1:lo:mtu 65536 qdisc noqueue state UNKNOWN组默认 
    链接/回放00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1/8作用域主机lo
       永远永远的preferred_lft永久valid_lft
 2:eth0:mtu 1460 qdisc pfifo_fast状态UP组默认qlen 1000
     link / ether 42:01:0a:f0:00:07 brd ff:ff:ff:ff:ff:ff
     inet 10.240.0.7/32 brd 10.240.0.7 scope global eth0
       永远永远的preferred_lft永久valid_lft
 3:docker0:mtu 1460 qdisc noqueue state DOWN组默认值 
     link / ether 02:42:b0:25:d5:57 brd ff:ff:ff:ff:ff:ff
     inet 172.17.42.1/16作用域全局docker0
       永远永远的preferred_lft永久valid_lft
 17:tun0:mtu 1500 qdisc pfifo_fast状态UP组默认qlen 100
    链接/无 
     inet 11.11.0.1 peer 11.11.0.2/32 scope global tun0
       永远永远的preferred_lft永久valid_lft 
  B:〜$ sudo iptables --list -t nat
连锁PREROUTING(政策接受)
目标人select源目的地         
 DOCKER全部 - 随处随地ADDRTYPE与dst-type LOCAL相匹配

连锁input(政策接受)
目标人select源目的地         

链式输出(策略ACCEPT)
目标人select源目的地         
 DOCKER all  -  anywhere!loopback / 8 ADDRTYPE匹配dst-type LOCAL

连锁POSTROUTING(政策接受)
目标人select源目的地         
 MASQUERADE全部 -  172.17.0.0/16任何地方            

连锁DOCKER(2参考)
目标人select源目的地
  B:〜$ sudo iptables --list -t filter
连锁input(政策接受)
目标人select源目的地         

连锁FORWARD(政策接受)
目标人select源目的地         
随时随地都可以            
接受所有 - 在任何地方ctstate RELATED,ESTABLISHED
随时随地接受            
随时随地接受            

链式输出(策略ACCEPT)
目标人select源目的地         

连锁DOCKER(1参考)
目标人select源目的地

我希望我已经提供了足够的有关这个问题的信息。

您在GCE实例上获得的虚拟networking实际上是一个/32networking,只有实例本身和网关连接(后者使用主机路由进行configuration)。 这意味着所有传出的stream量都被发送到网关。

这就是为什么你得到以下错误的原因:

 B:~$ sudo ip route add 11.10.0.0/16 via 10.240.0.8 dev eth0 RTNETLINK answers: Network is unreachable 

错误只是告诉你没有主机或networking路由匹配10.240.0.8 (除了使用网关本身的默认路由)。

无法使用主机上的路由configuration来设置所需的configuration。 相反,您需要在GCE本身中configuration路由,如此处所述。 从概念上讲,您可以将其视为在网关上configuration路由表。 您不需要主机上的任何其他configuration,因为如上所述,它们将所有传出的数据包发送到网关。