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

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

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

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

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

23
задан 29 March 2016 в 01:35

4 ответа

Я делаю что-то как этот на работе с помощью Ubuntu 11.04. Мы запускаем инструмент конфигурирования брандмауэра Shorewall, который помимо того, чтобы быть превосходным в его задании, предоставляет некоторым элементарным несколько инструментов маршрутизации ISP, которые могли бы соответствовать Вашим потребностям. Можно найти некоторые документы об этом здесь: http://www.shorewall.net/MultiISP.html

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

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

11
ответ дан 23 November 2019 в 01:29

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

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

    sudo apt-get install ifenslave
    
  2. Загрузка связывая модуль ядра

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

    sudo vi /etc/network/interfaces
    

    Конфигурация в качестве примера, для объединения 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 помогают Wiki.

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

8
ответ дан 23 November 2019 в 01:29

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

Существует 2 типичных сценария, что gertvdijk и pl1nk обсуждали в одном из ответов:

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

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

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

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

6
ответ дан 23 November 2019 в 01:29

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

теперь я настроил соединения VPN через различных поставщиков ISP, с помощью объединенных интерфейсов бочки/касания (это не связывается, что объяснено в ответе № 8) с этой утилитой:

Сетевой баланс ISP Lincoln D. Глиняная кружка

Баланс загрузки Ваше Интернет-соединение через два или больше ISPs для улучшенной пропускной способности и надежности

Проект домой: https://lstein.github.io/Net-ISP-Balance/

Этот пакет разрешает Вам балансу загрузки домашний или малый бизнес Интернет-соединение через два или больше ISPs. Можно использовать его с единственным хостом, присоединенным к двум ISPs, или на машине маршрутизатора/брандмауэра для загрузки балансируют всю LAN. Сетевой трафик сбалансирован и через соединения ISP для увеличения загрузки и через способности загрузки, и если один ISP перестанет работать, то другой ISP вступит во владение автоматически.

Пропускная способность распределяется на уровне для каждого подключения. Это означает, что Вы не будете видеть агрегированную пропускную способность ни на какой конкретной загрузке или сравнительном тесте скорости, но Вы будете видеть преимущества, когда несколько передачи данных произойдут одновременно, например, когда несколько человек в Вашем домашнем хозяйстве передают фильмы потоком. Кроме того, протоколы передачи файлов мультисоединения, такие как БитТоррент, будет видеть преимущества выравнивания нагрузки.

это - основанная на Perl утилита для управления маршрутизацией, и iptables в Linux, идеально подходящем для наших целей, на самом деле, сначала создает таблицу маршрутизации для всех поставщиков и затем распределяет весь трафик LAN равномерно между поставщиками, чтобы понять, как утилита работает, предложите рассмотреть небольшой пример (тестовая конфигурация) для 3 isp + 1 LAN

 #cat /etc/network/balance.conf
 ##service    device   role     ping-ip           
 CABLE3       enp0s3   isp      10.0.2.2
 CABLE8       enp0s8   isp      10.0.3.2
 CABLE9       enp0s9   isp      10.0.4.2
 LAN          enp0s10  lan                        

 #cat /etc/network/interfaces
auto enp0s3
allow-hotplug enp0s3
iface enp0s3 inet dhcp

auto enp0s8
allow-hotplug enp0s8
iface enp0s8 inet dhcp

auto enp0s9
allow-hotplug enp0s9
iface enp0s9 inet dhcp

auto enp0s10
allow-hotplug enp0s10
iface enp0s10 inet static
    address 192.168.1.1/24

#Now work Net-ISP-Balance utility:

