使用以太网和移动互联网的结合来实现高可用性

使用以太网和移动互联网的结合来实现高可用性

我一直在阅读有关 Linux 绑定驱动程序的文章。 https://www.kernel.org/doc/Documentation/networking/bonding.txt

我的目标是通过结合连接到 LAN 的以太网接口 (eth0) 和由 surf-stick/GSM 模块提供的移动互联网连接来提高基于 debian 的系统上的互联网连接的可用性。后者在 的输出中也显示为以太网接口ifconfig

我安装ifenslave并添加到我的/etc/network/interfaces

# Slaves
auto eth0
iface eth0 inet manual
  bond-master bond0
  bond-primary eth0
  bond-mode active-backup

auto eth1
iface eth1 inet manual
  bond-master bond0
  bond-primary eth0
  bond-mode active-backup

# Master
auto bond0
iface bond0 inet dhcp
  bond-slaves none
  bond-primary eth0
  bond-mode active-backup
  bond-miimon 100

重启后我的ifconfig输出看起来像

bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
    inet 192.168.178.47  netmask 255.255.255.0  broadcast 192.168.178.255
    inet6 fe80::ba27:ebff:feb6:c504  prefixlen 64  scopeid 0x20<link>
    ether b8:27:eb:b6:c5:04  txqueuelen 1000  (Ethernet)
    RX packets 436  bytes 34223 (33.4 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 312  bytes 80051 (78.1 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
    ether b8:27:eb:b6:c5:04  txqueuelen 1000  (Ethernet)
    RX packets 436  bytes 34223 (33.4 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 312  bytes 80051 (78.1 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    inet6 ::1  prefixlen 128  scopeid 0x10<host>
    loop  txqueuelen 1000  (Local Loopback)
    RX packets 2  bytes 78 (78.0 B)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 2  bytes 78 (78.0 B)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

也就是说,绑定接口在那里。奇怪的是,eth0 也可见,而 eth1(代表 surf-stick 的备份接口)不见了。

如果 eth0 连接到互联网,我可以访问,但如果我删除该连接,则无法访问。也就是说,我的设置表现得就像没有 surf-stick 一样。

由于上面的参考资料讨论了交换机,因此我不确定我是否正确理解了绑定的含义。在我的例子中,两个接口连接到不属于公共子网的网关。

编辑1 我可以解决接口似乎未正确绑定的部分问题:这似乎是由启动顺序引起的(其中一个以太网接口来自 USB 设备)。可能只有在绑定发生后才会加载驱动程序。无论如何,当我在运行时触发绑定时(修改 /etc/network/interfaces 然后运行 ​​/etc/init.d/networking restart),绑定似乎会发生。但是,我仍然没有得到想要的行为。

编辑2 与此同时(不幸的是)被删除的答案指出绑定可能确实对我的应用程序没有用。如果这是正确的,是否可以使用路由表获得类似的行为,以及如何获得?当其网关连接到互联网时,我希望将其中一个以太网(eth0)设备作为首选默认路由。如果不是,则应使用辅助默认路由(通过 eth1)介入,直到 eth0 再次获得互联网连接。

答案1

只有当你能建立纽带时,纽带才会起作用两边的连接。此外,绑定在第 2 层上工作,因此如果中间有第 3 层传输,则无法实现。

换句话说,粘合不适合您使用的情况。

如何同时使用两个不同的互联网连接是常见问题解答。您可以

1) 进行故障转移:仅使用一个连接,当一个连接失败时使用自定义脚本在它们之间切换。这里的主要问题是定义“失败”,即如何检测一个连接何时失败。一个选项是定期对已知地址进行 ping。

2)使用支持多宿主比如 SCTP。不幸的是,这些协议还没有流行起来,所以对于你在互联网上想做的大多数事情来说,这并不实用。

否则,由于广泛使用的协议(TCP 和 UDP)的工作方式,您将无能为力。

相关内容