Re: хитрый policy routing
В Срд, 21/05/2008 в 15:58 +0400, Sapytsky Ilya пишет:
> 19 мая 2008 г. 18:50 пользователь Покотиленко Костик
> <casper@meteor.dp.ua> написал:
> В Пнд, 19/05/2008 в 11:20 +0400, Sapytsky Ilya пишет:
>
> > 19 мая 2008 г. 10:37 пользователь Покотиленко Костик
> > <casper@meteor.dp.ua> написал:
> > В Пнд, 19/05/2008 в 09:38 +0400, Sapytsky Ilya
> пишет:
> > > вья Добрый день!
> > > пару дней тут изучал доку по policy routing.
> > > после прочтения так и не понял можно ли сделать
> вот такую
> > штуку:
> > > чтобы маршрут ставился в зависимости от
> интерфейса, по
> > которому пакет
> > > пришел?
> > > типа если пришло через eth0 - обратно все пакеты
> этого
> > соединения
> > > через этот интерфейс и отправлять.
> > > Если через eth1 - отправлять все пакеты этого
> соединения
> > через eth1.
> > > И есть default gw, через который отправлять все
> исходящие
> > соединения.
> >
> >
> > Шаршрутизируй по FWMARK, FWMARK выставляй в
> iptables. Как
> > известно в
> > iptables критериев мноооого. По входящему интерфейсу
> совсем не
> > проблема.
> >
> > хм... не понял как это сделать?
> > пока не понятна технология.
> > Почему не понятна - если пришел пакет через eth0, а default
> gw стоит
> > eth1 то будет следующее - пакет будет пытаться пролезть
> через eth0, но
> > при этом ip отправителя будет стоять от интерфейса eth1. Или
> я не
> > прав?
> > можно ли примерчик?
>
>
> Примерчика нет. Скажу сразу, я такое пытался делать давно, но
> у меня не
> получилось. В рассылке netfilter'а проскакивают такие темы, я
> был на
> правильном пути, но видать где-то не доглядел... Если в
> кратце, то
> принцип такой:
>
> 1. На интересующее входящее с внешней стороны соединение, на
> пакет
> начинающий соединение (SYN) ставишь CONNMARK в какое-нибудь
> значение.
>
> 2. На обратном пути (пакеты-ответы) будут иметь такое же
> значение
> CONNMARK. Поскольку iproute2 не умеет работать с CONNMARK, а
> работает с
> MARK, тут тебе нужно сделать --restore-mark чтобы скопировать
> значение
> CONNMARK в MARK.
>
> 3. С помощью альтернативных таблиц маршрутизации делаешь так,
> чтобы
> пакеты с соответствующей маркой шли куда тебе надо.
>
> Повторить для каждого интерфейса где нада такая фишка.
>
> у меня получилось примерно так же:
> на машине firewall (шлюз 2х dmz сетей) всё достаточно просто - mark1
> для входа и mark2 для выхода. никаких conntrack не надо, просто если
> пришло на eth2 отдать через eth3 и наоборот - всё просто.
> а вот на конечной машине не всё так просто оказалось...
>
> настройки роутинга:
> ip route add $GATE dev eth1 table ytk
> ip route add default via $GATE dev eth1 table ytk
> /sbin/ip rule add fwmark 1 table ytk
>
> GATE - гейт для второго подключения, не default на машине
>
> настройки огненной стенки:
> EXT - удаленная машина, TEST1 - конечная, на которой всё и делается...
> iptables -t mangle --append PREROUTING --protocol tcp --syn --source
> $EXT --dst $TEST1 --in-interface eth1 --jump CONNMARK --set-mark 1
> iptables -t mangle --append PREROUTING -m connmark --mark 1 --source
> $EXT --dst $TEST1 --in-interface eth1 --jump CONNMARK --restore-mark
> iptables --append INPUT -m connmark --mark 1 --source $EXT --dst
> $TEST1 --in-interface eth1 --jump ACCEPT
> до сюда отрабатывает хорошо, всё mark как надо...
>
> iptables -t mangle --append OUTPUT -m connmark --mark 1 --source
> $TEST1 --dst $EXT --jump CONNMARK --restore-mark
> iptables --append OUTPUT --source $TEST1 --dst $EXT --jump LOG
> --log-prefix " output eth1 finded "
> тут mark тоже ставиться как надо, но при этом на ip rule оно не уходит
> и пакет хочет выйти через eth0, хотя в ip rule указано, что надо через
> eth1 выходить.. Думал, что роутинг срабатывает раньше, чем mangle
> output работает, но по докам с картинками routing decision вроде как
> стоит позже.
>
> Вот на этом и застрял. Гугл ничего про эту ситуацию рассказать мне не
> смог.
> Может чего подскажете? Где я в 5 строчках мог накосячить?
> Спасибо!
Смотри, в INPUT попадают пакеты адресованные самому роутеру, в OUTPUT
попадают пакеты посылаемые самим роутером. На сколько я понял TEST1 и
роутер это разные машины, если это так то тут и косяк.
Честно говоря, я не въехал в схему подключения, можешь нарисовать?
--
Покотиленко Костик <casper@meteor.dp.ua>
Reply to: