Перевод главы "Маршрутизация в
случае нескольких подключений к провайдерам." руководства Linux
Advanced Routing & Traffic Control HOWTO . Оригинал расположен здесь.
Дизайн и элементы оформления - с замечательного сайта http://www.opennet.ru |
||
---|---|---|
Prev | Chapter 4. Rules - routing policy database | Next |
________ |
На этом этапе обычно возникает два вопроса.
Первое – как маршрутизировать пакеты, ответные к пакетам,
приходящим,
например, от Провайдера1, к тому же
провайдеру.
Прежде всего, оговорим некоторые обозначения. Пусть $IF1 (if1 на
картинке)–
первый интерфейс, $IF2 –
второй. $IP1 – IP-адрес интерфейса $IF1,
$IP2
– соответственно, $IF2. Далее, $P1 – IP-адрес шлюза на стороне Провайдера 1,
$P2 – Провайдера2. И, наконец, $P1_NET –сеть, содержащая
$P1,
и $P1_NET - то же для $P2.
ip route add $P1_NET dev $IF1 src $IP1 table T1 |
Ничего выдающегося, просто устанавливаются маршруты к шлюзу и
маршрут по
умолчанию через этот шлюз, так же, как и в случае с единственным
каналом, но
маршруты располагаются в разных таблицах для каждого провайдера.
Заметьте, что достаточно указать маршрут сети, так как он определяет
способ доступа к любому
компьютеру в ней, включая шлюз, как и указано выше.
ip route add $P1_NET dev $IF1 src $IP1 |
ip route add default via $P1 |
ip rule add from $IP1 table T1 |
Этот набор команд гарантирует, что все ответы на трафик, входящий
через
определенный интерфейс, уйдут через тот же интерфейс.
Все это –настройка в общих чертах. Она будет действовать для всех
процессов,
выполняющихся непосредственно на маршрутизаторе, а также для локальной
сети с
маскарадингом. При отсутствии маскарадинга возможны два случая – в
вашей
сети задествовано
IP-пространство от
обоих провайдеров, или часть адресов одного провайдера маскарадится в
адресное
пространство второго. В обоих случаях потребуется указать правила,
выбирающие
маршрут наружу через одного из провайдеров на основе IP-адреса компьютера в локальной сети.
Второй вопрос – как распределять трафик, идущий через двух
провайдеров. Это
несложно, если двойной доступ настроен,
как показано выше.
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \ |
Это приведет к поочередному выбору маршрутов через обоих
провайдеров. Параметр
weight можно изменять для
увеличения доли маршрутов через какого-либо из
провайдеров.
Имейте в виду, что распределение не будет абсолютно точным, так как
оно
основано на маршрутах, а маршруты кэшируются в ядре.
Таким образом,
маршруты к часто используемым сайтам будут идти всегда (т.е. все время,
пока
маршрут остается в кэше ядра – прим. пер.) через одного и того же
провайдера.
Далее, если вы в самом деле хотите сделать все, что описано здесь, вам может быть полезно ознакомиться с патчами Джулиана Анастасова: http://www.linuxvirtualserver.org/~julian/#routes . Эти патчи делают многие операции более удобными.