## Including rules from /etc/network/balance/pre-run/pre-run-script.pl ##
## Finished /etc/network/balance/pre-run/pre-run-script.pl ##
echo 0 > /proc/sys/net/ipv4/ip_forward
ip route flush all
ip rule flush
ip rule add from all lookup main pref 32766
ip rule add from all lookup default pref 32767
ip route flush table  2
ip route flush table  1
ip route flush table  3
ip route add  10.0.2.0/24 dev enp0s3 src 10.0.2.15
ip route add  10.0.3.0/24 dev enp0s8 src 10.0.3.15
ip route add  10.0.4.0/24 dev enp0s9 src 10.0.4.15
ip route add  0.0.0.0/0 dev enp0s10 src 
ip route add default scope global nexthop via 10.0.4.2 dev enp0s9 weight 1 nexthop via 10.0.3.2 dev enp0s8 weight 1 nexthop via 10.0.2.2 dev enp0s3 weight 1
ip route add table 2 default dev enp0s3 via 10.0.2.2
ip route add table 2 10.0.2.0/24 dev enp0s3 src 10.0.2.15
ip route add table 2 10.0.3.0/24 dev enp0s8 src 10.0.3.15
ip route add table 2 10.0.4.0/24 dev enp0s9 src 10.0.4.15
ip route add table 2 0.0.0.0/0 dev enp0s10 src 
ip rule add from 10.0.2.15 table 2
ip rule add fwmark 2 table 2
ip route add table 1 default dev enp0s8 via 10.0.3.2
ip route add table 1 10.0.2.0/24 dev enp0s3 src 10.0.2.15
ip route add table 1 10.0.3.0/24 dev enp0s8 src 10.0.3.15
ip route add table 1 10.0.4.0/24 dev enp0s9 src 10.0.4.15
ip route add table 1 0.0.0.0/0 dev enp0s10 src 
ip rule add from 10.0.3.15 table 1
ip rule add fwmark 1 table 1
ip route add table 3 default dev enp0s9 via 10.0.4.2
ip route add table 3 10.0.2.0/24 dev enp0s3 src 10.0.2.15
ip route add table 3 10.0.3.0/24 dev enp0s8 src 10.0.3.15
ip route add table 3 10.0.4.0/24 dev enp0s9 src 10.0.4.15
ip route add table 3 0.0.0.0/0 dev enp0s10 src 
ip rule add from 10.0.4.15 table 3
ip rule add fwmark 3 table 3
## Including rules from /etc/network/balance/routes/01.local_routes ##
# enter any routing commands you might want to go in
# for example:
# ip route add 192.168.100.1 dev eth0 src 198.162.1.14

## Finished /etc/network/balance/routes/01.local_routes ##
## Including rules from /etc/network/balance/routes/02.local_routes.pl ##
## Finished /etc/network/balance/routes/02.local_routes.pl ##
iptables -F
iptables -t nat    -F
iptables -t mangle -F
iptables -X
iptables -P INPUT    DROP
iptables -P OUTPUT   DROP
iptables -P FORWARD  DROP

iptables -N DROPGEN
iptables -A DROPGEN -j LOG -m limit --limit 1/minute --log-level 4 --log-prefix "GENERAL: "
iptables -A DROPGEN -j DROP

iptables -N DROPINVAL
iptables -A DROPINVAL -j LOG -m limit --limit 1/minute --log-level 4 --log-prefix "INVALID: "
iptables -A DROPINVAL -j DROP

iptables -N DROPPERM
iptables -A DROPPERM -j LOG -m limit --limit 1/minute --log-level 4 --log-prefix "ACCESS-DENIED: "
iptables -A DROPPERM -j DROP

iptables -N DROPSPOOF
iptables -A DROPSPOOF -j LOG -m limit --limit 1/minute --log-level 4 --log-prefix "DROP-SPOOF: "
iptables -A DROPSPOOF -j DROP

iptables -N DROPFLOOD
iptables -A DROPFLOOD -m limit --limit 1/minute  -j LOG --log-level 4 --log-prefix "DROP-FLOOD: "
iptables -A DROPFLOOD -j DROP

