| Перевод главы "Маршрутизация в
случае нескольких подключений к провайдерам." руководства 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 . Эти патчи делают многие операции более удобными.