问题描述
我的电脑一共有4块网卡,2块有线千兆以太网卡,还有2块无线网卡。 (博通有专有驱动程序,雷凌有开源软件,比博通好得多。)
我的手机可以通过无线方式与我的电脑共享连接,但我也有有线互联网连接。所以我有多个互联网连接来访问互联网。如何将 2 个或更多连接合并在一起并平衡它们以享受一种统一的 Internet 体验,它是与其连接的所有 Internet 连接的总和。
例如,如果我有一个互联网连接为 1024kB/s 的调制解调器,另一个提供 512kB/s 的调制解调器和一个提供 128kB/s 的小型调制解调器,在负载平衡和合并所有连接(绑定或分组)后,我可以在例如,使用所有 3 个互联网连接作为一个时,速度为 1664kB/s。
这个问题一直让我很感兴趣。
最佳办法
我在工作中使用 Ubuntu 11.04 做了类似的事情。我们运行 Shorewall 防火墙配置工具,该工具除了性能出色之外,还提供了一些可能适合您需求的基本多 ISP 路由工具。您可以在这里找到一些有关它的文档:http://www.shorewall.net/MultiISP.html
但归根结底,你不能为单个连接使用多个 ISP……事情没那么简单。您能做的最好的事情就是尝试在不同的提供商之间均匀地建立新的连接。
这是一个复杂的问题。在调试完每个问题之前,您可能最终会用头撞墙(我确实这样做了)。因此,正如其他发帖者所建议的那样,明智的做法是仔细考虑您的愿望有多强烈。
次佳办法
您可以通过使用包 ifenslave
将从属网络接口附加到绑定设备并从中分离来实现此目的。
-
安装:
\n
sudo apt-get install ifenslave\n
-
加载绑定内核模块
\n
sudo modprobe bondingle\n
-
配置您的接口:
\n
sudo vi /etc/network/interfaces\n
\n
示例配置,将 eth0 和 eth1 组合为绑定接口的从属接口:
\n
#eth0 is manually configured, and slave to the "bond0" bonded NIC\nauto eth0\niface eth0 inet manual\nbond-master bond0\n\n#eth1 ditto, thus creating a 2-link bond.\nauto eth1\niface eth1 inet manual\nbond-master bond0\n\n# bond0 is the bonded NIC and can be used like any other normal NIC.\n# bond0 is configured using static network information.\nauto bond0\niface bond0 inet static\naddress 192.168.1.10\ngateway 192.168.1.1\nnetmask 255.255.255.0\n# bond0 uses standard IEEE 802.3ad LACP bonding protocol \nbond-mode 802.3ad\nbond-miimon 100\nbond-lacp-rate 1\nbond-slaves none\n
-
重启网络:
\n
sudo restart networking\n
-
调出上/下有界接口:
\n
ifup bond0\nifdown bond0\n
\n
我们使用的绑定模式有以下几种:
\n
bond-mode active-backup\n
\n
active-backup绑定模式说明:
\n
Active-backup 策略:绑定中只有一个从属处于活动状态。当且仅当活动从站发生故障时,另一个从站才会变为活动状态。绑定的 MAC 地址仅在一个端口(网络适配器)上从外部可见,以避免混淆交换机。该模式提供容错能力。主要选项影响此模式的行为。
\n
-
所有绑定模式的 Description。
\n
来源和更多信息位于 Ubuntu community help wiki 。
-
\\n
Bonding, means combining several network interfaces (NICs) to a single link, providing either high-availability, load-balancing,\\n maximum throughput, or a combination of these. Source
\\n
第三种办法
这是一个有点老的问题,但如果你仍然想知道..
gertvdijk 和 pl1nk 在答案之一中争论的有两种典型场景:
您有一台具有 2 个公共 IP(2 个不同 ISP)的计算机,并且连接到另一台主机(例如,数据中心中的服务器具有比计算机的两个 ISP 连接的总带宽更大的宽管道)。因此,您通过 2 个连接建立与主机的绑定连接,然后主机(服务器)通过其自己的互联网连接为您的流量提供服务。在这种情况下,您可以为单个连接获得几乎 100% 的双向组合带宽。
这是绑定/分组/链路聚合的特殊情况,其中多个第 2 层(同一网络)接口连接在一起。它可以通过在从计算机到主机的每个 ISP 接口上建立 VPN 第 2 层(tap)连接并将它们绑定在一起(round-robin 模式)以具有单个接口来实现。这种情况下的限制因素是每个 ISP 与主机的连接的延迟 (ping) 有多大差异。它们越相似、越稳定越好。我们在我们的一个安装中使用它,效果很好。如果您想了解如何实施的详细信息,请告诉我。
另一种情况是没有中间主机,即从您的 ISP 接口到世界各地的各种网络服务器的直接连接。在这种情况下,最好的办法是在接口之间均匀分配传出连接,即一个 TCP 会话完全通过一个 ISP 进行,第二个会话通过另一个 ISP 进行,依此类推。之所以如此,是因为当您建立 TCP 连接时,每个数据包都有源 IP 地址和目标 IP 地址,并且当服务器从另一个 IP 接收到未执行 TCP 握手的数据包时,它会认为该数据包是错误的并丢弃它。由于每个 ISP 连接都有自己的公共 IP,因此对于同一个 TCP 会话,您无法通过一个 IP 的一个连接发送一个数据包,并通过另一个 IP 的另一个连接发送另一个数据包。
对于单台计算机,您无法实现与第一种情况一样高的聚合带宽利用率,但对于小型办公室来说,这可能是一个很好的解决方案。您可以做的一点扩展是为特定协议实现自定义解决方案。例如,您可以在网关(可能是同一台计算机)上有某种代理用于 http 下载,并请求通过不同 ISP 接口建立不同 TCP 会话的大文件的不同部分。在这种情况下,最终的下载速率将接近组合带宽的 100%。这就像将 ReGet、GetRight 和类似下载器所做的事情卸载到网关。 Google“HTTP 206 部分内容”。我不知道任何适合这种情况的 out-of-the-box 开源解决方案,但有一些硬件设备可以做到这一点:google ‘mushroom networks’。