设置 Linux 路由器

设置 Linux 路由器

我在 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。

按照您的想法,您将添加所有三个接口作为网关,现在系统如何选择使用哪个网关?随机一个?也许您正在寻找动态路由协议,例如路由或门控?

相关内容