以下是 Linux 和 IP:
- LinuxA:eth0 188.9.5.2,tun0 10.0.0.1
- LinuxB:eth0 188.8.6.3,tun0 10.0.0.2
- LinuxC:eth0 188.9.7.4
- LinuxD:eth0 10.62.8.5
在LinuxA上,我可以ping到LinuxB的10.0.0.2。
在LinuxB上,我可以ping到LinuxA的10.0.0.1。
在 LinuxA 上,我已启用这些:
/proc/sys/net/ipv4/ip_forward = 1
/proc/sys/net/ipv4/conf/tun0/forwarding = 1
在 LinuxC 上,我添加如下路由:
route add -net 10.0.0.0 netmask 255.255.255.0 gw 188.9.5.2
并确认 LinuxC 可以 ping 通 10.0.0.1 和 10.0.0.2
然而,在 LinuxD 上,当执行在 LinuxC 上使用的路由添加命令时,我收到此错误“SIOCADDRT:网络不可达”(注意,LinuxD 可以 ping 到 188.9.5.2)。
请问有人能帮我解决这个路由/网关问题吗?
@dmourati,谢谢您的回复。这 4 个 Linux 都在私有网络中,尽管 188.xxx IP 不属于 RFC 规定的私有 IP 范围(将很快迁移)。
答案1
Linux D 似乎只有一个RFC 1918私有地址。因此,Linux D 将无法直接访问 188.9.5.2。
编辑
我建议将所有服务器放入 RFC 1918 地址空间或全部放在公共网络上。一旦您解决了这个问题,请重新考虑您最初提出的隧道/路由问题。
答案2
LinuxD 无法使用该地址直接连接到 Linux C。您可以在 LinuxC 和 LinuxD 上创建一个虚拟接口作为同一 /30 子网的一部分,并通过该接口传输流量。您需要在需要与其通信的每个设备上使用另一条路由。
似乎有一种更简单的方法可以做到这一点,它们都在同一个第 2 层上吗?您是否可以在每个设备上创建虚拟设备并将它们放在同一个网络上?如果您尝试将 TUN 适配器用作物理适配器的虚拟适配器,最好使用 eth0:0 eth0:1 适配器。
答案3
是的,您应该添加虚拟网卡以连接到同一网络。不建议使用其他网络掩码(网络段)中的网关