Linux два провайдера переключение

Обновлено: 03.07.2024

Здесь я хочу рассказать о настройке шлюза на Linux'e, для использования 2-х (и более) провайдеров интернета.

Для настройки мы будем использовать возможности iptables и утилиты ip из пакета, который как правило называется iproute2. А для решения поставленной задачи пакеты мы будем маршрутизировать на основе «policy routing» (т.е. маршрутизация на основе политик), а не «destination routing» (маршрутизация на основе адреса получателя).

Итак, приступим. Для начала определимся с переменными:

IF — это сетевые интерфейсы, которые смотрят в интернет, через наших провайдеров

IP — это наши внешние IP-адреса, которые нам выдали провайдеры

P — это шлюзы по умолчанию у наших провайдеров

Policy routing позволяет выполнять маршрутизацию на основе адреса источника поэтому перечислим сервера которые будут учавствовать:

Здесь SRV11 и SRV12 — это два айпишника одного и тогоже сервера (это важно!), это позволяет одному серверу обрабатывать входящие соединения с двух провайдеров. Конечно же, существуют и другие варианты реализовать эту возможность, но я буду использовать именно айпишники, мне кажется для начала так будет проше.

Ну а теперь самое интересное — пишем правило для маршрутизации. Первое что мы должны сделать это добавить свои таблицы маршрутизации, для этого необходимо отредактировать файл /etc/iproute2/rt_tables , например так:

Заполняем первую таблицу:

ip route add $P1_NET dev $IF1 src $IP1 table T1

ip route add default via $P1 table T1

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

ip route add $P2_NET dev $IF2 src $IP2 table T2

ip route add default via $P2 table T2

Затем разберемся с основной таблицей, которая называется «main». Ее мы видим, когда набираем ip route:

ip route add $P1_NET dev $IF1 src $IP1

ip route add $P2_NET dev $IF2 src $IP2

ip route add default via $P1 metric 10

Первые две строчки аналогичны предыдущим записям, только опущено «table main». В третьей строчке задается маршрут по умолчанию с указанием метрики.

На этом с маршрутизацией разобрались, чтобы посмотреть что у нас находится в таблице маршрутизации можно выполнить команду «ip route show table <имя таблицы>». Теперь приступим к правилам. Как раз по правилам и будет приниматься решения какой пакет по какой таблице будет маршрутизироваться.

ip rule add from $IP1 table T1

ip rule add from $IP2 table T2

Здесь мы указали, что если адрес источника равен первому внешнему адресу, тогда маршрутизация выполняется по таблице T1. Аналогично вторая запись. И наконец самое интересное:

ip rule add from $SRV11 fwmark 10 table T1

ip rule add from $SRV12 fwmark 20 table T2

Используя iptables мы можем маркировать интересующие нас пакеты и маршрутизировать их на основе этих меток. Собственно здесь мы добавили два правила: для пакетов, имеющих метку 10, использовать таблицу T1, для пакетов с меткой 20 — T2. Сейчас возможно не очень понятно для чего это может потребоваться, но из правил iptables все станет ясно. Для просмотра правил выполняем «ip rule», при маршрутизации они проверяются по порядку.

Ну вот, половина работы сделана осталось написать правила для iptables. Сейчас мы настроим сеть состоящую из шлюза и сервера. На шлюзе будет работать SSH и DNS, а сервер у нас будет виндовый на нем у нас RDP и SMTP. Сеть будет настроена таким образом, что через любой из внешних айпишников мы сможем подключаться к любому из серверов, а SMTP сервер будет выходить наружу через основного провайдера.

Ну и конечно, же начнем с переменных, причем вынесем следующие настройки в отдельный файл, это нам сильно пригодиться в будущем:

Назовем этот файл ipt_p1.conf . А содержит он данные о том, какой из интерфейсов является главным, а какой запасным (PRIM и SEC соответственно) и значения для маркировки пакетов.

Перейдем к основному файлу конфигурации iptables, назовем его ipt.conf. Запишем переменные ;-)

Это для того, чтобы меньше зависеть от дистрибутива — пути к исполняемым файлам.

