13 авг. 2009 г.

Linux Slackware. 2 провайдера, 1 шлюз и DMZ

Возникла задача настроить такую схему:
1. Один шлюз с двумя внешними и одним внутренним интерфейсами.
2. Для локальной сети шлюз раздает интернет.
3. Входящие подключения по 443-му порту с обоих провайдеров пробрасываются на одну из машин внутри сети (DMZ).

После долгих изысканий и чтений (до этого с настройкой роутинга мне сталкиваться толком не приходилось) было выбрано следующее решение:
Роутинг выполняется пакетами iproute2 и iptables (в Slackware свежей версии идут предустановленные). Входящие сессии от каждого из провайдеров маркируются определенной маркой посредством действия CONNMARK пакета iptables:
iptables -t mangle -A FORWARD -i $DEV_IP1 -m state --state NEW -j CONNMARK --set-mark $MARK_IP1
iptables -t mangle -A FORWARD -i $DEV_IP2 -m state --state NEW -j CONNMARK --set-mark $MARK_IP2


Пакеты, приходящие на внутренний интерфейс маркируются меткой соответствующей сессии:
iptables -t mangle -A PREROUTING -i $DEV_LOCAL -m state --state ESTABLISHED -j CONNMARK --restore-mark

В правилах роутинга (iproute2) указано, что пакеты с определенной меткой отправляются в соответствующие им таблицы.
$ip route add 192.168.0.0/24 dev eth1 src 192.168.0.113 table tpr1
$ip route add 192.168.3.0/24 dev eth0 table tpr1
$ip route add 127.0.0.0/8 dev lo table tpr1
$ip rule add fwmark $MARK_P1 table tpr1
$ip route add default via 192.168.0.1 dev eth1
$ip route add default via 192.168.0.1 table tpr1

$ip route add 192.168.2.0/24 dev eth2 src 192.168.2.114 table tpr2
$ip route add 192.168.3.0/24 dev eth0 table tpr2
$ip route add 127.0.0.0/8 dev lo table tpr2
$ip rule add fwmark $MARK_P2 table tpr2
ip route add default via 192.168.2.4 dev eth2
ip route add default via 192.168.2.4 table tpr2


Рекомендуется для прочтения замечательная заметка Павла Рочняка "Тонкости настройки Linux при подключении к двум и более провайдерам", которая в доступной форме описывает принцип работы iproute2; заметка в блоге HexBot "Используем 2+ провайдера с применением модуля CONNMARK" и уже упоминавшаяся статья Iptables из Википедии.

Комментариев нет:

Отправить комментарий