Как объединить несколько интернет-соединений в один?

18

Мой компьютер имеет в общей сложности 4 сетевых адаптера, 2 проводных сетевых карты Gigabit Ethernet и 2 беспроводных сетевых карты. (Один Broadcom с проприетарными драйверами и Ralink с открытым исходным кодом, который работает намного лучше, чем Broadcom.)

Мой мобильный телефон может передавать беспроводное соединение на моем ПК, но у меня также есть проводное подключение к Интернету. Поэтому у меня есть несколько интернет-соединений для доступа в Интернет. Как я могу объединить 2 или более соединения вместе и балансировать , чтобы насладиться одним объединенным интернет-опытом, что это сумма всех подключенных к нему интернет-подключений.

Например, если у меня есть модем с подключением к Интернету 1024 кБ / с и другой, который предлагает 512 КБ / с и один маленький, который предлагает 128 КБ / с, после балансировки нагрузки и объединения всех подключений (Скрепление или Объединение), я может загружаться со скоростью 1664 КБ / с, используя все 3 интернет-соединения, например, один.

Этот вопрос всегда заинтриговал меня.

    
задан Luis Alvarado 17.07.2011 в 23:34
источник

3 ответа

9

Я делаю что-то подобное на работе с помощью Ubuntu 11.04. Мы запускаем инструмент настройки брандмауэра Shorewall, который, помимо превосходства в своей работе, предоставляет некоторые рудиментарные инструменты маршрутизации ISP, которые могут соответствовать вашим потребностям. Здесь вы можете найти некоторые документы: Ссылка .

В чем дело, хотя вы не можете использовать несколько интернет-провайдеров для одного соединения ... все так просто. Лучшее, что вы можете сделать, это попытаться направить новые соединения равномерно между разными провайдерами.

Это сложная проблема. Вы, вероятно, в конечном итоге будете бить головой о стену (я, конечно, сделал), прежде чем вы выполните отладку каждой проблемы. Таким образом, как и другие плакаты, вы могли бы подумать, насколько сильно ваше желание.

    
ответ дан Bailey S 08.02.2012 в 01:17
источник
7

Вы можете сделать это, используя пакет ifenslave , который прикрепляет и отделяет подчиненные сетевые интерфейсы к устройству связи.

  1. Установка:

    sudo apt-get install ifenslave
    
  2. Загрузите модуль ядра ядра

    sudo modprobe bondingle
    
  3. Настройте свои интерфейсы:

    sudo vi /etc/network/interfaces
    

    Пример config, чтобы объединить eth0 и eth1 в качестве подчиненных устройств к вашему интерфейсу связи:

    #eth0 is manually configured, and slave to the "bond0" bonded NIC
    auto eth0
    iface eth0 inet manual
    bond-master bond0
    
    #eth1 ditto, thus creating a 2-link bond.
    auto eth1
    iface eth1 inet manual
    bond-master bond0
    
    # bond0 is the bonded NIC and can be used like any other normal NIC.
    # bond0 is configured using static network information.
    auto bond0
    iface bond0 inet static
    address 192.168.1.10
    gateway 192.168.1.1
    netmask 255.255.255.0
    # bond0 uses standard IEEE 802.3ad LACP bonding protocol 
    bond-mode 802.3ad
    bond-miimon 100
    bond-lacp-rate 1
    bond-slaves none
    
  4. Перезапустить сеть:

    sudo restart networking
    
  5. Прерывание ограниченного интерфейса:

    ifup bond0
    ifdown bond0
    

    В качестве примера мы используем несколько режимов связи:

    bond-mode active-backup
    

    Описание режима активной резервной связи :

    Политика активного резервного копирования: активен только один ведомый в облигации. Другое подчиненное устройство становится активным, если и только если активное подчиненное устройство выходит из строя. MAC-адрес связи внешне видим только на одном порту (сетевой адаптер), чтобы избежать путаницы с коммутатором. Этот режим обеспечивает отказоустойчивость. Основной параметр влияет на поведение этого режима.

    Источник и дополнительная информация в вики сообщества сообщества Ubuntu .

  

Связывание означает объединение нескольких сетевых интерфейсов (NIC) в одну ссылку, обеспечивая либо высокую доступность, балансировку нагрузки,   максимальной пропускной способности или их комбинации. Источник

    
ответ дан pl1nk 26.11.2012 в 13:51
6

Это немного старый вопрос, но если вы все еще хотите знать ..

Есть два типичных сценария, какие gertvdijk и pl1nk спорили в одном из ответов:

У вас есть компьютер с 2 общедоступными IP-адресами (2 разных интернет-провайдера), и вы подключаетесь к другому хосту (например, сервер в центре данных с жирным трубой, который больше, чем общая пропускная способность обоих интернет-соединений вашего компьютера). Таким образом, вы устанавливаете соединение для подключения к хосту через ваши 2 соединения, а затем хост (сервер) обслуживает ваш трафик через собственное интернет-соединение. В этом случае вы можете получить почти 100% комбинированной полосы пропускания в обоих направлениях для одного соединения.

Это конкретный случай объединения / объединения / объединения, в котором объединены несколько интерфейсов уровня 2 (один и тот же сеть). Его можно архивировать, установив соединения vpn layer 2 (tap) на каждом интерфейсе ISP с компьютера на хост и связав их вместе (режим с круговым движением), чтобы иметь один интерфейс. Ограничивающим фактором в этом сценарии является то, насколько отличаются задержки (ping) на каждом соединении ISP с хостом. Чем они более похожи и стабильны, тем лучше. Мы используем его в одной из наших установок, он работает хорошо. Если вы хотите узнать подробности о том, как его реализовать, просто дайте мне знать.

Тогда другой сценарий будет без промежуточного хоста, т. е. прямого подключения от вас интерфейсов ISP к веб-серверам по всему миру. В этом случае лучшее, что вы можете получить, - это равномерно распределить исходящие соединения между интерфейсами - т. Е. Один сеанс TCP полностью проходит через один интернет-провайдер, второй сеанс через другой и так далее. Это связано с тем, что, когда вы устанавливаете TCP-соединение, у него есть источник и IP-адреса назначения для каждого пакета, и когда сервер получает пакет с другого IP-адреса, для которого не было рукопожатия TCP, он считает этот пакет ошибочным и отбрасывает его , Поскольку каждое соединение ISP имеет свой собственный общедоступный IP-адрес, для одного и того же сеанса TCP вы не можете отправлять один пакет через одно соединение с одного IP-адреса, а другое через другое соединение с другим IP-адресом.

Вы не получите здесь как высокую совокупную пропускную способность для одного компьютера, как в первом сценарии, но для небольшого офиса это может быть хорошим решением. Что вы можете сделать, чтобы немного расширить его, это реализовать пользовательские решения для определенных протоколов. Например, у вас может быть какой-то прокси-сервер на шлюзе (который может быть одним и тем же компьютером) для загрузки HTTP и попросить разные части огромного файла, устанавливающего разные сеансы TCP через разные интерфейсы ISP. В этом случае скорость загрузки будет составлять около 100% от общей пропускной способности. Это как разгрузка шлюза, что делают ReGet, GetRight и подобные загрузчики. Частичное содержание Google для HTTP 206. Я не знаю никаких готовых решений с открытым исходным кодом для этого сценария, но есть аппаратные устройства, которые выполняют именно это: google для грибных сетей.

    
ответ дан Anatoli 03.03.2014 в 09:57