我一直在阅读有关 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)的工作方式,您将无能为力。