Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование *NIX систем > Debian + iproute2 (или че-то другое)?


Автор: XpaH 19.5.2009, 12:51
Всем привет. Если кто-то разбирается в настройке маршрутов очень прошу помочь. Итак...

Дано: 

Севрер: 1 железяка - чисто маршрутизатором работает.
OS: Debian
Сеть:  В серваке 4 интерфейса - 3 провайдера и 1 локалка.
     PPP0 - Пров1
     PPP1 - Пров2
     Eth8 - Пров3
     Eth2 - Lan

Сервер работает нормально, все интерфейсы подняты, все у всех провайдеров работает, все маршруты по портам прокинты в Lan так как надо. 

Проблема:
Трабла в том, что у всех провайдеров есть одна "внутренняя" пересекающаяся подсеть.
10.0.0.0/255.0.0.0

В связи с этим я route для этой подсети могу настроить только на одного провайдера, при этом другие 2 перестают работать...

Например, если я пропишу следующие строки:
Чтобы работал Пров1:
route add -net 10.0.0.0 netmask 255.0.0.0 dev ppp1
Чтобы работал Пров2:
route add -net 10.0.0.0 netmask 255.0.0.0 dev ppp0
Чтобы работал Пров3:
route add -net 10.0.0.0 netmask 255.0.0.0 dev eth8

При этом работает один из провайдеров. Пользователи других двух провайдеров зайти на сервер уже не могут, т.к. их роутит не на тот интерфейс.

Задача: Сделать так, чтобы работали все 3 провайдера одновременно и пакеты уходили на нужный интерфейс.

Возможные решения: Люди говорят, что как-то можно нарулить все это дело через iproute2, но естественно как это сделать я сам не знаю. Еще есть вариант - подменивать ИП адреса разных провайдеров например на 20.0.0.0 и 30.0.0.0 соответственно, а там уже разруливать нормально. Дело в том, что у меня есть только 1 сервер и все надо сделать именно на нём. 

Желающие помочь, прошу пишите свои рекомендации здесь. Тем кто на 100% уверен, что он знает как это делается и может помочь настроить, можете стукнуть в icq 304-40пять.

Спасибо за внимание!

Автор: ZeeLax 20.5.2009, 05:17
Цитата(XpaH @  19.5.2009,  15:51 Найти цитируемый пост)
Тем кто на 100% уверен, что он знает как это делается и может помочь настроить, можете стукнуть в icq 304-40пять.

А 50 баксов дадите?

Зря вы написали слово "внутренняя" в кавычках - она ведь в самом деле внутренняя. К тому же, определитесь с целью. Что нужно? Доступ с сетей провайдеров на сервер или доступ из вашей локальной сети в сети провайдеров?

Автор: XpaH 20.5.2009, 10:16
Цитата

А 50 баксов дадите?


В случае если все будет работать, то дадим.

Цитата

Зря вы написали слово "внутренняя" в кавычках - она ведь в самом деле внутренняя. К тому же, определитесь с целью. Что нужно? Доступ с сетей провайдеров на сервер или доступ из вашей локальной сети в сети провайдеров?


Мне кажется, все подробно расписано было...

Пользователи всех провайдеров могут попасть на наш сервер. Каждый по своему каналу, пакеты до сервера уже доходят нормально, но обратно все пакеты идут только на один из выбранных мною интерфейсов. Т.е. если я выбрал Пров1, то пакеты приходят от каждого провайдера по своим проводам, а назад уходят по Пров1, в итоге работает все только у Пров1 абонентов... 

Задача именно разруливать пакеты с нашего сервера на каналы провайдеров.

Вариант 1:
Как-то роутинг настроить хитро, чтобы пакеты пришедшие по одному интерфейсу уходили на этот же интерфейс.

Вариант 2: 
Все приходящие пакеты от пользователей у кого IP в сети 10.0.0.0 (Пров1), меняем IP на 20.0.0.0 на самом интерфейсе... Потом пакеты гуляют по локальной сети, как 20.0.0.0, потом направляем эту сеть на интерфейс Пров1, а там обратно меняется IP адрес на 10.0.0.0 и уже по этому самому интерфейсу возвращаются пакеты к пользователю.

Вариант 3:
Ваш вариант.

Автор: ZeeLax 21.5.2009, 08:38
Вариант 2 пока самый подходящий. Уточнения:
1) создаём три таблицы, в каждой - маршрут по умолчанию в соответствующий интерфес (/etc/iproute2/rt_tables)
2) делаем на входе SNAT (iptables)
3) ответные пакеты маркируем в зависимости от адреса назначения (fwmark в iptables)
4) по марке заставляем их пройтись по нужной таблице (правила (rules) в iproute2)
5) делаем для них DNAT.
Примерно так.

Автор: ZeeLax 21.5.2009, 11:21
А ещё, скажите... у вас какие адреса от провайдеров? В принципе, можно и без ната обойтись. И ещё - какими сервисами пользуются клиенты на вашем сервере?

Автор: XpaH 21.5.2009, 13:07
Вот условно схема всей моей сети. Обязон такая нужна, тут без вариантов (советы типо подели сети просто не канают). К тому же данная схема работает нормально, все пашет, пользователи заходят нормально. Единственная проблема с одной "серой" подсетью (10.0.0.0). 
user posted image

Вот схема сети и проблема пересечения подсетей провайдеров:
user posted image


При этом:
1)  если я прописываю маршрут:
     route add -net 10.0.0.0 netmask 255.0.0.0 dev ppp0
     То работает все у абонентов ДОМ, а абоненты ТВТ и ТТК не пашут.

2)  если я прописываю маршрут:
     route add -net 10.0.0.0 netmask 255.0.0.0 dev ppp1
     То работает у абонентов ТВТ, абоны ДОМ и ТТК не пашут

3)  если я прописываю маршрут:
     route add -net 10.0.0.0 netmask 255.0.0.0 dev eth8
     То работает у абонентов ТТК, абоны ДОМ и ТТК не пашут


Автор: ZeeLax 21.5.2009, 15:01
Так у вас тут типичная ситуация. В разговоре по ICQ выяснилось, что пользователи каждой сети обращаются к серверу по адресу, висящему на интерфейсе "своего" провайдера. Идём на lartc.org давим там "Dive in!" и читаем про правила. Ну, или первый вариант с баксами smile

Автор: ZeeLax 22.5.2009, 05:15
Во вчерашнем разговоре с ХраНом в ICQ выяснилось, что дела обстоят несколько по-другому - сервисы находятся на серверах в локальной сети, а не на маршрутизаторе. Это конечно следовало из фразы
Цитата(XpaH @  19.5.2009,  15:51 Найти цитируемый пост)
Севрер: 1 железяка - чисто маршрутизатором работает.

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

Решение.
Берем в руки модуль conntrack. С помощью iptables маркируем все входящие пакеты на интерфейсе eth2 в зависимости от их оригинального адреса назначения:
Код

iptables -t mangle -A PREROUTING -i eth2 -m conntrack --ctorigdst 217.23.xxx.xxx -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -i eth2 -m conntrack --ctorigdst 89.251.xxx.xxx -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i eth2 -m conntrack --ctorigdst 91.144.xxx.xxx -j MARK --set-mark 3

Создаём три таблицы для iproute2
Код

cat >> /etc/iproute2/rt_tables << EOF
100    ttk
101    tvt
102    dom
EOF


Заполняем таблицы маршрутами к провайдерам (в нашем случае это один маршрут через езернет и два через пэ-пэ-пэ)
Код

ip route add 217.23.xxx.xxx/xx dev eth8  proto kernel  scope link  src 217.23.xxx.xxx  table ttk
ip route add default via 217.23.xxx.xxx dev eth8 table ttk
ip ro add default dev ppp1  scope link  ta tvt
ip ro add default dev ppp1  scope link  ta dom

Добавляем правила, для каждой марки
Код

ip rule add fwmark 1 table ttk
ip ru add fwmark 2 ta tvt
ip ru add fwmark 3 ta dom

Сбрасывем кэш
Код

ip route flush cache

и радуемся жизни smile

Автор: XpaH 22.5.2009, 09:14
Ага, подтверждаю, все работает. Огромное спасибо ZeeLax`у.

Автор: bilbobagginz 23.5.2009, 21:44
ZeeLax, молодец, 
если я правильно понял... это своеобразная реализация VLAN?

кстати, $50 получил ?


Автор: ZeeLax 24.5.2009, 08:18
bilbobagginz, спасибо.
Насчёт вланов... гм.. не знаю, мо-моему тут нечто другое.

P.S. Получил smile

Добавлено через 37 секунд
XpaH, тему, пожалуйста, отметьте решенной.

Автор: bilbobagginz 24.5.2009, 09:52
ZeeLax
vlan - это средство 2-го уровня (по модели OSI) для разделения физ. свичей на несколько виртуальных, а также для логического разделения на подсети.
идея в том, что добавляется VLAN ID, т.е. дополнительная координата. т.е. можно по ней перекидывать сообщения.
проблема в том, что это дополнительный модуль ядра. и я не знаю что будет труднее этому серверу - обозначать VLAN (на 2-м уровне), 
или делать маркиковку и переброс как ты сделал...

Автор: ZeeLax 24.5.2009, 14:41
Что такое влан я в курсе smile Активно использую. Но, в данном случае, имхо, вланы неприменимы для решения задачи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)