Назад | Перейти на главную страницу

Маршрутизация на основе политик

Я нашел очень хорошую статью о балансировке нагрузки на http://www.diegolima.org/wordpress/?p=36.. Я не смог реализовать это, поскольку мои требования немного отличаются от чистой балансировки нагрузки.

У нас есть два подключения к интернет-провайдеру. Я подключил оба этих маршрутизатора к серверу Linux на eth0 (общедоступный ip 121.XXX.XX.XXX) и eth1 (192.168.129.XXX) соответственно, а наша внутренняя сеть находится на eth2 (192.168.1.XXX).

Я решил, что наш FTP должен использовать интерфейс eth1, Squid должен использовать eth0, Sendmail должен использовать eth0, а некоторые пользователи должны использовать eth0, а кто-то другой должен использовать eth1.

Может ли кто-нибудь сказать, возможно ли это, как я могу добиться этого с помощью iptables и iproute2? Пошаговая помощь очень ценится. Заранее спасибо.

Настроить IPROUTE2

echo "4        sendmail" >> /etc/iproute2/rt_tables
ip route add 121.XXX.XX.XXX/MASK dev eth0 src 121.XXX.XX.XXX table sendmail
ip route add 192.168.1.XXX/24 dev eth2 table sendmail
ip route add default via GATEWAY1 table sendmail
ip ru add from 121.XXX.XX.XXX lookup sendmail
ip ru add fwmark 2 table sendmail
ip route flush cache

Настроить IPTABLES

iptables -t mangle -I OUTPUT -p tcp --dport 25 -j MARK --set-mark 0x2
iptables -t mangle -I PREROUTING -i eth2 -p tcp --dport 25 -j MARK --set-mark 0x2

iptables -t nat -I POSTROUTING -s 192.168.1.XXX/24 -o eth0 -j SNAT --to-source 121.XXX.XX.XXX

Я сделал нечто подобное с помощью shorewall.
Все основано на маркировке и фильтрации пакетов и применении к ним некоторых правил. Все должно быть объяснено в личном кабинете: http://lartc.org/howto/index.html Процесс должен быть таким (мне нужно что-то перечитать, я сделал это несколько месяцев назад):

  • пакет приходит из внутренней сети

  • netfilter применяет к трафику какую-то отметку

  • правила, основанные на метках, направляют пакет через нужное устройство