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

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

我正在 Google Compute Engine 中构建一个集群,目前我需要向同一网络中的另一台机器添加一条静态路由,但是出现了一些问题,我收到错误“RTNETLINK 答案:网络无法访问”。

重要的提示:我不是网络专家,在这个过程中我可能犯了一些基本的错误。

我有一台机器 A 和一台机器 B,其中 A 有一个子网 11.10.0.0/16,B 无法访问其他机器,因此 A 将成为 B 到这些机器的网关。两台机器都已IP forwarding启用标志,并且位于同一网络中(两台机器都使用 eth0),可以直接访问对方。

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

B:〜$ sudo ip route add 11.10.0.0/16 via 10.240.0.8 dev eth0
RTNETLINK 回答:网络无法接通

主机 A

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 内核范围链接 src 11.10.0.1
172.17.0.0/16 dev docker0 proto 内核范围链接 src 172.17.42.1
A:~$ IP 地址
1:lo:mtu 65536 qdisc 无队列状态未知组默认
    链路/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 范围主机 lo
       valid_lft 永远 preferred_lft 永远
2:eth0:mtu 1460 qdisc pfifo_fast 状态 UP 组默认 qlen 1000
    链接/以太 42:01:0a:f0:00:08 brd ff:ff:ff:ff:ff:ff
    inet 10.240.0.8/32 brd 10.240.0.8 范围全局 eth0
       valid_lft 永远 preferred_lft 永远
3:docker0:mtu 1500 qdisc noqueue 状态 DOWN 组默认
    链接/以太 02:42:7d:6d:9b:0b brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 范围全局 docker0
       valid_lft 永远 preferred_lft 永远
7:tun0:mtu 1500 qdisc pfifo_fast 状态 UP 组默认 qlen 100
    链接/无
    inet 11.10.0.1 对等 11.10.0.2/32 范围全局 tun0
       valid_lft 永远 preferred_lft 永远
答:〜$ sudo iptables --list -t nat
链 PREROUTING(策略接受)
目标 保护 优化 源 目标         
DOCKER all -- 任何地方 任何地方 ADDRTYPE 匹配 dst-type LOCAL

链输入(策略接受)
目标 保护 优化 源 目标         

链输出(策略接受)
目标 保护 优化 源 目标         
DOCKER 全部 -- 任何地方 !loopback/8 ADDRTYPE 匹配目标类型 LOCAL

链 POSTROUTING(策略接受)
目标 保护 优化 源 目标         
MASQUERADE 全部 -- 172.17.0.0/16 任何地方            

Chain DOCKER(2 个引用)
目标 保护 优化 源 目标
答:〜$ sudo iptables --list -t 过滤器
链输入(策略接受)
目标 保护 优化 源 目标         

链转发(策略接受)
目标 保护 优化 源 目标         
DOCKER all--任何地方            
接受所有 -- 任何地方 任何地方 ctstate 相关,已建立
接受所有 -- 任何地方 任何地方            
接受所有 -- 任何地方 任何地方            

链输出(策略接受)
目标 保护 优化 源 目标         

Chain DOCKER (1 引用)
目标 保护 优化 源 目标

主机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 内核范围链接 src 11.11.0.1
172.17.0.0/16 dev docker0 proto 内核范围链接 src 172.17.42.1
B:~$ IP 地址
1:lo:mtu 65536 qdisc 无队列状态未知组默认
    链路/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 范围主机 lo
       valid_lft 永远 preferred_lft 永远
2:eth0:mtu 1460 qdisc pfifo_fast 状态 UP 组默认 qlen 1000
    链接/以太 42:01:0a:f0:00:07 brd ff:ff:ff:ff:ff:ff
    inet 10.240.0.7/32 brd 10.240.0.7 范围全局 eth0
       valid_lft 永远 preferred_lft 永远
3:docker0:mtu 1460 qdisc noqueue 状态 DOWN 组默认
    链接/以太 02:42:b0:25:d5:57 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 范围全局 docker0
       valid_lft 永远 preferred_lft 永远
17:tun0:mtu 1500 qdisc pfifo_fast 状态 UP 组默认 qlen 100
    链接/无
    inet 11.11.0.1 对等 11.11.0.2/32 范围全局 tun0
       valid_lft 永远 preferred_lft 永远
B:〜$ sudo iptables --list -t nat
链 PREROUTING(策略接受)
目标 保护 优化 源 目标         
DOCKER all -- 任何地方 任何地方 ADDRTYPE 匹配 dst-type LOCAL

链输入(策略接受)
目标 保护 优化 源 目标         

链输出(策略接受)
目标 保护 优化 源 目标         
DOCKER 全部 -- 任何地方 !loopback/8 ADDRTYPE 匹配目标类型 LOCAL

链 POSTROUTING(策略接受)
目标 保护 优化 源 目标         
MASQUERADE 全部 -- 172.17.0.0/16 任何地方            

Chain DOCKER(2 个引用)
目标 保护 优化 源 目标
B:〜$ sudo iptables --list -t过滤器
链输入(策略接受)
目标 保护 优化 源 目标         

链转发(策略接受)
目标 保护 优化 源 目标         
DOCKER all--任何地方            
接受所有 -- 任何地方 任何地方 ctstate 相关,已建立
接受所有 -- 任何地方 任何地方            
接受所有 -- 任何地方 任何地方            

链输出(策略接受)
目标 保护 优化 源 目标         

Chain DOCKER (1 引用)
目标 保护 优化 源 目标

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

答案1

GCE 实例上的虚拟网络实际上是一个/32仅实例本身和网关连接的网络(后者使用主机路由配置)。这意味着所有传出的流量都会发送到网关。

这就是您收到以下错误的原因:

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

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

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

相关内容