我发现了几个相关的问题,但它们似乎都不能解决我的特定问题。
我有一台服务器在10.a.b.1
,另一台服务器在10.c.d.2
。我们使用的是 AWS EC2 classic,无法控制内部 IP,因此中间的八位字节不同但不相关。
服务器 2 运行 OpenVPN 并了解另一个网络10.10.10.0/24
.我希望服务器 1 能够访问该网络,这意味着更新服务器 1 上以及其他网络上相关服务器上的路由。
换句话说,服务器 1 应该向服务器 2 发送 10.10.10.0/24 流量,而其他网络上的服务器应该向服务器 2 发送 10.ab1 流量。我不确定服务器 2 是否需要任何更改,可能是 IP 转发或iptables 来实际转发流量。
现在,我被困在服务器 1 上:
server1$ ip route add 10.10.10.0/24 via 10.c.d.2 dev eth0
不幸的是,这失败了:RTNETLINK answers: Network is unreachable
。
我可以在 10.cd2 处成功 ping 和跟踪从服务器 1 到服务器 2 的路由,所以我很困惑为什么无法添加此路由?
答案1
10.ab1 和 10.cd2 不在同一网络上,是吗?
如果前缀长度足够短(例如 /8),它们可能位于同一网络上。您没有说明前缀长度,但我怀疑它并没有那么短,而且它们实际上也不在同一网络上。
路由的目标只能是本地链路上的下一跳。因此,您可以在 servr1 上安装 10.10.10.0/24 的路由,该路由指向使流量距离 server2 更近一跳的路由器。那么该路由器将如何处理流量呢?它必须知道将其发送到哪里(通过路由)才能使其距离 server2 更近一步。等等。但您无法控制任何中间路由器,因此您可能无法这样做。
如果您希望将流量从 server1 传输到 server2(然后可以通过本地链接将其定向到 10.10.10.0/24),最好的选择就是通过隧道传输。在 server1 和 server2 之间创建一条隧道(GRE 等...),或者更简单地,在 server1 和 10.10.10.0/24 之间创建一条隧道。