我使用树莓派 2 B 型启动了我的项目,并在其上安装了 Fedora Arm。我当前的目标是能够通过连接到 DSL 路由器的以太网电缆以及 3G USB 加密狗将 pi 连接到互联网,这样我就可以设置故障转移机制。为此,我想我需要制作一个脚本,通过发出 来检查 eth0 (以太网连接)是否正常工作ping 8.8.8.8 -I eth0
,如果它不工作,我可以通过关闭 eth0 并激活 eth1 (3G 加密狗)来切换到 3G 连接。
一切都很好,就是在这里出现了问题,我想在以太网恢复后返回到以太网,但是当我的 3G 连接正在运行时我无法这样做(即使ping 8.8.8.8 -I eth0
我启动了 eth0,发布也不起作用)我必须关闭 eth1,以便检查 eth0 上的互联网连接是否恢复。我意识到,当我同时打开两个接口时,一次只有一个接口处于活动状态,并且我无法ping 8.8.8.8 -I eth0' and 'ping 8.8.8.8 -I eth1
同时使用这两个接口来 ping 通互联网。我的问题是:
两个接口都处于运行状态时是否可以 ping 通?
如果是的话怎么办?
答案1
显然,问题在于默认情况下,系统上只能有一个默认网关。所描述的情况将导致异步路由。
解决方案
iproute2 程序通常可以用于解决此问题,该程序包含在所有当前的 Linux 发行版中并且甚至已经安装。通常,Linux系统只有一张路由表,其中只能有一个默认网关条目。使用 iproute2,一方面,您可以设置额外的路由表;另一方面,允许系统根据规则使用该表。初始位置
我们假设有两个接口:eth0 和 eth1。应使用的两个网络是 192.168.0.0/24 和 10.10.0.0/24,其中每个网络中的第一个 IP 地址应为网关。初始配置如下所示。 /etc/网络/接口
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1
# The secondary network interface
allow-hotplug eth1
iface eth1 inet static
address 10.10.0.10
netmask 255.255.255.0
添加第二个路由表
要添加新的路由表,必须编辑文件 /etc/iproute2/rt_tables。我们将路由表称为“rt2”并将其首选项设置为 1。命名的文件应如下所示。
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 rt2
配置新的路由表
从这一点来看,需要四个命令来实现我们的目标。首先,需要填充新的路由表,这是使用以下命令完成的。
ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2
ip route add default via 10.10.0.1 dev eth1 table rt2
第一个命令表示可以通过 eth1 接口访问网络 10.10.0.0/24。第二条命令设置默认网关。路由规则
为了让系统知道何时使用我们的新路由表,必须配置两条规则。
ip rule add from 10.10.0.10/32 table rt2
ip rule add to 10.10.0.10/32 table rt2
这些规则规定,来自 IP 地址 10.10.0.10 的流量以及定向到或通过该 IP 地址的流量都应使用 rt2 路由表。