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

Исходное сообщение
"Один шлюз, два провайдера и две таблицы маршрутов"

Отправлено kassy_k , 17-Дек-08 01:12 
Суть проблемы в следующем:

Есть роутер с тремя интерфейсами:
  rl0 - смотрит в сторону 1-го провайдера,
  rl1 - смотрит в сторону 2-го провайдера,
  fxp0 - смотрит в сторону локальной сети. Локальная сеть разделена на две подсети.

В качестве роутера комп с FreeBSD v.7.1 - STABLE.
На каждом из интерфейсов провайдеров установлен NAT. Ядро скомпилировано с поддержкой
множественных таблиц маршрутизации (ROUTETABLE=2). В таблицы внесены default-маршруты.
В первую таблицу для первого провайдера, во вторую - для второго.

Задача - банальна:
  Пользователей из локальной сети распределить по двум разным каналам.

Пытаюсь для этого использовать новую примочку для ipfw - setfib.
Наткнулся на проблему: после преобразования NATом на втором интерфейсе пакеты пытаются уйти через первый интерфейс игнорируя при этом вторую таблицу маршрутов.

======
setfib 0 route add default XXX.XXX.XXX._GW
setfib 1 route add default YYY.YYY.YYY._GW

======
ipfw add 10 setfib 0 from 111.ZZZ.ZZZ.ZZZ to any
ipfw add 20 setfib 1 from 222.ZZZ.ZZZ.ZZZ to any

ipfw add 100 divert natA all from 111.ZZZ.ZZZ.ZZZ to any out via rl0
ipfw add 110 divert natA all from any to XXX.XXX.XXX._MY in via rl0
ipfw add 120 pass all from XXX.XXX.XXX._MY to any out via rl0

ipfw add 200 divert natB all from 222.ZZZ.ZZZ.ZZZ to any out via rl1
ipfw add 210 divert natB all from any to YYY.YYY.YYY._MY in via rl1
ipfw add 220 pass all from YYY.YYY.YYY._MY to any out via rl1

т.е. на 200-м правиле пакет из второй подсети преобразуется и вместо интерфейса rl1 пытается выйти через rl0.

Вопрос: как заставить преобразованные пакеты выходить через свой интерфейс?


Содержание

Сообщения в этом обсуждении
"Один шлюз, два провайдера и две таблицы маршрутов"
Отправлено VitalyMoiseev , 17-Дек-08 01:46 
>[оверквотинг удален]
>  rl0 - смотрит в сторону 1-го провайдера,
>  rl1 - смотрит в сторону 2-го провайдера,
>  fxp0 - смотрит в сторону локальной сети. Локальная сеть разделена
>на две подсети.
>
>В качестве роутера комп с FreeBSD v.7.1 - STABLE.
>На каждом из интерфейсов провайдеров установлен NAT. Ядро скомпилировано с поддержкой
>множественных таблиц маршрутизации (ROUTETABLE=2). В таблицы внесены default-маршруты.
>В первую таблицу для первого провайдера, во вторую - для второго.
>

зачем так сложно?
у меня роутер с 3 внешними каналами, все решается элементарно
основные куски правил:

поднимаем сколько нужно натов на разных ИП:

/sbin/natd -f /etc/natd.conf -a ip_isp_1   -p 8671
/sbin/natd -f /etc/natd.conf -a ip_isp_2   -p 8672
/sbin/natd -f /etc/natd.conf -a ip_isp_3   -p 8673

далее дивертами раскидываем разных клиентов на разные наты:

/sbin/ipfw add 819 divert 8671 ip from 192.168.101.0/24 to any out via fxp0
/sbin/ipfw add 820 divert 8672 ip from 192.168.103.0/24 to any out via fxp0
/sbin/ipfw add 821 divert 8673 ip from 192.168.104.0/24 to any out via fxp0

при этом с ip_isp_1 все уходит по дефаулт роутер, а вот второй и третий - форвардим на соответствующие ip роутеров провов:

