Я читал о связывателе Linux. https://www.kernel.org/doc/Documentation/networking/bonding.txt

Моя цель состоит в том, чтобы улучшить доступность моего интернет-соединения в системе на основе Debian, комбинируя интерфейс Ethernet (eth0), подключенный к локальной сети, и мобильное интернет-соединение, предоставляемое модулем surf-stick/GSM. Последний вывод также отображается как интерфейс Ethernet на выходе ifconfig .

Я установил ifenslave и добавил в мой /etc/network/interfaces:

# Slaves
auto eth0
iface eth0 inet manual
  bond-master bond0
  bond-primary eth0
  bond-mode active-backup

auto eth1
iface eth1 inet manual
  bond-master bond0
  bond-primary eth0
  bond-mode active-backup

# Master
auto bond0
iface bond0 inet dhcp
  bond-slaves none
  bond-primary eth0
  bond-mode active-backup
  bond-miimon 100

После перезагрузки мой вывод ifconfig выглядит так

bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
    inet 192.168.178.47  netmask 255.255.255.0  broadcast 192.168.178.255
    inet6 fe80::ba27:ebff:feb6:c504  prefixlen 64  scopeid 0x20<link>
    ether b8:27:eb:b6:c5:04  txqueuelen 1000  (Ethernet)
    RX packets 436  bytes 34223 (33.4 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 312  bytes 80051 (78.1 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
    ether b8:27:eb:b6:c5:04  txqueuelen 1000  (Ethernet)
    RX packets 436  bytes 34223 (33.4 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 312  bytes 80051 (78.1 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    inet6 ::1  prefixlen 128  scopeid 0x10<host>
    loop  txqueuelen 1000  (Local Loopback)
    RX packets 2  bytes 78 (78.0 B)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 2  bytes 78 (78.0 B)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

То есть там есть связанный интерфейс. Странно eth0 также видно, в то время как eth1 (интерфейс резервного копирования, представляющий флешку) отсутствует.

Я могу получить доступ, если eth0 подключен к Интернету, но нет, если я удалю это соединение. То есть моя настройка ведет себя так, как будто серф-флешки нет.

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

Правка 1 Я мог бы решить частичную проблему, заключающуюся в том, что интерфейсы, по-видимому, не связаны правильно: похоже, это вызвано порядком загрузки (один из интерфейсов Ethernet от устройства USB). Потенциально драйверы загружаются только после того, как произойдет соединение. В любом случае, когда я запускаю связывание во время выполнения (изменяя /etc /network /interfaces и затем запуская /etc/init.d/networking restart), связывание, похоже, происходит. Тем не менее, я до сих пор не получить желаемое поведение.

Редактировать 2 Тем временем (к сожалению) удаленный ответ указал, что склеивание действительно может быть бесполезным для моего приложения. Если это правильно, возможно ли получить подобное поведение с помощью таблиц маршрутизации и как? Я хотел бы иметь одно из Ethernet-устройств (eth0) в качестве предпочтительного маршрута по умолчанию, когда его шлюз подключен к Интернету. Если нет, то должен быть добавлен дополнительный маршрут по умолчанию (через eth1) до тех пор, пока eth0 снова не подключится к Интернету.

1 ответ1

1

Связывание работает только в том случае, если вы можете создавать связи на обеих сторонах соединения. Кроме того, связывание работает на слое 2, поэтому, если у вас есть транспорт между слоями 3, это невозможно.

Другими словами, склеивание не работает для вашего варианта использования.

Как использовать два разных интернет-соединения одновременно - это часто задаваемые вопросы. Вы можете

1) Do failover: используйте только одно соединение, переключайтесь между ними с помощью пользовательских сценариев, когда одно соединение не удается. Основная проблема здесь состоит в том, чтобы определить "сбой", то есть, как определить, когда одно соединение не удалось. Одним из вариантов является пинг через регулярные интервалы к известному адресу.

2) Используйте протоколы, которые поддерживают множественную адресацию, такую как SCTP. К сожалению, они не завоевали популярность, поэтому это непрактично для большинства вещей, которые вы хотели бы сделать в Интернете.

Иначе мало что можно сделать из-за того, как работают широко используемые протоколы (TCP и UDP).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .