我正在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无法访问
答:〜$ 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:〜$ 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,因为如上所述,它们将所有传出的数据包发送到网关。