The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Проблема с выбором таблицы маршрутизации"
Отправлено perece, 22-Май-07 09:40 
>>#ip rule list
>>0:      from all lookup 255
>>32762:  from 10.20.20.20 lookup isp2
>>32763:  from 10.20.20.9 lookup isp2
>>32764:  from 10.10.10.0/24 lookup isp1
>>32765:  from 100.0.0.100 lookup isp1
>>32766:  from all lookup main
>>32767:  from all lookup default
>это нужно было сразу запостить, тут нагляднее гораздо
>если написать from 10.0.0.2 lookup isp2 то все пойдут через второго. но
>когда пакет попадает в роутинг - src address еще не странслирован,
>т.е. именно 10.0.0.2 (не важно, проходил ли пакет через таблицу нат,
>"встречные" транслируются автоматически по connection tracking'у, но все равно - dst
>адрес до маршрутизации, а src - _после_ оной).
>соотв в твоем неудачном случае - либо разносить полиси роутинг и НАТ
>на разные хосты, или пробрасывать порт каким-нибудь tcpd или тому подобной
>"недопроксей". честно этого не сделать.

...
размышляя о дальнейшем возможном ходе дискуссии с Эдмоном придумал решение, которое будет работать в вашем случае (если у вас ядро 2.6, а не 2.4)
предпосылками являются а) то, что хук mangle в PREROUTING срабатывает _до_ nat (в POST тоже, но в данном случае это не важно. картинку можно посмотреть все в том же netfilter hacking how-to), и б) наличие модуля connmark в ядре 2.6.

в mangle/PREROUTING мы имеем еще нетронутые внешние адреса веб-сервиса. соотв. используя state match, можно анализировать коннектообразующие пакеты и метить connmark'ами соотв.
потом, там же в mangle/PREROUTING, используя connmark выставлять packet mark для _всех_ пакетов соединения, уже не анализируя их адресов (этот шаг необходим т.к. в RPDB можно указывать в качестве ключа packet mark, но не conn mark - routing code вообще ничего не знает о коннэкшнах и их отслеживании).
и наконец RPDB (Routing Policy Database) использующая packet mark для выбора таблицы маршрутов.

итого:
iptables -t mangle -A PREROUTING -m state --state NEW -d 10.10.10.10 -j CONNMARK --set-mark 10
iptables -t mangle -A PREROUTING -m state --state NEW -d 10.20.20.20 -j CONNMARK --set-mark 20
iptables -t mangle -A PREROUTING -m connmark --mark 10 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -m connmark --mark 20 -j MARK --set-mark 2
ip rule add fwmark 1 prio ... table isp1
ip rule add fwmark 2 prio ... table isp2
ну с остальным сам разберешься..

\^P^/

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.

На сайте действует частичное премодерирование - после публикации некоторые сообщения от анонимов могут автоматически скрываться ботом. После проверки модератором ошибочно скрытые сообщения раскрываются. Для ускорения раскрытия можно воспользоваться ссылкой "Сообщить модератору", указав в качестве причины обращения "скрыто по ошибке".



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру