Jump to content
Sign in to follow this  
volkoff

Два маршрута по умолчанию одновременно

Recommended Posts

есть роутер (Linux RedHat9), на нем интерфейс во внутреннюю сеть и 2 в интернет - ррр0 и ррр3.

(есть еще несколько интерфейсов в другие локальные сети, но это не существенно).

Можно задать маршрут

ip r a default dev ppp0

а можно

ip r a default dev ppp3

все прекрасно работает.

а вот если я пытаюсь сделать вот это:

ip route add default equalize nexthop dev ppp0 weight 1 nexthop dev ppp3 weight 1

то все затыкается.

Eще есть вот такая бяка (мне кажется, что связана с предыдущей):

Если создать таблицу маршрутизации, например vpn2, промаркировать все пакеты идущие из внутренней сети с адреса 172.20.32.44 маркой 2, то задав вот такое правило:

ip rule add fwmark 2 table vpn2

мы все эти пакеты направляем в таблицу vpn2 а дальше уже маршрутизируем их как хотим.

Все прекрасно работает.

Но, ведь можно и по другому (попроще, без маркировки). Сразу дать команду:

ip rule add from 172.20.32.44 table vpn2

Но так к сожалению не работает.

Причем, самое интересное, пакеты в таблицу vpn2 попадают. Это можно судить по тому, что в этой таблице очень много маршрутов и с указанного адреса можно пойти по любому из них, КРОМЕ МАРШРУТА ПО УМОЛЧАНИЮ.

И еще один момент: если на интерфейсе (того самого маршрута по умолчанию, куда не хотят идти пакеты)сделан не маскарадинг, а SNАT, то второй вариант тоже работает.

Кто-нибудь сталкивался с подобным?

В чем может быть проблема?

ЗЫ: Думал, что возможно старый и глючной iproute2 (система-то старая). Обновил - не помогло.

Share this post


Link to post
Share on other sites

volkoff писал(а) Tue, 03 February 2009 15:36

И еще один момент: если на интерфейсе (того самого маршрута по умолчанию, куда не хотят идти пакеты)сделан не маскарадинг, а SNАT, то второй вариант тоже работает.

А под что реально маскарадится? Подозреваю, что в указанную таблицу маршрутизации пакеты попадаются после nat-POSTROUTING, поэтому трафик маскарадится под адрес интерфейса системного default route. У себя я маркирую трафик в mangle, а затем по метке отправляю его в нужную таблицу и по той же метке делаю SNAT.

Share this post


Link to post
Share on other sites
поэтому трафик маскарадится под адрес интерфейса системного default route

как это?

маскарадится вот так:
iptables –t nat –A POSTROUTING –o ppp0 -j MASQUERADE
iptables –t nat –A POSTROUTING –o ppp3 -j MASQUERADE

вот маршруты по умолчанию:
ip r a default dev ppp0 
ip r a default dev ppp3 table vpn2 

и почему же вот так
IPTABLES –t mangle –I PREROUTING 1 –s 172.20.32.44 –d ! 172.20.0.0/16 –j MARK -–set-mark 2
ip rule add fwmark 2 table vpn2

работает,
а вот так
ip rule add from 172.20.32.44 table vpn2

не работает?

Share this post


Link to post
Share on other sites

volkoff писал(а) Thu, 05 February 2009 15:40

поэтому трафик маскарадится под адрес интерфейса системного default route

как это?

Например, есть ppp0 с адресом x.x.x.x и ppp1 с адресом y.y.y.y. Есть роуты:

ip r a default dev ppp0

ip r a default dev ppp1 t vpn

И есть правило, которое посылает пакеты в таблицу vpn. Тогда маскарадиться пакеты будут под адрес x.x.x.x, но при этом уходить через ppp1. Поэтому при использовании policy routing нужно применять SNAT, а не MASQUERADE.

Share this post


Link to post
Share on other sites
Поэтому при использовании policy routing нужно применять SNAT, а не MASQUERADE. 