Тут мы описали конфигурацию нашей сети, по порядку: локальный интерфейс, интерфейсы, которые смотрят к провайдерам, локальный айпишник и подсеть, айпишники, которые выданы провайдерами.

А это наш сервер, для которого мы настраивали маршрутизацию на основе политик, используя метки. Как я уже говорил этот сервер на своем сетевом интерфейсе имеет два айпишника, чуть ниже я расскажу для чего это нам пригодиться.

Зацепили внешние настройки, в данном случае это будет наш файл ipt_p1.conf .

Хватит о скучном, приступим к настройке, причем попытаемся все сделать красиво:

echo "[+] Flushing existing iptables rules. "

$IPTABLES -F -t nat

$IPTABLES -F -t raw

$IPTABLES -F -t mangle

$IPTABLES -P INPUT DROP

$IPTABLES -P OUTPUT DROP

$IPTABLES -P FORWARD DROP

Очищаем все правила iptables, в первой строке говорим, что делаем, почему по английски, а чтобы не было проблем с кодировками. Последние три строчки устанавливают правила по умолчанию — все пакеты не подходящие под список правил будут просто отброшены.

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

Теперь пройдемся по цепочкам iptables и заполним их необходимыми правилами:

echo "[+] Setting up INPUT chain. "

$IPTABLES -A INPUT -m state --state INVALID -j DROP

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Используя возможности модуля state мы отбрасываем некорректные пакеты и принимаем пакеты относящиеся к уже установленным соединениям либо ко вторичными соединениям (таким как передача данных в ftp).

$IPTABLES -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT

Принимаем подключения по SSH отовсюду.

$IPTABLES -A INPUT -i $LOCAL_ETH -s $LOCAL_NET -j ACCEPT

Локальный трафик будет ходить без ограничений, хотя это не всегда правильно.

$IPTABLES -A INPUT -i lo -j ACCEPT

Тоже на localhost.

Продолжаем с цепочкой OUTPUT:

echo "[+] Setting up OUTPUT chain. "

$IPTABLES -A OUTPUT -m state --state INVALID -j DROP

$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Эти правила аналогичны правилам в цепочке INPUT.

$IPTABLES -A OUTPUT -o $GLOBAL_ETH_PRIM -p udp --dport 53 -j ACCEPT

Мы разрешили работать нашему DNS серверу через основного провайдера

$IPTABLES -A OUTPUT -o $GLOBAL_ETH_PRIM -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT

А также разрешили выходить наружу по SSH.

$IPTABLES -A OUTPUT -o $LOCAL_ETH -d $LOCAL_NET -m state --state NEW -j ACCEPT

Опять же на исходящий локальный трафик ограничений нет.

Переходим к обработке трафика из локальной сети:

echo "[+] Setting up FORWARD chain. "

$IPTABLES -A FORWARD -m state --state INVALID -j DROP

$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Все те же два удобных правила.

$IPTABLES -A FORWARD -i $GLOBAL_ETH_P1 -d $SRV11 -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT

$IPTABLES -A FORWARD -i $GLOBAL_ETH_P2 -d $SRV12 -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT

$IPTABLES -A FORWARD -i $GLOBAL_ETH_P1 -d $SRV11 -p tcp --dport 3389 --syn -m state --state NEW -j ACCEPT

$IPTABLES -A FORWARD -i $GLOBAL_ETH_P2 -d $SRV12 -p tcp --dport 3389 --syn -m state --state NEW -j ACCEPT

Так у нас получается, что пакеты приходящие на первого провайдера пропускаются только на первый айпишник сервера, второго — на второй.

$IPTABLES -A FORWARD -i $LOCAL_ETH -s $SRV11 -j ACCEPT

$IPTABLES -A FORWARD -i $LOCAL_ETH -s $SRV12 -j ACCEPT

Разрашаем весь исходящий трафик с нашего сервера, опять же это не совсем правильно.

Далее идут правила NAT:

$IPTABLES -t nat -A POSTROUTING -s $SRV11 -p tcp --dport 25 -j SNAT --to-source $GLOBAL_IP_PRIM

$IPTABLES -t nat -A POSTROUTING -s $SRV12 -p tcp --dport 25 -j SNAT --to-source $GLOBAL_IP_PRIM

И опять самое интересное нам осталось на последок. Переходим к PREROUTING, здесь то мы и воспользуемся возможностью маркировать пакеты, которая нам понадобится для маршрутизации вот в этих двух строчках:

ip rule add from $SRV11 fwmark 10 table T1

ip rule add from $SRV12 fwmark 20 table T2

Итак, наши правила:

$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --dport 25 -j MARK --set-mark $MARK_PRIM

$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --dport 25 -j MARK --set-mark $MARK_PRIM

Все пакеты уходящие с нашего внутреннего сервера на 25 порт мы маркируем значением $MARK_PRIM. Давайте проследим, что это нам дает: исходящий пакет маркируется значением 10, значит маршрутизироваться он будет по таблице T1, а соответствуя этой таблице пакет должен уйти через первого провайдера, в цепочке FORWARD есть разрешающее правило, поэтому пакет безпрепятственно проходит — все правильно это нам и требовалось.

Теперь нам надо разобраться с соединениями идущими к нам. Сначала, конечно же, должен отработать DNAT:

$IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P1 -d $GLOBAL_IP_P1 -p tcp --dport 25 -j DNAT --to-destination $SRV11

$IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P1 -d $GLOBAL_IP_P1 -p tcp --dport 3389 -j DNAT --to-destination $SRV11

$IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P2 -d $GLOBAL_IP_P2 -p tcp --dport 25 -j DNAT --to-destination $SRV12

$IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P2 -d $GLOBAL_IP_P2 -p tcp --dport 3389 -j DNAT --to-destination $SRV12

Вроде бы все правильно, проверяем: пакет приходит на внешний интерфейс шлюза, в зависимости от принадлежности интерфейса провайдеру, он перенаправляется на первый или второй айпишник внутреннего сервера, сервер отвечает с того же(!) айпишника, пакет на шлюзе маршрутизируется по основной таблице, проходит через FORWARD и отправляется через основного провайдера, а вот это уже не правильно, ведь пакет мог прийти и через запасного провайдера. Исправляем, добавляя правила:

$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --sport 25 -j MARK --set-mark $MARK_PRIM

$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --sport 3389 -j MARK --set-mark $MARK_PRIM

$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --sport 25 -j MARK --set-mark $MARK_SEC

$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --sport 3389 -j MARK --set-mark $MARK_SEC

Теперь на обратном пути мы маркируем пакеты в соответствии с адресом, с которого они отправляются. Далее в дело вступают таблицы маршрутизации T1 и T2, поэтому решение через какой интерфейс отправлять пакеты принимается правильное.

Мы делаем первый, подготовительный шаг, который позволит в дальнейшем распределить и/или автоматически переключать трафик между провайдерами.


В наличии Linux машина, выполняющая функции роутера. У неё три интерфейса:

Маршрут по умолчанию через роутер первого провайдера R1.

Какая проблема у нас возникает, если всё оставить по умолчанию?

  1. Вы находитесь за пределами офиса и не можете подключиться к машине из локальной сети.
  2. Соединение с первым провайдером рухнуло.

Вам надо переключить трафик в ручном режиме, так что бы он начал идти через второго провайдера. Для этого достаточно изменить маршрут по умолчанию на IPR2. Вы пытаетесь подключиться по ssh на IP2 и… у вас ничего не получается. Почему?

Пакет пришел на Eth2. Был передан демону ssh. Демон сформировал обратный пакет и отправил его на 3-й уровень для маршрутизации. Таблица маршрутизации выглядит следующим образом:

Куда будет отправлен пакет? Разумеется, по маршруту по умолчанию. Но у нас нет соединения с первый провайдером и ответ мы не получаем.

Т.е. пакеты к нам приходят, но мы не можем отправлять ответы обратно.

Предполагается, что перед выполнением приведённых ниже команд, вы определили соответствующие переменные. Например:

Что бы всё заработало нам необходимо сделать так, чтобы все пакеты предназначенные для нашего Linux, приходящие на интерфейс Eth1 отправлялись обратно с интерфейса Eth1 на роутер первого провайдера IPR1. Пакеты, приходящие на интерфейс Eth2 отправлялись обратно с интерфейса Eth2 на роутер второго провайдера IPR2.

Создание дополнительных таблиц маршрутизации

Для начала создадим две дополнительные таблицы маршрутизации.

Название таблицы и номер могут быть произвольными. Главное, что бы они не заменяли три стандартных таблицы, которые уже есть в этом файле.

Таблица t1 предназначена для обслуживания трафика на интерфейс Eth1. Таблица t2 для интерфейса Eth2.

Добавление маршрутов

Сформируем таблицу маршрутизации t1. Сначала опишем сети подключённые непосредственно к сетевым интерфесам.

Маршрут по умолчанию в этой таблице должен ссылаться на роутер первого провайдера.

Аналогично формируем таблицу маршрутизации t2. Маршрут по умолчанию через роутер второго провайдера.

Таблица маршрутизации по умолчанию формируется автоматически, нам ничего с ней делать не надо.

Правила маршрутизации

Тут всё просто. Если IP source равен IP1, отправлять пакет в таблицу маршрутизации t1. Если IP source равен IP2, отправлять пакет в таблицу маршрутизации t2. Во всех остальных случаях использовать таблицу маршрутизации по умолчанию.

Поскольку по умолчанию используется таблица маршрутизации по умолчанию, достаточно создать всего два правила:

Конфигурационные файлы

Остался последний штрих – конфигурация системы так, чтобы всё что мы тут наваяли поднялось после перезагрузки сервера.

Конфигурация зависит от типа дистрибутива. Я покажу как это делается в CentOS и ему подобных.

Файл /etc/iproute2/rt_tables является «конфигурационным» и его достаточно отредактировать один раз.

Обратите внимание на то, что в конфигурационных файлах нельзя использовать переменные, поэтому вместо IP1, NET2 и т.п. следует писать реальные IP адреса.

Переходим в директорию /etc/sysconfig/network-scripts и создаём три файла:

route-eth0

route-eth1

route-eth2

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

Правила маршрутизации добавляем в файл /etc/rc.d/rc.local.

Вот и все. Мы готовы к следующим шагам по настройке распределения нагрузки и автоматическому переключению каналов.

З.Ы. Про один из вариантов использования нескольких таблиц маршрутизации можно почитать в моем блоге: Open VPN и хитрый роутинг.

Подключил я себе дома помимо стандартного ADSL канала еще один канал интернет через витую пару. За ADSL канал абонентская плата для меня незначительна, поэтому решил оставить этот канал как запасной. Воткнул оба канала интернет в свой сервер-роутер на антресоле (для этого пришлось перевести ADSL роутер в режим bridge) и стал думать как сделать, чтобы оба канала работали одновременно.
Все нижеприведенные конфиги подходят для ОС Linux.
Мысль была такая,

  • Пустить мой основной рабочий комп через новый интернет канал (этот комп больше всего потребляет трафика)
  • Сам сервер-роутер (обновления ОС) и все остальные мобильные WiFi устройства пустить через ADSL канал.


Настройка заключается в том, чтобы роутить мой компьютер через один интерфейс интернета, а всех остальных клиентов, включая сам сервер-роутер через другой интерфейс и в этом нам поможет программа iproute и iptables.

В конфиг /etc/iproute2/rt_tables добавляем идентификаторы наших двух провайдеров. Я добавил в файл 2 строки

Числа и названия идентификаторов можно задавать произвольные, но потом в скрипте роутинга надо обязательно ссылаться на эти же названия.

Пример скрипта роутинга, который ставим в автозагрузку компьютера

А теперь в iptables вместо правил Nat занесем эти строки

Дефолтным маршрутом сервер-роутера я сделал gateway adsl провайдера. Т.е. если выходить в интернет с самого сервера, то инет пойдет через adsl соединение.
Добавляя нужные ip адреса для меток 1 или 2 в конфиг iptables можно управлять нагрузкой каналов. Для этого надо перезапускать только правила iptables. Скрипт роутинга трогать не нужно.

Похожие статьи:

Запись опубликована в рубрике Firewall, iptables, Настройка ОС с метками iproute, iptables, netfilter. Добавьте в закладки постоянную ссылку.

20 комментариев Работа с двумя провайдерами интернет одновременно

Господа, продолжая вышеизложенную тему можно проще. Берется роутер Asus PX3042H с двумя WAN портами, оба канала суммируюся в процентном отношении и все. У меня ADSL-3Mbit и выделенка-6Mbit в итоге на 1 LAN порту 9Mbit.

Есть намерения в PC установить три сетевые карты(одна встроенная) и ClearOs с режимом MultiWAN (может для iPTV другой режим нужен). В две Internet(2) и IPTV, соответственно, третью соединить с одним из LAN портом ASUS. В другой соединить со Свич, в Порт WAN ASUS подключить Internet(1).
Вопрос в том как все это настроить. Мои знания в *NIX близкие к нулю.

я так понял, что будет подключен asus через lan порт, а еще фактичести также к серверу будет и свич подключен.
4 же сетевые на сервере вы планировали? 1 встроенная + 3 pci..

нет мне хотелось бы ограничится 3 сетевыми (2+1 встроенная). Схема сети точно такая как у Вас на рисунке и задачи б! Почему я и заинтересовался данной темой.
Вместо ADSL модема ASUS wl500gpv2(WAN-ethernet c PPPoE), сервер подключен двумя картами на два выхода ONT (Optical Network Terminal) -интернет(2) и IPTV, а вместо компьютера на вашей схеме свичи 10 портов. Свичи находится в другом помещении. Покупка новых switch или роутеров и перепрокладка сетей не планируется. IPTV рассматривается как бонус, т.е. хотелось, но не обязательно.

Ну так если почти все как у меня, то думаю проблем не должно быть если все по этой инструкции делать 🙂
Вот только с выбором linux дистрибутива надо определиться. ClearOS может и хорошо для новичка, но как подсказывает опят не все можно проделать через web интерфейс, возможно придется ковыряться внутри командной строки.
Давайте так. Начните с чего-нибудь, чтобы приступить к решению задачи. Самое простое на мой взгляд это сделать доступ в инет через провайдера без pppoe. Для новичка все может быть трудно, даже прописать ip на интерфейсе.
Как будут появляться конкретные вопросы пишите здесь, постараюсь ответить.

У меня приведен случай когда ip адреса провайдеров всегда одни и теже. Если они меняются, то тут не подскажу правильный конфиг.
Определить всё достаточно просто, надо провод провайдера к себе в компьютер воткнуть и получить адрес который выдал провайдер. В зависимости от операционной системы посмотреть нужными командами какой адрес сейчас у компьютера и маршрут по умолчанию.
Ну с адресом все итак понятно, а P1_NET будет шлюз по умолчанию, только на конце 0/24, а первые три цифры оставить как есть.

Т.к. я подключаюсь через dhclient, приходится изучать файл dhclient.leases. Первые три цифры тоже меняются, вот к примеру два подключения и данные каждый раз меняются:

fixed-address 100.68.229.190;
option subnet-mask 255.255.255.252;
option dhcp-lease-time 518400;
option routers 100.68.229.189;
option dhcp-message-type 5;
option dhcp-server-identifier 100.68.229.189;

fixed-address 100.84.105.213;
option subnet-mask 255.255.255.252;
option dhcp-lease-time 518400;
option routers 100.84.105.214;
option dhcp-message-type 5;
option dhcp-server-identifier 100.84.105.214;

Понятно что у вас с адресами и почему они так меняются. Это частные адреса сети 100.64.0.0 — 100.127.255.255 (маска подсети 255.192.0.0 или /10). Т.е провайдер выдает не белый адрес, а потом делает NAT на белый. Ну и вы еще свою сеть 192.168.2.0/24 натите. Двойной NAT в этом случает будет. Это нормально работает, но пробросы портов в таком случае уже не будут работать. Просто имейте это ввиду.
как я понял вы уже в качестве переменных все прописали в конфиг роутинга?

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

iptables -t mangle -A PREROUTING -s 192.168.2.0/24 ! -d xx.xx.xx.xx/32 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -s 192.168.2.0/24 -d xx.xx.xx.xx/32 -j MARK --set-mark 1

соотверсвенно маркируете сами меткой 1 или 2 в зависимости от провайдера. Таким образом первая строчка запрещает сети 192.168.2.0/24 маркировать трафик на ip xx.xx.xx.xx, а вторая строчка маркирует его нужной меткой провайдера. и доступ к этому ip будет именно с нужного провайдера. Соответсвенно можно задавать разные маски адресов и маркировать не только один ip но и целый диапазон.

Тут только один минус, в iptables нельзя задавать fqdn имена. Но вы почитайте возможно есть скрипты, которые сначала по fqdn вычисляют ip сайта и потом уже в iptables можно оперировать ip.

Сейчас я использую как мне кажется более красивое решение. Я ушел от настройки 2 провайдеров на linux машине в сторону RouterOS. (продукция Mikrotik ) Но это не бесплатно, но и не очень дорого. Принцип логики там в двух провайдерах аналогичный, а вот сайты на которые надо ходить через определенный ip просто добавляются в одну таблицу по имени dns и сразу все работает..

Очень часто в различных организациях возникает необходимость резервирования интернет-канала на случай каких-либо сбоев. Крупные организации могут позволить себе купить блок IP-адресов и AS и затем уже покупая каналы у нескольких интернет-провайдеров настроить BGP.

Для небольших компаний такая схема это непозволительная роскошь и обычно небольшие компании просто покупают интернет-каналы у нескольких провайдеров. И имея на каждом из каналов свои независимые адреса и прочие настройки каким-то образом (временами даже в ручную!) настраивают переключение каналов. Далее будет показан один из возможных способов организации автоматического переключения на резервный канал в случае сбоя основного и возврат обратно после восстановления связи.

Внесём немного ясности:

  • Шлюз работает под управлением Debian или Ubuntu Linux;
  • Основной интернет-канал на интерфейсе eth0 с адресом 1.1.1.2/24 и шлюзом 1.1.1.1 (у автора этих строк это ADSL от Таттелекома);
  • Резервный интернет-канал на интерфейсе ppp999 с адресом 2.2.2.2 (у автора этих строк это DOCSIS от ТВТ)

Для начала уточним (на всякий случай) как именно привязать ppp-соединение к ppp-интерфейсу с конкретным номером. Для этого нужно в соответствующий файле в "/etc/ppp/peers&quto; добавить строку:

Далее добавим ещё один параметр в тот же файл: метку соединения:

Кроме того этот интерфейс не должен при подъёме трогать маршрут по умолчанию. Это достигается примерно вот так:

Это нам пригодиться чуть позже. Сейчас нам нужно описать две дополнительные таблицы роутинга (по одной для каждого провайдера). Для этого в файл "/etc/iproute2/rt_tables" добавим следующие строки:

Теперь нам надо явно указать с какого интерфейса через какую таблицу роутинга искать маршруты. Для этого нужно выполнить вот такие команды (и заодно добавить в "/etc/rc.local" чтобы выполнялись при загрузке):

Разумеется надо чтобы в нужных таблицах были и нужные маршруты (как минимум маршрут по умолчанию). Для резервного канала это достигается созданием скрипта "/etc/ppp/ip-up.d/tbt" примерно такого содержания:

Для eth0 всё ещё проще: открываем файл "/etc/network/interfaces" и приводим конфигурацию eth0 к такому виду:

Теперь нужно перезагрузить сервер и после этого сервер будет по умолчанию идти в интернет через eth0, но при этом снаружи будет доступен по обоим каналам. Теперь создадим скрипт "/usr/local/scripts/check_internet.sh" следующего содержания:

Этот скрипт нужно запускать каждую минуту. Для этого в "/etc/crontab" нужно добавить строку:

Далее ещё нужно включить пересылку пакетов (forwarding) и поднять NAT для локальной сети на обоих интерфейсах. Примеры можно найти например тут и тут.

Читайте также: