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

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

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

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

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

1
задан 29 March 2016 в 11:35

2 ответа

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

Установите:
sudo apt-get install ifenslave
Загрузите модуль ядра ядра
sudo modprobe bondingle
Настройте свои интерфейсы:
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
Перезапустить сеть:
sudo restart networking
Включение примерного интерфейса:
ifup bond0
ifdown bond0
В качестве примера мы используем несколько режимов связи:
bond-mode active-backup
Описание режима активной резервной связи: политика активного резервного копирования: активен только один ведомый в облигации. Другое подчиненное устройство становится активным, если и только если активное подчиненное устройство выходит из строя. MAC-адрес связи внешне видим только на одном порту (сетевой адаптер), чтобы избежать путаницы с коммутатором. Этот режим обеспечивает отказоустойчивость. Основной параметр влияет на поведение этого режима. Описание всех режимов связи. Источник и дополнительная информация в вики-сообществе сообщества Ubuntu.
Связывание означает объединение нескольких сетевых интерфейсов (NIC) в одну линию связи, обеспечивающих высокую доступность, балансировку нагрузки, максимальную пропускную способность или их комбинацию. Источник
8
ответ дан 25 May 2018 в 19:46
  • 1
    +1, потому что это одна из причин моего вопроса. По-прежнему будет ждать создания виртуального сетевого мастер-соединения, которое является суммой всех ведомых (реальных) соединений. Что-то вроде склеивания, которое входит в последнюю версию ядра. – Luis Alvarado♦ 26 November 2012 в 19:08
  • 2
    -1 - связывание работает в локальных сетях, поскольку оно работает на уровне 2. Вопрос заключается в балансировке нагрузки двух независимых WAN. – gertvdijk 29 December 2012 в 18:33
  • 3
    @gertvdijk Я не согласен проверить свой ответ на обновление, чтобы узнать, что соединение также позволяет балансировать нагрузку. – pl1nk 31 December 2012 в 20:33
  • 4
    @ pl1nk Это балансировка нагрузки уровня 2 для двух сетевых адаптеров в той же сети L2. Это не то же самое, что балансировка нагрузки на нескольких ISP! – gertvdijk 31 December 2012 в 20:50
  • 5
    @ pl1nk Мой последний комментарий. Ясно, что вопрос касается множественных независимых широкополосных соединений. Хотя они могут быть одним из интернет-провайдеров, это не изменяет инвалидность, чтобы справиться с этим на уровне 2. – gertvdijk 31 December 2012 в 21:10

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

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

[d2 ] У вас есть компьютер с 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 для грибных сетей.

6
ответ дан 25 May 2018 в 19:46
  • 1
    Вау! Первая часть вашего ответа - именно то, что я ищу. У меня есть сервер в облаке с Ubuntu и очень быстрое соединение. И единственное подключение к Интернету, которое у меня может быть здесь, - 300 Кбит / с с ограниченным 3G. Можете ли вы дать больше информации о том, как достичь первой части своего ответа, чтобы я мог купить много 3G-ключей и планирует улучшить скорость моей связи? – Huafu 2 June 2015 в 01:23
  • 2
    echo "bonding" >> /etc/modules echo -e "alias bond* bonding\noptions bonding max_bonds=10 mode=2 xmit_hash_policy=layer3+4 arp_interval=100 arp_ip_target=10.0.0.1" > /etc/modprobe.d/bonding.conf – Anatoli 3 June 2015 в 07:06
  • 3
    И поработите все нажатия на эту связь: echo "+tapX " >> /sys/class/net/bond0/bonding/slaves Проверьте его состояние с помощью: cat /proc/net/bonding/bond0 На этом этапе весь интернет-трафик должен проходить через bond0 на сервер в центре данных. Там вы должны установить маршрутизацию: echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p /etc/sysctl.conf iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE (eth0 должен быть интернет iface) – Anatoli 3 June 2015 в 07:09
  • 4
    Эта конфигурация связи (mode = 2 xmit_hash_policy = layer3 + 4) приведет к тому, что каждое новое соединение будет проходить через различные базовые VPN iface на основе хэша (рассчитанного из IP-адресов и портов, участвующих в подключении). Дополнительная информация: kernel.org/doc/Documentation/networking/bonding.txt . Это на самом деле больше похоже на второе решение из моего ответа, потому что вам нужна очень похожая (очень низкая джиттер и та же ширина полосы), что и базовые соединения для циклического соединения, чтобы функционировать правильно (в противном случае вы получаете много переупорядочения пакетов), и вы говорите что ваши соединения 3G. – Anatoli 3 June 2015 в 07:09
  • 5
    @Huafu, чтобы иметь первое решение, вам просто нужно изменить параметры связи вместо mode=2 xmit_hash_policy=layer3+4 y указать mode=0 (см. Ссылку @ kernel.org), но сначала проверьте, насколько похожи ссылки через 3G. Если их время ping отличается более чем на 2-3 мс, а дрожание - более 1 мс, у вас будет много переупорядочения пакетов, что эффективно уменьшит скорость агрегированной ссылки. Вам нужно будет проверить статистику агрегированных ссылок с помощью netstat -s (искать повторные передачи) и iperf -s / iperf -c <server_ip> -d. 1-й проверить производительность каждой ссылки, тогда мы сможем продолжить решение – Anatoli 4 June 2015 в 19:40

Другие вопросы по тегам:

Похожие вопросы: