LINUX.ORG.RU
ФорумAdmin

Два провайдера:как обеспечить выход по определенным портам с конкретного интерфейса


0

1

Доброго времени суток!

Есть сервер с 3-мя сетевыми интерфейсами: один в локальную сеть и два смотрят в строну 2-х провайдеров, скажем с ип-адресами 1.2.3.4.5 и 1.2.3.4.6. Дефолтным гв сделан ип 1.2.3.4.5. С помощью iproute2 сделана возможность ухода пакетов именно с того интерфейса, с которого пришел запрос: ip route add default via 1.2.3.4.5 table TAB1 ip route add default via 1.2.3.4.6 table TAB2 ip route add default via 1.2.3.4.5 ip rule add from 1.2.3.4.5 table TAB1 ip rule add from 1.2.3.4.6 table TAB2

С помощью меток: ip rule add fwmark 0x1 table TAB2 и iptables -t mangle -A OUTPUT -p tcp -m multiport --dport 25,110,443 -j MARK --set-mark 0x1

Сделана возможность маршрутизации маркированных пакетов на порты 25,110,443 через интерфейс 1.2.3.4.6. Но столкнулся с проблемой: напр. выполняем команду telnet pop.yandex.ru 110 видим, что пакеты идут через нужный интерфейс 1.2.3.4.6. Но имеют ип 1.2.3.4.5 и соответственно соединения не происходит. Если добавить проебразование iptables -t nat -A POSTROUTING -p tcp -m multiport --dport 25,110,443 -j SNAT --to-source 1.2.3.4.6 то все нормально, адреса подменяются, но соединение все равно не происходит. Видно пакеты уходят к цели и на них отвечают, тем не менее результата нет. Очевидно пакеты своими не признаются. Есть ли возможность заставить систему правильно маршрутизировать пакеты? На самом сервере должна стоять почтовая программа (postfix) и сборщик почты (fetchmail)

Спасибо

Больно скудные таблицы TAB1 и ТАB2, это действительно все, что в них есть?

Подобавлять бы в них все соответствующие всем интерфейсам сети, включая lo.

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

IPv5 ?

это еще что, вон в соседней теме обсуждают сокращение бюджетных мест. так что, погоди, не только «ipv5» появится..
и грустно, и смешно.. даже не знаю, чего больше.

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

зачем в них добавлять роуты по всем интерфейсам? насколько я понимаю эти роуты живут в основной таблице

alex-123
() автор топика

ты запутался в настройке - при парвильной настроке небывает такой ошибки

суть вот в чем
ip route add default via ..... src local_ip

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

Если пакеты в эти таблицы попали, то там и умрут, без соответствующих в них маршрутах.

Бред, если в таблице не найден нужный маршрут, то пакет пойдет дальше по правилам и попадет в след таблицу. Нужно только в правильном порядке настроить ip rule.

swelf
()
Ответ на: комментарий от alex-123

пойми - то - что ты маркируеш OUTPUT пакеты - уже нисказываеться на то через какой интерфейс они решили выйти
они уже при создание - по роутингу были направлены тудато - и имеют исходящий адрес соответствующий

нельзя так рулить OUTPUT пакетами с этой же машины

опиши точнее что ты хочешь сделать

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

Точнее? есть 2 внешних интерфейса eth0 и eth2. У них белые адреса. Дефолтным назначен eth0. Я хочу, чтобы ТОЛЬКО локальные пакеты, порожденные самой машиной, на порты 25,110 и 443 уходили через eth2. В первом приближении у меня получилось. Маркирую пакеты и на выходе начу, прибивая верный для этого интерфейса ип-адрес. Пакеты убегают в инет, на них отвечают, они успешно достигают eth2 НО, как я понимаю, уже в самом сервере пакеты не достигают локального процесса, который породил запросы. Ошибка такова:

telnet pop.yandex.ru 110 Trying 87.250.250.37... telnet: connect to address 87.250.250.37: Connection timed out

Но tcpdump говорит, что ответ есть. Где-то эти пакеты умирают в недрах машины.

Если не делать нат, то с интерфейса eth2 начинают сыпаться пакеты с ип-ком eth0. Ну и естественно это не к чему не приводит.

alex-123
() автор топика
Ответ на: комментарий от ae1234

В /proc/sys/net/ipv4/conf/all/arp_filter и так стоит 0 по умолчанию.

Это не помогает.

А почему неправильно? Как иным путем решить проблему?

alex-123
() автор топика
Ответ на: комментарий от alex-123

тогда надо подробнее смотреть
постучись icq 79296695

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

Бред, если в таблице не найден нужный маршрут

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

С помощью ip rule мы напрявляем в ту или иную таблицу (порядок в этом случае не имеет никакого значения), здесь мы (вроде бы) регулируем что зарулить. Сегодня одни задачи, завтра другие, мне проще добавить по 4 строчки в созданные мною таблицы, и не ломать в дальнейшем над этим мозг и хуже от этого не будет. Нет ничего проще зарулить маркированные пакеты, но их нужно промаркировать, а здесь уже в зависимости от случая, бывает не все так очевидно.

Так-что, я бы продублировал маршруты в таблицах, маркировал в PREROUTING вместо OUTPUT, прописал 2 SNAT'а для внешних интерфейсов, с портами мне не нравится, типа

iptables -t nat -A POSTROUTING -o $INET_IFACE1 -j SNAT --to-source $INET_IP1

iptables -t nat -A POSTROUTING -o $INET_IFACE2 -j SNAT --to-source $INET_IP2

Ну и если уходят и возвращаются, проверить чем правила фильтра для одиного ифейса отличаютя от правил для другого.

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

Какой такой нужный маршрут, что-то может не попасть под default?

о default в твоем посте ничего не было, в него ессесно попадет все, и правила имеют приоритет, если в таблице нет маршрута для адреса, идем по следующему правилу. Достаточно вынести default route из таблицы main(в которой все присоедененные сети) в таблицу default, сделать приоритет таблицы main, допустим 100, все собственные правила делать с приоритетом большим 100, правило ip rule add from all tab default сделать с наибольшим приоритетом(32к вроде).

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