LINUX.ORG.RU
ФорумAdmin

advanced routing: разные gw в зависимости от порта/протокола


0

0

iproute2 позволяет делать src/dst роутинг, но с привязкой к src/dst хосту.

А можно ли огранизовать роутинг с привязкой к порту?

т.е. допустим если на сервер приходит запрос на порт 21, то роутить через gw1, а если на порт 80 - то через gw2.

Такое возможно?

anonymous
Ответ на: комментарий от Rost

да, и еще... если тебе нужно НАТить приватные адреса, то можно вобще обойтись одними iptables'ами :) пример:

GW1=10.1.0.1
GW2=10.2.0.1
iptables -t nat -I POSTROUTING -p tcp --dport 25 -j SNAT --to-source $GW1
iptables -t nat -I POSTROUTING -p tcp --dport 80 -j SNAT --to-source $GW2

Rost ★★★★★
()
Ответ на: комментарий от Rost

Нет, NAT-ить их как раз не нужно :)

Я нашел в path-o-matic расширение, которое и позволяет решить эту проблему - роутинг

iptables ... -j ROUTE

anonymous
()
Ответ на: комментарий от anonymous

Re: advanced routing: разные gw в зависимости от порта/протокола

С каких это пор в man iptables по умолчанию появилось упоминание о -j ROUTE ?

А форум как раз и служит для того, что бы задавать вопросы и делиться опытом.

По крайней мере, я задал вопрос и потом написал вариант решения возникшей проблемы, что бы другие люди уже имели готовый ответ (если воспользуются поиском).

Полагаю, мой вопрос все же лучше вопросов вида "как мне настроить маскарадинг"

anonymous
()
Ответ на: комментарий от anonymous

Ну правило практически аналогично вышеописанному Rost-ом.
Только у Rost-а подразумевается, что GW1 & GW2 (сетевые адаптеры) находятся на одном и том же компьютере, мне же нужно было отдавать пакеты с одного и того же интерфейса, но на разные роутеры (находящиеся, тем не менее, в одной локальной сети.

GW1 - первый роутер
GW2 - второй
оба смотрят в одну и туже сеть, как снаружи, так и изнутри (но в наружнюю - по разным каналам). На обоих реализуется NAT.

iptables patch-o-matic ROUTE.patch

modprobe ipt_ROUTE

$iptables -t mangle -A POSTROUTING -s $server -p tcp --sport 80 -j ROUTE --gw $GW1

$iptables -t mangle -A POSTROUTING -s $server -p tcp --sport 90 -j ROUTE --gw $GW2

Задача - пустить разные сервисы сервера по разным каналам для внешней сети (извне эти сервисы видны на разных компах), подзадача - не изменять адреса внешней подсети в пакетах, ходящих внутри локальной (внутренней) сети.

anonymous
()
Ответ на: комментарий от anonymous

Скажи пожалста по подробней как ты патч то поставил??

У меня например "iptables patch-o-matic ROUTE.patch" сказал "Bad argument `patch-o-matic'"...

anonymous
()
Ответ на: комментарий от anonymous

думаю можно обойтись без патчей. Маркируем пакет -j MARK 1, потом ip rule fwmark. Если все происходит не на одном маршрутизаторе - нужно использовать TOS.

anonymous
()
Ответ на: комментарий от anonymous

Можно наверное и без патчей, мне просто удобнее было манипулировать исключительно правилами Iptables.


По поводу установки patch-o-matic. Это набор патчей к ядру Linux для введения новых фич или фиксы старых в netfilter.


Скачиваем его последнюю версию, например
http://www.netfilter.org/downloads.html#pom-20030912


распаковываем, заходим в его диреторию
говорим

./runme extra

(так как ipr_ROUTE находится в разделе extra, а еще можно сказать ./runme base), выбираем нужный патч, применяем его, выходим.
Заходим в ядро Linux make menuconfig, в разделе netfilter config и видим новый раздел с добавленной опцией. Выбираем ее и после пересборки ядра этой опцией можно пользоваться.

anonymous
()

Можно маркировать пакеты iptables'ом и далее в зависимости от марки рулить в разные интерфейсы

anonymous
()
Ответ на: комментарий от anonymous

Мда, оказывается конструкция -j ROUTE чего то делает неправильно - 
пакеты хоть и уходят куда надо, но механизм conn-track не 
трабатывает, соединения не отслеживаются (их невидно в 
/proc/net/ip_conntrack). Разумеется файрволы на основе 

$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

не работают.

Надо искать какой то другой способ.


> Можно маркировать пакеты iptables'ом и далее в зависимости от марки рулить в разные интерфейсы

Как маркировать, понятно
$IPTABLES -t mangle -A FORWARD -s $IP -j MARK --set-mark 0x99

а как их потом рулить на разные интерфейсы?
Явно как то через "tc", только у меня никак не получается понять логику синтаксиса. Подскажите, пожалтста.

anonymous
()
Ответ на: комментарий от anonymous

..нашел я маны к iproute2, но все равно не работает:

./ip -V
ip utility, iproute2-ss020116

./ip rule add  fwmark 0x99 table test1
(test1 - заранее заданная таблица с default gw)

./ip rule ls
0:      from all lookup local
32765:  from all lookup test1
32766:  from all lookup main
32767:  from all lookup 253

Другими словами, fwmark правилами не воспринимается. 
Почему?

anonymous
()
Ответ на: комментарий от anonymous

спасибо.

и еще я забыл включить в ядре
и в ядре еще надо было включить
[*]   IP: advanced router
[*]     IP: policy routing
[*]       IP: use netfilter MARK value as routing key (NEW)

(именно поэтому ip rule add fwmark не отрабатывала)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.