解决方案

解决方案

我使用树莓派 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 路由表。

相关内容