iptables -N DEBUG
iptables -A DEBUG  -j LOG --log-level 3 --log-prefix "DEBUG: "
iptables -t mangle -N MARK-CABLE3
iptables -t mangle -A MARK-CABLE3 -j MARK     --set-mark 2
iptables -t mangle -A MARK-CABLE3 -j CONNMARK --save-mark
iptables -t mangle -N MARK-CABLE8
iptables -t mangle -A MARK-CABLE8 -j MARK     --set-mark 1
iptables -t mangle -A MARK-CABLE8 -j CONNMARK --save-mark
iptables -t mangle -N MARK-CABLE9
iptables -t mangle -A MARK-CABLE9 -j MARK     --set-mark 3
iptables -t mangle -A MARK-CABLE9 -j CONNMARK --save-mark
iptables -t mangle -A PREROUTING -i enp0s10 -m conntrack --ctstate NEW -m statistic --mode random --probability 1 -j MARK-CABLE9
iptables -t mangle -A PREROUTING -i enp0s10 -m conntrack --ctstate NEW -m statistic --mode random --probability 0.5 -j MARK-CABLE8
iptables -t mangle -A PREROUTING -i enp0s10 -m conntrack --ctstate NEW -m statistic --mode random --probability 0.333333333333333 -j MARK-CABLE3
iptables -t mangle -A PREROUTING -i enp0s10 -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -i enp0s3 -m conntrack --ctstate NEW -j MARK-CABLE3
iptables -t mangle -A PREROUTING -i enp0s3 -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -i enp0s8 -m conntrack --ctstate NEW -j MARK-CABLE8
iptables -t mangle -A PREROUTING -i enp0s8 -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -i enp0s9 -m conntrack --ctstate NEW -j MARK-CABLE9
iptables -t mangle -A PREROUTING -i enp0s9 -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -d 127.0.0.0/8 -j DROPPERM
iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT   -p tcp --tcp-flags SYN,ACK ACK -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK ACK -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROPFLOOD
iptables -A INPUT   -i enp0s10 -s 0.0.0.0/0 -j ACCEPT
iptables -A OUTPUT  -o enp0s10 -d 0.0.0.0/0  -j ACCEPT
iptables -A OUTPUT  -o enp0s10 -d 255.255.255.255/32  -j ACCEPT
iptables -A OUTPUT  -p udp -s 0.0.0.0/0 -j ACCEPT
iptables -A FORWARD  -i enp0s10 -o enp0s3 -s 0.0.0.0/0 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A OUTPUT   -o enp0s3                 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A FORWARD  -i enp0s10 -o enp0s8 -s 0.0.0.0/0 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A OUTPUT   -o enp0s8                 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A FORWARD  -i enp0s10 -o enp0s9 -s 0.0.0.0/0 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A OUTPUT   -o enp0s9                 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A OUTPUT  -j DROPSPOOF
iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
iptables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE
iptables -t nat -A POSTROUTING -o enp0s9 -j MASQUERADE
## Including rules from /etc/network/balance/firewall/01.accept ##
## This file contains iptables statements that add additional firewall rules

# allow incoming domain packets -- needed for DNS resolution
iptables -A INPUT   -p udp --source-port domain -j ACCEPT
# allow incoming NTP packets -- needed for net time protocol
iptables -A INPUT   -p udp --source-port ntp -j ACCEPT
## Finished /etc/network/balance/firewall/01.accept ##
## Including rules from /etc/network/balance/firewall/01.accept.pl ##
iptables -A INPUT -p tcp -s 0.0.0.0/0 --syn --dport ssh -j ACCEPT
## Finished /etc/network/balance/firewall/01.accept.pl ##
## Including rules from /etc/network/balance/firewall/02.forward.pl ##
iptables -A FORWARD -p udp --source-port domain -d 0.0.0.0/0 -j ACCEPT
iptables -A FORWARD -p udp --source-port ntp    -d 0.0.0.0/0 -j ACCEPT
## Finished /etc/network/balance/firewall/02.forward.pl ##
echo 1 > /proc/sys/net/ipv4/ip_forward
## Including rules from /etc/network/balance/post-run/post-run-script.pl ##
## Finished /etc/network/balance/post-run/post-run-script.pl ##
0
ответ дан 23 November 2019 в 01:29

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

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