Linux два канала интернет

Используем 2+ провайдера (первая часть)

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

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

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

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

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

Затем разберемся с основной таблицей, которая называется «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 ». Теперь приступим к правилам. Как раз по правилам и будет приниматься решения какой пакет по какой таблице будет маршрутизироваться.

Читайте также:  Terraria server для linux

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

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

p.s. Написано, чтобы понять самому и рассказать другим.

Источник

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

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

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

Из-за того, что мне надо было, чтобы два “внешних” IP адреса оказались на сетевых картах сервер-роутера, WiFi ADSL роутер пришлось значительно переконфигурировать. ADSL роутер был переведен в режим bridge и стал точкой доступа для мобильных устройств и моего основного компа. На всех устройствах моей сети основным шлюзом стоит сервер-роутер. Но это у меня такая структура сети, если у вас 2 обычные Lan провайдера никаких подготовительных действий с ADSL роутерем делать не надо.

Читайте также:  Set password linux command line

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

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

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

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

 #!/bin/sh #########adsl #наш ip первого провайдера IP1=91.122.15.xx #интерфейс нашего сервер-роутера к которому подключен этот провайдер IF1=eth3 #шлюз провайдера P1=91.122.0.1 #сеть провайдера P1_NET=91.122.0.0/24 #futures telecom. #Данные аналогично провайдера adsl IP2=217.15.19.xx IF2=eth2 P2=217.15.19.1 P2_NET=217.15.19.0/24 #очистка и удаление таблиц adsl и futures ip route flush table adsl ip route flush table futures ip rule delete table adsl ip rule delete table futures #создаем таблицы и метки для роутинга пакетов и задаем метки провайдерам ip rule add from $IP1 table adsl ip rule add from $IP2 table futures #1 метка - adsl провайдер ip rule add fwmark 1 table adsl #2 метка - провайдер futures ip rule add fwmark 2 table futures #создаем правила роутинга ip route add $P1_NET dev $IF1 src $IP1 table adsl ip route add default via $P1 table adsl ip route add $P2_NET dev $IF2 src $IP2 table futures ip route add default via $P2 table futures #сбрасываем кэш маршрутизации ip route flush cache 

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

 #Включаем nat #Прописываем правила для нашего основного рабочего компьютера, его ip 192.168.0.17 #eth0 это интерфейс сервер-роутера к которому подключена наш ADSL роутер #Все что приходит с него помечаем меткой 2 - провайдер futures iptables -t mangle -A PREROUTING -s 192.168.0.17/32 ! -d 192.168.0.0/24 -j MARK --set-mark 2 iptables -t mangle -A INPUT -i eth0 -j MARK --set-mark 2 iptables -t mangle -A OUTPUT -m connmark --mark 2 -j MARK --set-mark 2 #Прописываем сети для оставишихся компьютеров сети 192.168.0.0, исключая ip 0.17 #эти компьютеры метим меткой 1, как и в скрипте роутинга #Правила писать в одну строку, что разделено знаком "\" iptables -t mangle -A PREROUTING -m iprange --src-range \ 192.168.0.0-192.168.0.16 ! -d 192.168.0.0/24 -j MARK --set-mark 1 iptables -t mangle -A PREROUTING -m iprange --src-range \ 192.168.0.18-192.168.0.255 ! -d 192.168.0.0/24 -j MARK --set-mark 1 iptables -t mangle -A INPUT -i eth0 -j MARK --set-mark 1 iptables -t mangle -A OUTPUT -m connmark --mark 1 -j MARK --set-mark 1 iptables -t nat -A POSTROUTING -m mark --mark 1 -j MASQUERADE iptables -t nat -A POSTROUTING -m mark --mark 2 -j MASQUERADE 

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

Читайте также:  Checking if port is open linux

Источник

Оцените статью
Adblock
detector