在 Ubuntu 上绑定两个 NIC - 每个 NIC 都连接到具有互联网连接的不同子网

在 Ubuntu 上绑定两个 NIC - 每个 NIC 都连接到具有互联网连接的不同子网

我为此苦苦挣扎了一个多星期。我是网络新手,所以过去几天我从头开始学习一切。

我需要在两个网络接口之间实现无缝切换。例如,我的笔记本电脑中有一个内部网络 wifi,还有一个通过 USB 连接的外部网络 wifi。我从内部 wifi 连接到一个路由器,从外部 wifi 连接到移动热点。因此,我为每个 wifi 适配器分配了来自不同子网和不同默认网关的自己的 IP。

我发现类似这样的事情应该可以通过粘合来实现。所以我开始研究这个解决方案。花了几天时间学习一些基于路由的东西,我终于几乎搞定了最后一个细节,我被困了三天,我甚至不确定它是否可以做到。

假设我有两个默认网关:第一个 - 192.168.2.1 第二个 - 192.168.3.1

因此我的 /etc/network/interfaces 文件中有这个:

自动 bond0 iface bond0 inet 静态地址 192.168.1.10 网络掩码 255.255.255.0

自动 enp0s3 iface enp0s3 inet 手动

自动 enp0s8 iface enp0s8 inet 手动

我设置了粘合、粘合模式等链接。

我添加了一些路线

路线

使用此设置,当我在互联网上 ping 某些 IP 时,我的 wireshark 会在 icmp 请求上无休止地说:未找到响应!

但是当我添加这个时:

ifconfig bond0:1 192.168.2.10 网络掩码 255.255.255.0

ifconfig bond0:2 192.168.3.10 网络掩码 255.255.255.0

绑定工作正常,当我关闭其中一个 NIC 时,绑定会自动切换到另一个(我正在使用 active-backup 运行),并且互联网正在工作。但我这样做的唯一原因是获得无缝下载。假设我正在下载大文件并使用一个 NIC,但它失败了,所以我希望第二个 NIC 将被自动使用并且我的下载将继续。但是使用此设置下载会失败,因为我的绑定接口使用基于活动从属设备的 bond0:1 或 bond0:2 IP。因此,当更改到新的从属设备时,我的 IP 会更改并且下载会失败...

因此,从我所读的内容中,我了解到如果我希望我的下载能够无缝继续,那么当从属设备发生变化时,我的 IP 必须保持不变。

所以我需要删除这两个:

ifconfig bond0:1 192.168.2.10 网络掩码 255.255.255.0

ifconfig bond0:2 192.168.3.10 网络掩码 255.255.255.0

然后我的绑定接口总是使用静态 ip 192.168.1.10,但是我得到的信息是:未找到响应。

我尝试了一些转发、使用 IP 表的 nat 东西以及我发现的其他东西,但对我都不起作用。我是否只缺少一些小部分来让它运行?还是无法做到?我需要实施一个解决方案,而无需任何额外的路由器或现有路由器上的额外设置。它必须是我机器上的纯粹设置。这可能吗?

非常感谢大家的回答。

答案1

不幸的是,这一切都没有按照你期望的方式进行。

绑定的目的是将同一个广播域中的多个网络接口连接起来,比如插入一个交换机的两个以太网网卡。

绑定并不像您希望的那样,是两个不同 IP 子网之间的 IP 故障转移。

绑定还会改变与其连接的设备的 MAC 地址,但是大多数使用 wifi 的网卡不会传递源 MAC 不是其自身 MAC 的帧。

您的 IP 寻址也毫无意义,您192.168.1.10/24和两个路由器的 IP 位于不同的子网中。任何路由器都需要位于同一子网中,因为路由器是您离开子网的方式。

您实际上想要的是使用 NetworkManager 并单独设置每个连接,就好像另一个连接不存在一样。NM 将对路由应用度量,因此当电缆插入时,以太网是首选,但当电缆拔出时,系统将返回到 Wifi。

您仍然无法对已建立的连接进行热无缝故障转移,因为以太网和 Wifi 连接在同一子网上将具有不同的 IP 地址。这就像您从一个 NIC 切换到另一个 NIC,只是速度非常快。

相关内容