Последние статьи
- Твердотельный датчик направления и скорости ветра. Эксперимент
- iPhone на стене в качестве панели управления домом
- MegaD-16M-XT - подсветка выключателей и не только
- Переделка выключателей в кнопки и мини-обзор текущего рынка
- RadSens - модульный счетчик Гейгера с интерфейсом I2C
- "U" - значит универсальный. Обзор модуля MegaD-16U-XT
- SCD4x - современная альтернатива для измерения концентрации CO2
- HTU31D - новый датчик температуры и влажности с нагревательным элементом
- Измерение коэффициента пульсации ламп с помощью MegaD-2561
- Использование солнечных панелей в качестве датчика освещенности
- Согласование датчиков с выходом типа TTL со стандартными входами контроллера
- DPS368 - датчик атмосферного давления индустриального класса повышенной точности
- DS18B20 Waterpoof - импортзамещение
- TMP117 - высокоточный датчик температуры с интерфейсом I2C
- MegaD-16R-XT - расширитель на 16 релейных выходов
- MegaD-2561-RTC V3 - больше портов, зуммер и ИОН
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 | Дмитрий
Благодарю, полезно!