c удовольствием применил бы SNAT, но беда в том, что адреса x.х.х.х и у.у.у.у. неизвестны - присваиваются динамически.
А чтобы задать SNAT нужно явно указать адрес интерфейса.
В MASQUERADE достаточно имени интерфейса, поэтому им и пользуюсь.

А под что реально маскарадится? Подозреваю, что в указанную таблицу маршрутизации пакеты попадаются после nat-POSTROUTING

Вобще-то самому жутко интересно после чего пакеты попадают в таблицу маршрутизации.
У меня сложилось впечатление, что ДО прохождения таблицы nat-FORWARD.
Я как-то очень сильно почудил:
- в nat-PREROUTING маркировал некоторые пакеты,
- в далее по этой марке направлял их в нужную таблицу маршрутизации,
- в таблице маршрутизации задавал маршрут по умолчанию,
- далее в nat-FORWARD пакеты сортировались (и перемаркировывались) в зависимости от того через какой интерфейс уходят,
- после этого опять в соответствии с маркой направлялись в нужную таблицу маршрутизации,
- а потом еще шейпились в соответствии с маркой.
(Ну а натились, соответственно в nat-POSTROUTING. Кстати тоже интересно - до того как шейпились (tc - htb) или позже?)
Такая дикая схема получилась случайно (в результате логической ошибки), но все работало. Чем я был очень сильно удивлен.

Share this post


Link to post
Share on other sites

volkoff писал(а) Sun, 01 March 2009 00:08

Поэтому при использовании policy routing нужно применять SNAT, а не MASQUERADE. 

c удовольствием применил бы SNAT, но беда в том, что адреса x.х.х.х и у.у.у.у. неизвестны - присваиваются динамически.

Известны. См. скрипты /etc/ppp/ip-up*.

Share this post


Link to post
Share on other sites

Столкнулся с подобной проблемой. Решения для себя пока не нашел.

Но вот в процессе изучения вопроса, натолкнулся на такой факт:

есть интерфейс смотрящий на провайдера ppp1024 ip xx.xx.xx.xx

есть правило в таблицах

iptables -t nat -A POSTROUTING -o ppp1024 -j SNAT --to-source xx.xx.xx.xx

имеем хитро навороченные полиси роутинг, в которых уже сам запутался.

но вобщемто вопрос такой, могут ли из-за не правильных полиси роутинг с интерфейса ppp1024 выходить пакеты с источником из локальных сетей. И еще более глупый вопрос, после прохождения правил ПОСТРОУТИНГ таблицы нат, может ли поменяться решение о дальнейшем следовании пакета (в часности исходящий интерфейс).

на практике такое происходит.

Share this post


Link to post
Share on other sites
См. скрипты /etc/ppp/ip-up*. 

хм... т.е. советуете задавать правила SNAT в этих скриптах?
поднялся интерфейс - задали правили с нужным адресом
упал - удалили (в ip-down)
поднялся опять (с новым адресом) - опять задали
в принципе, возможно это решение.
просто в голову не приходило, что можно вот так (можно сказать динамически) менять правила файерволла.

Share this post


Link to post
Share on other sites

Сделал так, как написано в предыдущем посте - все прекрасно работает!

Спасибо EvilShadow за подсказку.

В принципе тему можно закрывать.

Но все-таки не понятно почему со SNAT`ом все работает, а с маскарадингом работать не хочет.

Share this post


Link to post
Share on other sites

volkoff писал(а) Sat, 14 March 2009 20:31

Но все-таки не понятно почему со SNAT`ом все работает, а с маскарадингом работать не хочет.

Скорее всего потому, что исходящий интерфейс и соотв. маскарадный адрес определяется до того, как начинает работать полиси роутинг, поэтому пакеты уходят по нужным маршрутам, но с чужими адресами. Перечитывать топик и разбираться подробнее лениво Smile

Удачи.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...