Preventer: Трафик локальных процессов в разные интерфейсы.

19 сообщений / 0 new
Последнее сообщение
Гость
Preventer: Трафик локальных процессов в разные интерфейсы.

Привет народ!

Ну вот, наконец, и мне понадобилась помощь.
Исходные данные такие:
Машина имеет 3 интерфейса.
eth0 192.168.1.2
eth1 172.0.0.2
eth2 10.10.10.2
default gw 192.168.1.1

Нужно выкидывать пакеты в зависимости от порта назначения:
110, 25, 80 через eth1
5190, 22 через eth2
остальное через eth0

Естественно что все, что для этого нужно сделано(ядро под это заточено)

Проблема вот в чем:
iptable -t mangle OUTPUT -p tcp --dport 110 -j MASK --set-mask 110
ip rule add fwmark 110 table lan
ip route add default via 172.0.0.1 dev eth1 table lan
ip rule flush cache

telnet mail.server 110
и все... тишина...

rudy (не проверено)

Думаю, что:
1. Маркировать пакеты надо на инпуте.
2. Исправить орфографию (возможно, это от перепечатки в форум)
Предлагаю такой вариант:
iptables -t mangle -A INPUT -p tcp -m multiport --destination-port pop3,smtp,http -j MARK --set-mark 110
3. Прописать в route add src (не знаю, почему, но без него не тот src ip получается)
ip route add default via 172.0.0.1 src 172.0.0.2 dev eth1 table lan

Ну, это с первого взгляда.
<span class='smallblacktext'>[ Редактирование 05.09.2005 - 16:59:03 ]</span>

Preventer (не проверено)

Все конечно хорошо. Спасибо за ответ. Но читаем не внимательно: Трафик ЛОКАЛЬНЫХ процессов... какой input может быть?!

rudy (не проверено)

Н-да. Проблема в том, что цепочка OUTPUT траверсится после routing decision, поэтому mark ставится уже после того, как его надо было использовать при принятии решения о роутинге. :-(
Пока в голову ничего не приходит. Сейчас разные manы почитаю, может и придумаю что.

Vitls
Аватар пользователя Vitls
Не в сети
Зарегистрирован: 21/09/2010

Погоди... а разве локальный процесс не пишет в локалхост?

Дело не в том как болезнь вылечить.
Дело в том как других заразить.

rudy (не проверено)

Есть вариант использовать другой комп в качестве роутера? Тогда все очевидно. Ну, и завернуть полезный траффик на реальный сервер через DNAT.

Preventer (не проверено)

Да нет. Так не пойдет.
Ну во первых: http://www.citforum.ru/operating_systems/linux/iptables/#TRAVERSINGOFTABLES
Это к вопросу о порядке прохождения цепочек.
А во-вторых, все нужно делать на одной, отдельно взятой машине.

rudy (не проверено)

Цитата из ссылки:
2 Принятие решения о маршрутизации. Здесь решается куда пойдет пакет дальше -- на какой адрес, через какой сетевой интерфейс и пр.
3 mangle OUTPUT Здесь производится внесение изменений в заголовок пакета. Выполнение фильтрации в этой цепочке может иметь негативные последствия.

rudy (не проверено)

Так что придется, наверное, ядро самому менять, чтобы он роутинг дисижн принимал после mangle OUTPUT. :-((
Другого способа пока придумать не могу.

Preventer (не проверено)

Мозг кипит. Так что-же такое?!
Придется исходящий пакет превращать, как минимум, в транзитный...
:)

Nick
Не в сети
Зарегистрирован: 20/09/2010

А пробовали отбирать не по fwmark, а по u32? Там можно и по портам, и по чему угодно.

rudy (не проверено)

По u32 можно только потом траффик пошейпить. Я по манам полазил - не нашел как привязать таблицу роутинга к классу пакету по u32, т.е. u32 маркировка влияет только на приоритезацию пакета, но никак ни на правила роутинга.
Буду рад оказаться неправ :-))

Nick
Не в сети
Зарегистрирован: 20/09/2010

Сорри, торможу. Только по fwmark, конечно. Можно попробовать ставить MARK в цепочке PREROUTING -t mangle.

rudy (не проверено)

2Nick: тоже не вариант (см. мой пост выше, идея аналогична, но :-( локальные пакеты через PREROUTING не проходят)

rudy (не проверено)

[quote=Preveventer]
Придется исходящий пакет превращать, как минимум, в транзитный...
[/quote]
Да. Только как? Может, пробросить какой-нибудь туннель с себя на себя? Или использовать tun/tap девайсы и юзерспейс демон какой-нибудь?

Nick
Не в сети
Зарегистрирован: 20/09/2010

Можно еще попробовать IMQ.

rudy (не проверено)

[quote=Nick]Можно еще попробовать IMQ.[/quote]
А кто это? Где посмотреть, плииз...

Nick
Не в сети
Зарегистрирован: 20/09/2010

http://www.linuximq.net/
http://lartc.org/howto/lartc.imq.html

Fitch (не проверено)

Может это подойдет?

ROUTE

Операция ROUTE служит для явной отмены решения о маршрутизации, принятого на уровне ядра и указания иного маршрута передачи пакета. Операция использует несколько опций, обеспечивающих управление маршрутизацией пакетов.

--oif <интерфейс>

задает отправку пакета через заданный именем интерфейс.

--iif <интерфейс>

меняет для пакета информацию о принявшем его интерфейсе (поле real_dev структуры skb, описанное на стр. 494).

--gw

указывает шлюз для маршрутизации пакета.

--continue

задает продолжение обработки пакета в цепочке правил. Эта опция не может использоваться совместно с –iif.

Да и еще,расхождение в доке(c iptables tutorial):
http://www.protocols.ru/modules.php?name=News&file=article&sid=102
Смотреть вот это - "Локально сгенерированные пакеты"

RSS-материал