/sbin/ipfw add 970 fwd ip_router_isp_2 ip from ip_isp_2 to any out
/sbin/ipfw add 980 fwd ip_router_isp_3 ip from ip_isp_3 to any out

ну и, естественно, диверты в нужные порты для входящих пакетов извне:

/sbin/ipfw add 990 divert 8671 ip from any to ip_isp_1 in via fxp0
/sbin/ipfw add 991 divert 8672 ip from any to ip_isp_2 in via re0
/sbin/ipfw add 992 divert 8673 ip from any to ip_isp_3 in via re1

все работает отлично
ps: фря 6.4

только надо не забыть в ядре скомпилисть формардинг для ипфв


"Один шлюз, два провайдера и две таблицы маршрутов"
Отправлено vagif , 17-Дек-08 09:48 

>[оверквотинг удален]
> /sbin/natd -f /etc/natd.conf -a ip_isp_2   -p 8672
> /sbin/natd -f /etc/natd.conf -a ip_isp_3   -p 8673
>
> /sbin/ipfw add 819 divert 8671 ip from 192.168.101.0/24 to any out via
> fxp0
> /sbin/ipfw add 820 divert 8672 ip from 192.168.103.0/24 to any out via
> fxp0
> /sbin/ipfw add 821 divert 8673 ip from 192.168.104.0/24 to any out via
> fxp0
>

ты же фактически просто распределяешь трафик РУЧКАМИ в соответствии от
внутренней подсети, а надо чтобы оно автоматически равномерно
распределялось...

я это решил с помошью pf (суперская штука!)
мне когда-то помогла эта статья http://www.openbsd.org/faq/pf/pools.html


"Один шлюз, два провайдера и две таблицы маршрутов"
Отправлено VitalyMoiseev , 17-Дек-08 10:55 
>ты же фактически просто распределяешь трафик РУЧКАМИ в соответствии от
>внутренней подсети, а надо чтобы оно автоматически равномерно
>распределялось...

Кому надо? Мне - не надо, мне как раз надо, чтобы разные клиенты по разным каналам работали. Приведенные мной строки - это суть того, как у меня сделано, все сложнее, там ИП нужнык клиентов из мискля берутся, в зависимости от их тарифных пакетов в разные каналы :)

Топикстартеру, как я понял, тоже не нужно что-то автоматически равномерно распределять


"Один шлюз, два провайдера и две таблицы маршрутов"
Отправлено vagif , 17-Дек-08 11:29 
>[оверквотинг удален]
>>внутренней подсети, а надо чтобы оно автоматически равномерно
>>распределялось...
>
>Кому надо? Мне - не надо, мне как раз надо, чтобы разные
>клиенты по разным каналам работали. Приведенные мной строки - это суть
>того, как у меня сделано, все сложнее, там ИП нужнык клиентов
>из мискля берутся, в зависимости от их тарифных пакетов в разные
>каналы :)
>
>Топикстартеру, как я понял, тоже не нужно что-то автоматически равномерно распределять

ну может я неправильно понял вопрос...
но у меня была задача
1. обеспечить РАВНОМЕРНОЕ занимание обоих каналов
2. в случае падения одного канала, чтобы все перетекало в другой


"Один шлюз, два провайдера и две таблицы маршрутов"
Отправлено kassy_k , 17-Дек-08 10:45 
VitalyMoiseev респект и увжуха! :-)

Сделал по предложенному. Просмотрел логи. Пакеты ходят непонятно как, но РАБОТАЕТ!

Огромное спасибо!


"Один шлюз, два провайдера и две таблицы маршрутов"
Отправлено VitalyMoiseev , 17-Дек-08 11:00 
>VitalyMoiseev респект и увжуха! :-)
>
>Сделал по предложенному. Просмотрел логи. Пакеты ходят непонятно как, но РАБОТАЕТ!
>
>Огромное спасибо!

Велкам. Все там очень просто :)
Суть - пакет после НАТА выходит уже с ИП этого ната и, понятно, пытается уйти по дефаулт роуту. А мы его форвардим на нужный именно для этого ИП роутер. И все.