У меня есть два интернет-соединения от двух разных интернет-провайдеров, и мне нужно сбалансировать трафик, исходящий из моей сети и между ней, между двумя интернет-провайдерами. Я использую Debian GNU / Linux.
Моя установка такова -
eth0
(192.168.0.0/24) - Локальная сеть
eth1
(192.168.1.0/24) - ISP # 1
eth2
(192.168.2.0/24) - ISP # 2
Моя локальная сеть подключена к этому серверу через eth0, а в поле установлен сервер DHCP cum Gateway для всех машин в локальной сети.
Сервер должен выполнять балансировку нагрузки между двумя Интернет-провайдерами, а также выполнять NAT.
Я следовал инструкциям по маршрутизации на lartc.org, но мне все еще нужны инструкции для правильной работы NAT.
Любая помощь будет оценена.
PS - я знаю о pFsense, но мне нужно использовать Linux.
источник
Ответы:
Я выполнил балансировку нагрузки, используя методы lartc.org и iptables , и обнаружил, что метод iptables легче понять и реализовать. Единственным недостатком является то, что вам нужна довольно свежая версия iptables, чтобы иметь возможность использовать модуль статистики.
Давайте предположим несколько вещей:
LAN: eth0: 192.168.0.1/24
ISP1: eth1: 192.168.1.1/24, шлюз: 192.168.1.2/24
ISP2: eth2: 192.168.2.1/24, шлюз: 192.168.2.2/24
Итак, вот как я бы сделал, используя метод iptables:
Таблицы маршрутов
Сначала отредактируйте / etc / iproute2 / rt_tables, чтобы добавить карту между номерами таблицы маршрутов и именами интернет-провайдеров.
Таким образом, таблица 10 и 20 для ISP1 и ISP2, соответственно. Мне нужно заполнить эти таблицы маршрутами из основной таблицы с помощью этого фрагмента кода (который я взял из hxxp: //linux-ip.net/html/adv-multi-internet.html)
И добавьте шлюз по умолчанию к ISP1 через шлюз этого ISP1:
Сделайте то же самое для ISP2
Итак, теперь у меня есть 2 таблицы маршрутов, по 1 на каждого провайдера.
Iptables
Хорошо, теперь я использую iptables для равномерного распределения пакетов по каждой таблице маршрутов. Больше информации о том, как эта работа может быть найдена здесь ( http://www.diegolima.org/wordpress/?p=36 ) и здесь ( http://home.regit.org/?page_id=7 )
NAT
Ну NAT это просто
источник
Ответ mefat мне очень помог, но вместо единовременного копирования всех правил основных таблиц в две таблицы ISP лучшим подходом может быть использование правила prio для добавления правил по умолчанию после основной таблицы.
Настройте / etc / iproute2 / rt_tables как обычно:
Обратите внимание, что
Показывает правила 0-> local, 32766-> main и 32767-> default. Смотрите
man ip
для более подробной информации.Важно, что процесс маршрутизации будет работать от правил низкого уровня до правил высокого уровня ... но 32767 - это не самое высокое правило #. Таким образом, если основная таблица маршрутизации не имеет маршрута по умолчанию (но может содержать все виды динамически изменяющихся маршрутов для vpns и т. Д.), То, если совпадение не выполнено, оно сбрасывается до значения по умолчанию (обычно пустого) и затем ищет более высокие правила prio.
Смотрите раздел 'throw' здесь: http://linux-ip.net/html/routing-tables.html
Итак, теперь настройка
и чтобы убедиться, что они смотрятся после основной таблицы:
использование
еще раз, чтобы убедиться, что эти правила выше, чем основные
Затем используйте CONNMARK mangling, как сказал mefat:
На что нужно обратить внимание: в
nodefaultroute
противном случае pppd должен быть установлен в main; когда устройство перезагружается, таблицы ISP1 / ISP2 очищаются, поэтому их необходимо восстановить с помощью сценария.Я использую скрипт в /etc/ppp/ip-ndomup,downcasts.d/dual-routing
Это балансировка нагрузки на основе соединений, поэтому я собираюсь рассмотреть использование нагрузки для мониторинга и замены правила статистики:
iptables -t mangle -R PREROUTING <n>
из пространства пользователя. Таким образом, если на одно соединение выполняется длительная загрузка, а другое соединение загружено незначительно, мы должны предпочесть слегка загруженное соединение.источник