Использование нескольких интернет-каналов для повышения надёжности соединения

()

Иногда для обеспечения надёжности соединения с интернет офис можно подключить сразу к нескольким интернет каналам. Распределить нагрузку между каналами можно различными способами.

Условимся что офисный сервер работает под управлением Debian Linux или одного из его клонов.

Договоримся о начальных условиях: у нас есть:

  • ADSL-модем, имеющий адрес 192.168.1.1 и работающий роутером для сети 192.168.1.0/24.
  • Кабельный модем, имеющий адрес 192.168.0.254 и работающий роутером для сети 192.168.0.0/24.
  • Локальная сеть 192.168.10.0/24.
  • Сервер с тремя сетевыми картами.

Для начала подключаем ADSL-модем к eth0, кабельный модем к eth1 и локальную сеть к eth2. Далее определяемся что именно нам нужно. Самое простое - поделить трафик между каналами поровну. В случае падения одного из них - второй возьмёт на себя всю нагрузку. В этом случае файл /etc/network/interfaces будет выглядеть примерно так:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.1.0
        gateway 192.168.1.1
        metric 0

auto eth1
iface eth1 inet static
        address 192.168.0.253
        netmask 255.255.255.0
        network 192.168.0.0
        gateway 192.168.0.254
        metric 0

auto eth2
iface eth2 inet static
        address 192.168.10.1
        netmask 255.255.255.0
        network 192.168.10.0

В этом случае таблица роутинга будет иметь вид:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.254.0   0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth2
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0        0 eth1

Здесь важен параметр metric. Если у нас есть несколько маршрутов по умолчанию с разными метриками, то запросы сначала отправляются по маршруту с меньшей метрикой, в случае не удачи используется маршрут с большей метрикой и так далее (на подобие MX-записей в DNS для почты). Если все маршруты имеют одинаковые метрики - трафик делится между ними поровну, но в случае недоступности одного из них - трафик будет делиться между остальными.

Если нам нужно чтобы использовался кабельный канал и только в случае его недоступности ADSL, то нужно для eth0 поставить метрику больше чем у eth1.

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

Ключевые слова: route, interfaces, debian.

Комментарии:

spamtrap 2008-03-06 15:49:13 (#)

>в случае не удачи используется маршрут с большей метрикой

ситуация: удачно отправили через eth1, а у провайдера, к которому подключены через eth1, инета нету. никак такая система не сможет переключиться на eth0

MooSE 2008-03-07 12:43:26 (#)

Как показла практика - всё работает нормально даже в этом случае.

tierpunk 2008-05-29 11:10:50 (#)

MooSE, спасибо за статью, мне как раз это и нужно, но как при этом использовать squid, и forwarding? как им указать использованием 2, или 3 интернет каналов, или нужно будет собирать еще один сервер и на нем поднимать сквид и форвардинг?

sergldom 2010-08-29 15:45:15 (#)

не работает так.
при выключении 1 кабеля - пинг виснет

MooSE 2010-08-29 18:04:47 (#)

Цитата:

не работает так.
при выключении 1 кабеля - пинг виснет

Да это вообще кривое решение. Посмотри в сторону более правильных с использованием ip route.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE

Сколько сейчас времени в мерибель tui.ru.

купить струю бобра