URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 70306
[ Назад ]

Исходное сообщение
"iproute и локальные пакеты"

Отправлено Konstantin , 16-Ноя-06 12:39 
Есть LAN шлюз на Линуксе с двумя интерфейсами в Интернет.
Связка стандартная.
LAN - Linux - Internet
             - Internet

С помощью iproute2 и iptables настроил чтобы почта из LAN в Инет ходила по одному интерфейсу, а Веб и все остальное по другому.
На шлюзе ставлю MARK - в цепочке PREROUTING И потом iproute разруливает. Никаких вопросов

Но дело в том, что на Линуксе есть почтовый сервер, который тоже надо пускать по "почтовому" интерфейсу. Вся беда в том, что локальные пакеты в Линуксе поступают сразу на маршрутизацию, через mangle они проходят потом. И до iproute2 bи НЕГДЕ ПОСТАВИТЬ MARK.
Как быть в таком случае?


Содержание

Сообщения в этом обсуждении
"iproute и локальные пакеты"
Отправлено perece , 16-Ноя-06 18:25 
>Есть LAN шлюз на Линуксе с двумя интерфейсами в Интернет.
>Связка стандартная.
> LAN - Linux - Internet
>            
> - Internet
>
>С помощью iproute2 и iptables настроил чтобы почта из LAN в Инет
>ходила по одному интерфейсу, а Веб и все остальное по другому.
>
>На шлюзе ставлю MARK - в цепочке PREROUTING И потом iproute разруливает.
>Никаких вопросов
>
>Но дело в том, что на Линуксе есть почтовый сервер, который тоже
>надо пускать по "почтовому" интерфейсу. Вся беда в том, что локальные
>пакеты в Линуксе поступают сразу на маршрутизацию, через mangle они проходят
>потом. И до iproute2 bи НЕГДЕ ПОСТАВИТЬ MARK.
>Как быть в таком случае?
как вариант:
у тебя на обоих ифейсах в инет реальные адреса?
можешь ли ты заставить почтовик биндиться к ip того ифейса, через который летает почта?
если да, то просто разрули при помощи iproute2 используя src addr как routing key

\^P^/


"iproute и локальные пакеты"
Отправлено Digiman , 25-Окт-08 02:15 
У меня проблема другого плана: шлюз на Debian 4.0 (ядро 2.6.18) Маршрутизатор на 3 интерфейса, непосредственно к шлюзу интернет не подключен.
eth0: 192.168.20.3
eth1: 192.168.33.2
eth2: 192.168.31.2

дефолтным шлюзом в таблице main стоит 192.168.31.222 через eth2, но трём пользователям из подсети 192.168.31.0/24 нужно сделать таблицу, чтобы они ходили в инет через 192.168.33.26.
Простая маршрутизация по источнику даёт им только дефолтный шлюз на инет. а локалка не работает (двадцать одна подсеть! Из них 19 подсетей клиент не видит)
маркировка пакетов (один из проблемных адресов клиентов 192.168.31.217):
iptables -t mangle -A PREROUTING -s 192.168.31.217 -d 192.168.0.0/16 -j MARK --set-mark 1

т е пакеты исходящие с адреса 192.168.31.217 с адресом назначения, который начинается на 192.168 (таких в инете нет)маркируются меткой 1

далее задаём правило для пакетов с меткой 1:
ip rule add fwmark 1 table main

Не работает! всё пакеты идут на дефолтный шлюз из личной таблицы клиента.
При этом раскладе клиент видит только 2 подсети: свою и ту, в которой его интернет-шлюз
Пробовал прописывать в личную таблицу клиента локальные маршруты, но похоже там какой то замудрёный синтаксис, который нигде не описан. Локальные маршруты не принимаются из за ошибки в синтаксисе. Как ни бился, ничего не получилось.

Пробовал делать наоборот. Создавал таблицу с 192.168.33.26 в качестве дефолтного шлюза.
Только не привязывал по источнику, а направлял в эту таблицу только маркированные пакеты с меткой 1:

iptables -t mangle -A PREROUTING -s 192.168.31.217 -d ! 192.168.0.0/16 -j MARK --set-mark 1

т е теоретически должно быть так:
если пакет от 31,217 адресован в локалку. он попадает в таблицу main и направляется по соответствующему маршруту в нужную подсеть. если пакет с 31,217 адресован в интернет (не соответствует шаблону 192.168.0.0/16) то он маркируется меткой 1 и попадает в таблицу inet3326, где прописан только дефолтный шлюз 192.168.33.26.
На практике: локалка у клиента работает нормально, инет не работает. При попытке протрассировать какой нибудь интернет сервер, например ya.ru, трассировка идёт только до интерфейса интернет шлюза 192.168.33.26, далее превышен интервал ожидания для запроса. То есть пакеты в инет идут не через таблицу main, а через таблицу inet3326. Я подозреваю, что не доходят обратные пакеты из интернета.

Что посоветуете? как поступить? Мне больше нравится последний описанный вариант, если бы он работал. он более гибкий и по моему мнению, правильный.