我在 vmware 中设置了三个 Ubuntu VM。它们的连接方式如下:
现在我想使用 UBUNTU2 作为路由器,这样当我在 UBUNTU1 中运行这些命令时,我会从 UBUNTU3 得到响应,命令:
ping 192.168.4.103 -I eth1
ping 192.168.4.103 -I eth2
ping 192.168.4.103 -I eth3
我在 UBUNTU3 中收到了来自 UBUNTU1 对命令的响应:
ping 192.168.1.101
ping 192.168.2.101
ping 192.168.3.101
请在这件事上给予我帮助。
我有这样的路线:
请忽略 eth0 接口。它连接到所有虚拟机。
Ubuntu1:
root@ubuntu:/home# ip route show
default via 192.168.8.2 dev eth0
169.254.0.0/16 dev eth2 scope link metric 1000
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.101
192.168.2.0/24 dev eth2 proto kernel scope link src 192.168.2.101
192.168.3.0/24 dev eth3 proto kernel scope link src 192.168.3.101
192.168.8.0/24 dev eth0 proto kernel scope link src 192.168.8.101
root@ubuntu:/home#
Ubuntu2:
root@ubuntu:/home# ip route show
default via 192.168.8.2 dev eth0 metric 100
169.254.0.0/16 dev eth3 scope link metric 1000
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.102
192.168.2.0/24 dev eth2 proto kernel scope link src 192.168.2.102
192.168.3.0/24 dev eth3 proto kernel scope link src 192.168.3.102
192.168.4.0/24 dev eth4 proto kernel scope link src 192.168.4.102
192.168.8.0/24 dev eth0 proto kernel scope link src 192.168.8.102
root@ubuntu:/home#
Ubuntu3:
root@ubuntu:/home# ip route show
default via 192.168.8.2 dev eth0 metric 100
169.254.0.0/16 dev eth1 scope link metric 1000
192.168.4.0/24 dev eth1 proto kernel scope link src 192.168.4.103
192.168.8.0/24 dev eth0 proto kernel scope link src 192.168.8.103
root@ubuntu:/home#
编辑1
我已使用以下命令在 UBUNTU2 中启用了 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
然后我将这些路线添加到 UBUNTU3:
ip route add 192.168.1.0/24 scope global via 192.168.4.102 dev eth1
ip route add 192.168.2.0/24 scope global via 192.168.4.102 dev eth1
ip route add 192.168.3.0/24 scope global via 192.168.4.102 dev eth1
我将这些路由添加到 UBUNTU1:
ip route add 192.168.4.0/24 scope global via 192.168.1.102 dev eth1
此时,我可以从 UBUNTU1 ping UBUNTU3,如下所示:
ping 192.168.4.103 -I eth1
并且,我能够从 UBUNTU3 ping UBUNTU1,如下所示:
ping 192.168.1.101
但后来我尝试在 UBUNTU1 中添加第二条路线,如下所示:
ip route add 192.168.4.0/24 scope global via 192.168.2.102 dev eth2
并且命令因路由存在错误而失败。
如何从机器上的不同接口路由到同一个其他网络(192.168.4.0/24)。
编辑2:
我在 UBUNTU1 中添加了基于规则的路由,如下所示:
1)在so中创建了额外的表名,/etc/iproute2/rt_tables
现在文件包含:
255 local
254 main
253 default
0 unspec
1 net1
2 net2
3 net3
2)在RPDB中创建规则:
ip rule add from 192.168.1.101 table net1
ip rule add from 192.168.2.101 table net2
ip rule add from 192.168.3.101 table net3
3)新路由表中添加的路由:
ip route add 192.168.4.0/24 table net1 scope global via 192.168.1.102 dev eth1 src 192.168.1.101
ip route add 192.168.1.0/24 table net1 scope link dev eth1 src 192.168.1.101
ip route add 192.168.4.0/24 table net2 scope global via 192.168.2.102 dev eth2 src 192.168.2.101
ip route add 192.168.2.0/24 table net2 scope link dev eth2 src 192.168.2.101
ip route add 192.168.4.0/24 table net3 scope global via 192.168.3.102 dev eth3 src 192.168.3.101
ip route add 192.168.3.0/24 table net3 scope link dev eth3 src 192.168.3.101
现在我可以从 UBUNTU3 ping 通 UBUNUT1 的所有 eth1、eth2 和 eth3,但是仍然无法从 UBUNTU1 的 eth1 或 eth2 或 eth3 ping 通 UBUNTU3 的 192.168.4.103 (eth1)。
答案1
我做到了!
在 UBUNTU1 上,我的/etc/iproute2/rt_tables
文件如下:
root@ubuntu-primary:/home# cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
1 net1
2 net2
3 net3
0 unspec
#
# local
#
#1 inr.ruhep
root@ubuntu-primary:/home#
我已经使用命令创建了规则:
ip rule add from 192.168.1.101 table net1
ip rule add oif eth1 table net1
ip rule add from 192.168.2.101 table net2
ip rule add oif eth2 table net2
ip rule add from 192.168.3.101 table net3
ip rule add oif eth3 table net3
现在我在 RPDB 中的规则如下:
root@ubuntu-primary:/home# ip rule show
0: from all lookup local
32759: from all oif eth3 lookup net3
32760: from all oif eth2 lookup net2
32761: from 192.168.3.101 lookup net3
32762: from 192.168.2.101 lookup net2
32763: from all oif eth1 lookup net1
32765: from 192.168.1.101 lookup net1
32766: from all lookup main
32767: from all lookup default
root@ubuntu-primary:/home#
然后我使用命令在每个表 net1、net2 和 net3 中创建了路由:
ip route add 192.168.4.0/24 table net1 scope global via 192.168.1.102 dev eth1 src 192.168.1.101
ip route add 192.168.1.0/24 table net1 scope link dev eth1 src 192.168.1.101
ip route add 192.168.4.0/24 table net2 scope global via 192.168.2.102 dev eth2 src 192.168.2.101
ip route add 192.168.2.0/24 table net2 scope link dev eth2 src 192.168.2.101
ip route add 192.168.4.0/24 table net3 scope global via 192.168.3.102 dev eth3 src 192.168.3.101
ip route add 192.168.3.0/24 table net3 scope link dev eth3 src 192.168.3.101
现在所有三个新的路由表如下所示:
root@ubuntu-primary:/home# ip route show table net1
192.168.1.0/24 dev eth1 scope link src 192.168.1.101
192.168.4.0/24 via 192.168.1.102 dev eth1 src 192.168.1.101
root@ubuntu-primary:/home#
root@ubuntu-primary:/home# ip route show table net2
192.168.2.0/24 dev eth2 scope link src 192.168.2.101
192.168.4.0/24 via 192.168.2.102 dev eth2 src 192.168.2.101
root@ubuntu-primary:/home#
root@ubuntu-primary:/home# ip route show table net3
192.168.3.0/24 dev eth3 scope link src 192.168.3.101
192.168.4.0/24 via 192.168.3.102 dev eth3 src 192.168.3.101
root@ubuntu-primary:/home#
我的主要路线表如下:
root@ubuntu-primary:/home# ip route show table main
169.254.0.0/16 dev eth1 scope link metric 1000
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.101
192.168.2.0/24 dev eth2 proto kernel scope link src 192.168.2.101
192.168.3.0/24 dev eth3 proto kernel scope link src 192.168.3.101
root@ubuntu-primary:/home#
然后我将这些路线添加到 UBUNTU3:
ip route add 192.168.1.0/24 scope global via 192.168.4.102 dev eth1
ip route add 192.168.2.0/24 scope global via 192.168.4.102 dev eth1
ip route add 192.168.3.0/24 scope global via 192.168.4.102 dev eth1
我使用以下命令在 UBUNTU2 中启用了 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
现在一切正常。
我可以从 UBUNTU3 ping UBUNTU1 的所有 eth1、eth2 和 eth3,并且我可以从 UBUNTU1 ping UBUNTU3 的 eth1,并将 ping 应用程序绑定到接口,如下所示:
ping 192.168.4.103 -I eth1
ping 192.168.4.103 -I eth2
ping 192.168.4.103 -I eth3
答案2
您不能将两个不同的网关添加到同一个网络。
从 ubuntu1 开始,您必须定义哪个接口将成为到 192.168.4.X 的路由,您可以通过 192.168.1.102 或者 192.168.2.102 或者 192.168.3.102。
一旦您通过 192.168.1.102 设置路由,通过 192.168.2.102 路由的唯一方法是删除 192.168.1.102 并添加 192.168.1.102。
按照您的想法,您将添加所有三个接口作为网关,现在系统如何选择使用哪个网关?随机一个?也许您正在寻找动态路由协议,例如路由或门控?