Опрос


Что для Вас Умный Дом?


Результаты

Source routing в Linux

24/11/2008 16:43:26

Довольно часто в маршрутизаторах на базе современных версий Linux требуется отправлять трафик на тот или иной интерфейс в зависимости от протокола или пользовательского адреса. Например, у нас имеются 2 интерфейса, один из которых дорогой, но быстрый, (eth0) а другой дешевый, безлимитный, но медленный (64К-128К) (ppp0). Как быть? Предположим, маршрут по умолчанию (default gateway) прописан на интерфейс eth0

Задача эта решается с помощью пакетов iproute и iptables. Сначала мы создаем два правила:

ip rule add from all fwmark 1 table iface1
ip rule add from all fwmark 2 table iface2

Проще всего прописать их куда-нибудь в /etc/network/if-up.d/ (для Debian).
Имея ввиду, что интефейс ppp0 является непостоянным, еще одно правило прописываем в /etc/ppp/ip-up.d/

ip route add default via 192.168.100.101 dev ppp0 table iface2

Теперь все пакеты, помеченные меткой "2" пойдут через iface2, в качестве которого выступает интерфейс ppp0.
Остается только средствами iptables пометить нужные нам пакеты. Например.

# Все пакеты по протоколу HTTP (порт 80) пойдут через ppp0
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 2
# Все пакеты с клиетского компьютера 192.168.0.85 пойдут через eth0
iptables -t mangle -A PREROUTING -s 192.168.0.85/32 -j MARK --set-mark 1

Не забудьте только, что если Linux используется в качестве NAT, добавить в iptables правила, например

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Или -j SNAT.

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:



Сортировка комментариев: Последние сверху | Первые сверху

2012-11-20 15:55:02 | Andrey_B
Евгений, да, верно, ошибка в тексте комментария. Исправил.


2012-11-19 18:00:55 | Евгений
Если я все правильно понял-то в примере :
Все пакеты с клиетского компьютера 192.168.0.85 пойдут через ppp0
iptables -t mangle -A PREROUTING -s 192.168.0.85/32 -j MARK --set-mark 1

пакеты должны идти через eth0 ?


2009-10-25 21:29:54 | Дмитрий
Благодарю, полезно!