Биллинговая система Nodeny

Главная категория => Курилка => Тема начата: killall от 14 Апреля 2010, 13:39:19



Название: два провайдера 2 шлюза
Отправлено: killall от 14 Апреля 2010, 13:39:19
подскажите возможноли реализовать:
1. есть 2 прова (P1, P2)
2. 2 шлюза (PS1,PS2)
Требуеться:
Порт 80 пускать через провайдера P1 шлюз PS1.
Весть остальной трафик через P2 шлюз PS2.
defaultrouter=PS1.
Как реальзовать через pf.


Название: Re: два провайдера 2 шлюза
Отправлено: killall от 14 Апреля 2010, 14:02:46
на данный момент найдена такой конфиг
Цитировать
lan_net = "192.168.0.0/24"
int_if  = "vlan2"

ext_if1 = "vlan3"
ext_if2 = "vlan4"

ext_gw1 = "10.128.0.1"
ext_gw2 = "172.28.0.1"

#  nat исходящие соединения на каждый интерфейс Интернета
nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)

#  по дефолту deny
block in  from any to any
block out from any to any

#  pass all исходящие пакеты на внутреннем интерфейсе
pass out on $int_if from any to $lan_net

#  pass in quick any пакеты, предназначенные для шлюза itself
pass in quick on $int_if from $lan_net to $int_if

#  балансировка исходящего tcp трафика от внутренней сети.
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin proto tcp from $lan_net to any flags S/SA modulate state

#  балансировка исходящего udp и icmp трафика от внутренней сети
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin proto { udp, icmp } from $lan_net to any keep state

#  Общие "pass out" правила для внешних интерфейсов
pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto { udp, icmp } from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp } from any to any keep state

#  маршрутизации пакетов с любого IP-адреса на $ext_if1 to $ext_gw1 и та же для $ext_if2 и $ext_gw2
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any

Как сделать так, чтобы 80 порт ходил через шлюз 2.
все остальное через шлюз1


Название: Re: два провайдера 2 шлюза
Отправлено: Cell от 14 Апреля 2010, 14:33:55
устанавливается прокси-сервер, и при помощи множественных таблиц маршрутизации (setfib) указывается на какой шлюз он должен работать. Все остальные решения скорее всего будут либо высоконагруженные, либо криво работать.


Название: Re: два провайдера 2 шлюза
Отправлено: Александр (AleksHr) от 14 Апреля 2010, 15:00:03
устанавливается прокси-сервер, и при помощи множественных таблиц маршрутизации (setfib) указывается на какой шлюз он должен работать. Все остальные решения скорее всего будут либо высоконагруженные, либо криво работать.

Вот тут рулит микротик  :D. У меня после билинга стоит шлюз на микротике, там такая маршрутизация рещается за 5 минут, если начинать с 0 за день реально разобратся в микротике. А на фре ооооочень и даже очеееень сложно. + на микротике ето практически никакой серйезной нагрузкы не вызовет.


Название: Re: два провайдера 2 шлюза
Отправлено: versus от 14 Апреля 2010, 15:02:57
Вот тут рулит микротик  :D. У меня после билинга стоит шлюз на микротике, там такая маршрутизация рещается за 5 минут, если начинать с 0 за день реально разобратся в микротике. А на фре ооооочень и даже очеееень сложно. + на микротике ето практически никакой серйезной нагрузкы не вызовет.

Вам пора уже деньги с фирмы микротик брать за рекламу :-)


Название: Re: два провайдера 2 шлюза
Отправлено: Cell от 14 Апреля 2010, 15:08:01
да чего там сложного?
Пересобрать ядро - 20 минут + кофе попьете
Установить проксю - еще 20 минут + кофе
Настроить проксю по готовым конфигам еще час, это если в первый раз
Настроить биллинг для работы с проксей по этому форуму, это тоже час в первый раз
Запустить проксю с опцией setfib 1 - 5 минут
Дальше чай, кофе, пирожные, можно с девушкой.
Где тот день? который надо потратить чтобы разобраться с вашим микротиком? )))


Название: Re: два провайдера 2 шлюза
Отправлено: smallcms от 14 Апреля 2010, 15:52:20
подскажите возможноли реализовать:
1. есть 2 прова (P1, P2)
2. 2 шлюза (PS1,PS2)
Требуеться:
Порт 80 пускать через провайдера P1 шлюз PS1.
Весть остальной трафик через P2 шлюз PS2.
defaultrouter=PS1.
Как реальзовать через pf.

Возможно. Дарю:

Код:
set limit states 128000
set optimization aggressive

lan_net = "192.168.0.0/16"
int_if  = "xl0"
ext_if1 = "vr0"
ext_if2 = "vr1"
ext_gw1 = "192.168.30.1"
ext_gw2 = "192.168.31.1"

nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)

pass out on $int_if from any to $lan_net
pass in quick on $int_if from $lan_net to $int_if

#TEMPORARY FIX FOR PORT 80
pass in quick on $int_if proto tcp from $lan_net to any port 80

pass in on $int_if route-to \
    { ($ext_if2 $ext_gw2) } round-robin \
    proto tcp from $lan_net to any flags S/SA modulate state
pass in on $int_if route-to \
    { ($ext_if2 $ext_gw2) } round-robin \
    proto { udp, icmp } from $lan_net to any keep state

pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp } from any to any keep state

В настоящее время не использую, поэтому за 100% работоспособность не ручаюсь, но тем не менее именно этим вариантом разносил 80 и всё остальное по двум каналам.


Название: Re: два провайдера 2 шлюза
Отправлено: killall от 14 Апреля 2010, 16:08:01
И так, сам отвечаю на свой вопрос.
Поковорявшись в изложеном мною выше конфиге немного его переделал.
Даже немного перевыполнил задуманое.

Дано:
2 прова.
пров 1: fxp0 шлюз ссс.ссс.ссс.ссс (онже прописан в дефаултроутер)
пров 2: xl0  шлюз nnn.nnn.nnn.nnn
Файл с списком юаикс сетей.
Значит конфиг умеет:
1. Весь 80 порт шлет через провайдера 2.
2. Все остальные ТСП порты которые направленны в юаикс делает роунд робин. Тоесть сумирует два канала.
3. Все остальные ТСП порты которые направленны НЕ в юаикс идут по дафаулт роутер.
4. udp, icmp которые направленны в юаикс делает роунд робин. Тоесть сумирует два канала.
5. udp, icmp которые НЕ направленны в юаикс пускает через дефаулт.
Собственно теперь сам скрипт.
Прошу раскритиковать и указать на ошибки.
Код:
lan_net = "10.110.0.0/24"
int_if  = "re0"

ext_if1 = "fxp0"
ext_if2 = "xl0"

ext_gw1 = "ссс.ссс.ссс.ссс"
ext_gw2 = "nnn.nnn.nnn.nnn"
table <ua-ix> persist file "/usr/local/nodeny/prefixes.txt"
#  nat исходящие соединения на каждый интерфейс Интернета
nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)
#  pass all исходящие пакеты на внутреннем интерфейсе
pass out on $int_if from any to $lan_net

#  pass in quick any пакеты, предназначенные для шлюза itself
pass in quick on $int_if from $lan_net to $int_if


#  Принимаем http трафик и пускаем его через шлюз $ext_gw2
pass in on $int_if route-to {($ext_if2 $ext_gw2)} inet proto tcp from $lan_net to !$lan_net port 80 flags S/SA modulate state
#  Принимаем остальной трафик и если он направлен в юаикс отправляем через 2 провайдера сразу
pass in on $int_if route-to {($ext_if1 $ext_gw1), (ext_if2 $ext_gw2)} round-robin sticky-address  proto {tcp} from $lan_net to <ua-ix> port {1:79 81:65444} flags S/SA modulate s

#  Принимаем остальной трафик и если он направлен !!!!!НЕ!!!!! в юаикс отправляем через шлюз $ext_gw1 который прописан в defaultrouter

#  Принимаем udp и icmp ели предназначены для юаикса пускаем через два провайдера сразу..
pass in on $int_if route-to {($ext_if1 $ext_gw1), (ext_if2 $ext_gw2) } round-robin sticky-address proto {udp,icmp } from $lan_net to <ua-ix> keep state

#  Общие "pass out" правила для внешних интерфейсов
pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto { udp, icmp } from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp } from any to any keep state

#  маршрутизации пакетов с любого IP-адреса на $ext_if1 to $ext_gw1 и та же для $ext_if2 и $ext_gw2
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any.
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any


Название: Re: два провайдера 2 шлюза
Отправлено: Unix от 14 Апреля 2010, 21:22:48
И как в работе оно?  Уже проверял?


Название: Re: два провайдера 2 шлюза
Отправлено: killall от 14 Апреля 2010, 22:51:32
И как в работе оно?  Уже проверял?
проверил, пашет :)


Название: Re: два провайдера 2 шлюза
Отправлено: killall от 15 Апреля 2010, 13:43:28
Окончательный обкатанный вариант. Возможности теже, только icmp идет по разным каналов в зависимости от направления. + испарвленны ошибки в синтаксисе.
Код:
lan_net = "10.110.0.0/24"
int_if  = "re0"

ext_if1 = "fxp0"
ext_if2 = "xl0"

ext_gw1 = "ссс.ссс.ссс.ссс"
ext_gw2 = "nnn.nnn.nnn.nnn"
table <ua-ix> persist file "/usr/local/nodeny/prefixes.txt"
#  nat исходящие соединения на каждый интерфейс Интернета
nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)
#  pass all исходящие пакеты на внутреннем интерфейсе
pass out on $int_if from any to $lan_net

#  pass in quick any пакеты, предназначенные для шлюза itself
pass in quick on $int_if from $lan_net to $int_if

#  Принимаем http трафик и пускаем его через шлюз $ext_gw2
pass in on $int_if route-to { ($ext_if2 $ext_gw2) } inet proto tcp from $lan_net to !$lan_net port {80 443} flags S/SA modulate state

#  Принимаем остальной трафик и если он направлен в юаикс отправляем через 2 провайдера сразу
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin sticky-address  proto {tcp} from $lan_net to <ua-ix> port {1:79 81:442 444:65500} flags S/SA

#  Принимаем остальной трафик и если он направлен !!!!!НЕ!!!!! в юаикс отправляем через шлюз $ext_gw1 который прописан в defaultrouter
pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet  proto {tcp} from $lan_net to !<ua-ix> port {1:79 81:442 444:65500} flags S/SA

#  Принимаем udp ели предназначены для юаикса пускаем через два провайдера сразу..
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin proto { udp } from $lan_net to <ua-ix> keep state

#  Принимаем udp если не пренодлежит юаиксу пускаем через шлюз 1.
pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet proto { udp } from $lan_net to !<ua-ix> keep state

#  Принимаем icmp если пренодлежит юаиксу пускаем через шлюз 2.
pass in on $int_if route-to { ($ext_if2 $ext_gw2) } inet proto { icmp } from $lan_net to <ua-ix> keep state

#  Принимаем icmp если не пренодлежит юаиксу пускаем через шлюз 1.
pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet proto { icmp } from $lan_net to !<ua-ix> keep state



#  Общие "pass out" правила для внешних интерфейсов
pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto { udp, icmp } from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp } from any to any keep state

#  маршрутизации пакетов с любого IP-адреса на $ext_if1 to $ext_gw1 и та же для $ext_if2 и $ext_gw2
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any.
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any



Название: Re: два провайдера 2 шлюза
Отправлено: killall от 15 Апреля 2010, 16:29:36
И всетаки баг есть в логи сыпиться:
Код:
pr 15 17:24:49 server last message repeated 75 times
Apr 15 17:24:49 server kernel: arpresolve: can't allocate llinfo for 10.110.1.1
Apr 15 17:24:49 server kernel: arpresolve: can't allocate llinfo for *****ip*****
Apr 15 17:24:49 server kernel: arpresolve: can't allocate llinfo for 10.110.1.1
Apr 15 17:24:49 server kernel: arpresolve: can't allocate llinfo for 10.110.1.1
Apr 15 17:24:50 server kernel: arpresolve: can't allocate llinfo for *****ip*****
Apr 15 17:24:50 server kernel: arpresolve: can't allocate llinfo for 10.110.1.1
Apr 15 17:24:50 server last message repeated 4 times
Apr 15 17:24:50 server kernel: arpresolve: can't allocate llinfo for *****ip*****
Apr 15 17:24:51 server last message repeated 5 times
Apr 15 17:24:51 server kernel: arpresolve: can't allocate llinfo for 10.110.1.1
Apr 15 17:24:51 server last message repeated 2 times
Apr 15 17:24:52 server kernel: arpresolve: can't allocate llinfo for *****ip*****
Apr 15 17:24:52 server kernel: arpresolve: can't allocate llinfo for 10.110.1.1
Apr 15 17:24:52 server last message repeated 5 times


Название: Re: два провайдера 2 шлюза
Отправлено: Cell от 15 Апреля 2010, 16:44:22
Ежики плакали, кололись но все равно продолжали жрать кактусы.


Название: Re: два провайдера 2 шлюза
Отправлено: killall от 15 Апреля 2010, 17:10:44
Ежики плакали, кололись но все равно продолжали жрать кактусы.
Согласен, но все пашет прекрасно. Система работает стабильно. Отключил запись етих сообщений в лог. подожду пока чтото случиться


Название: Re: два провайдера 2 шлюза
Отправлено: killall от 15 Апреля 2010, 18:11:46
Согласен, но все пашет прекрасно. Система работает стабильно. Отключил запись етих сообщений в лог. подожду пока чтото случиться
Ежики плакали, кололись но все равно продолжали жрать кактусы. И ВСЕТАКИ НАЖРАЛИСЬ
ошибка найдена:)))))))))
почемуто пагубным окозалось
Код:
sticky-address
в строке
Код:
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin sticky-address proto {tcp} from $lan_net to <ua-ix> port {1:79 81:442 444:65500} flags S/SA modulate state
Если сделать
Код:
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin proto {tcp} from $lan_net to <ua-ix> port {1:79 81:442 444:65500} flags S/SA modulate state
ТО ВСЕ ПРЕКРАСНО.


Название: Re: два провайдера 2 шлюза
Отправлено: neos от 24 Июля 2010, 21:34:32
Скажи плиз, это нужно вписать в ee /etc/pf.conf и указать имена на свои сетевые и прописать цыфры. А вот нужно что то еще? Ну, типа редактировать и добавлять в rc.firewall и в rc.conf?


Название: Re: два провайдера 2 шлюза
Отправлено: stix от 24 Июля 2010, 22:06:31
Скажи плиз, это нужно вписать в ee /etc/pf.conf и указать имена на свои сетевые и прописать цыфры. А вот нужно что то еще? Ну, типа редактировать и добавлять в rc.firewall и в rc.conf?
ты сам понял что написал?  :D


Название: Re: два провайдера 2 шлюза
Отправлено: neos от 25 Июля 2010, 21:42:09
Просто я это вставил в pf.conf и изменил на свои IP и интерфейсы имен сетевых, но не чего не заработало. Я вот и подумал может нужно что то указать в rc.firewall по тому как там стоит плата по умолчанию одна, а у нас оказывается же 2 шлюза, может нужно как то ето прописать, а так же rc.conf там стоит лишь 1 интерфейс, нужно же как то добавить и 2? Вы поймите я в ето сфере новенький и не сильно еще волоку в етом, гуглом пользоваться умею но вот не чего подобного не нахожу


Название: Re: два провайдера 2 шлюза
Отправлено: stix от 25 Июля 2010, 21:50:44
понятное дело что не найдешь.
это как искать бухгалтеру в гугле отчеты в налоговой которые она должна была сделать.

думай сам


Название: Re: два провайдера 2 шлюза
Отправлено: neos от 25 Июля 2010, 22:01:28
Мне интересно а для чего же тогда придуманы форумы? Ппц я же не прошу все за меня сделать! Ей чуваки вот вам IP и 3 сетевый клацайте и кидайте сюда, я скопирую и все норм будет, а вам бесплатное спс! Мне насчет ДНС указали лишь путь и все я с етим задание справился и все норм заработало, теперь мне не понятно с етим, как и что наклацать. и пишу здесь для того что бы кто помог!


Название: Re: два провайдера 2 шлюза
Отправлено: stix от 25 Июля 2010, 22:11:42
Осталось достать хрустальный шар!

у тебя вланами приходит?!
если на 1 карточку, то как у тебя они скоммутированы?
я ж надеюсь ты понимаешь что это неправильно...

балансировать ты хочешь через пф round-robin ?
сейчас прям щелк пальцами и все поняли какая у тебя топология сети с L2 И L3


Название: Re: два провайдера 2 шлюза
Отправлено: ser970 от 26 Июля 2010, 17:38:36
Мне интересно а для чего же тогда придуманы форумы? Ппц я же не прошу все за меня сделать! Ей чуваки вот вам IP и 3 сетевый клацайте и кидайте сюда, я скопирую и все норм будет, а вам бесплатное спс! Мне насчет ДНС указали лишь путь и все я с етим задание справился и все норм заработало, теперь мне не понятно с етим, как и что наклацать. и пишу здесь для того что бы кто помог!
правильно задан вопрос - 99 процентов ответа.
форумы придуманы не для того что бы переписывать хендбук

в /etc/rc.conf

указываеются интерфейсы которые будут подняты при старте системы (но не обязательно)
по сути rc.conf  это что то типеа автозагрузки в виндовсе.
правилом хорошего тона будет там прописать все интервейсы со своими апи - или прописать что интерфейс получает по дхцп.
тут же прописываются что статртует при старте сисметы ну и прочее.

дальще выбираешь чем будешь натить .
почитать маны и хендбук фря очень сильно документирована.
потом выьираешь способ как будешь балансировать.


помоч можно но .... надо именть юольше даных.




Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 18 Августа 2010, 16:38:33
в мене один з зовнішніх інтерфейсів рррое і шлюз інколи міняється, як бути в цій ситуації ?


Название: Re: два провайдера 2 шлюза
Отправлено: Unix от 18 Августа 2010, 17:03:01
BGP вам в помощь.


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 19 Августа 2010, 09:57:48
причому тут bgp ? я питаюсь як правильно зробити конфіг pf щоб працювало з інтерфейсом на якому міняється шлюз.


Название: Re: два провайдера 2 шлюза
Отправлено: blackjack от 19 Августа 2010, 10:05:20
в круглих дужках треба вказувати імя інтерфейсу


Название: Re: два провайдера 2 шлюза
Отправлено: VitalVas от 19 Августа 2010, 10:10:12
причому тут bgp ? я питаюсь як правильно зробити конфіг pf щоб працювало з інтерфейсом на якому міняється шлюз.
делаешь его основным, а дальше пишешь статическую маршрутизацию для другого провайдера


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 20 Августа 2010, 15:26:14
попробую, дякую.


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 20 Августа 2010, 19:58:32
а як на рахкнок резевного каналу, щоб при пропаданні одного автоматично переключалося на інший. хтось таке робив ?


Название: Re: два провайдера 2 шлюза
Отправлено: VitalVas от 21 Августа 2010, 00:12:51
а як на рахкнок резевного каналу, щоб при пропаданні одного автоматично переключалося на інший. хтось таке робив ?
я робив
ет елементарний скрипт на шелі


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 22 Августа 2010, 20:30:19
можете поділитися? :)


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 30 Августа 2010, 07:59:08



Після того як ua-ix пустив через окремого провайдера не шейпиться upload (тільки upload ua-ix), напевно неправильні правила в ipfw прописав, хто з таким стикався ?


Цитировать
#!/bin/sh -
f='/sbin/ipfw'

#internet
ifOut='fxp0'
#ua-ix
ifOut2='xl0'


${f} table 120 flush
${f} table 120 add 224.0.0.0/4
${f} table 120 add 172.16.0.0/12

${f} -q -f flush




${f} add 28 allow udp from any to any 53
${f} add 29 allow udp from any to 8.8.8.8
${f} add 30 allow udp from 8.8.8.8 to any


${f} add 50 allow tcp from any to me 22
${f} add 51 allow tcp from me 22 to any

${f} add 100 deny tcp from any to any 445

${f} add 110 allow ip from any to any via lo0
${f} add 120 skipto 1000 ip from me to any
${f} add 130 deny icmp from any to any in icmptype 5,9,13,14,15,16,17
${f} add 140 deny ip from any to "table(120)"
${f} add 150 deny ip from "table(120)" to any
${f} add 160 skipto 2000 ip from any to me

${f} add 200 skipto 500 ip from any to any via ${ifOut}
${f} add 201 skipto 500 ip from any to any via ${ifOut2}

${f} add 300 skipto 4500 ip from any to any in

${f} add 400 skipto 450 ip from any to any recv ${ifOut}
${f} add 401 skipto 450 ip from any to any recv ${ifOut2}

${f} add 420 divert 1 ip from any to any
${f} add 450 divert 2 ip from any to any
${f} add 490 allow ip from any to any

${f} add 500 skipto 32500 ip from any to any in
${f} add 510 divert 1 ip from any to any
${f} add 540 allow ip from any to any


${f} add 1000 allow udp from any 53,7723 to any
${f} add 1010 allow tcp from any to any setup keep-state
${f} add 1020 allow udp from any to any keep-state
${f} add 1100 allow ip from any to any

${f} add 2000 check-state
${f} add 2010 allow icmp from any to any
${f} add 2020 allow tcp from any to any 80,443
${f} add 2050 deny ip from any to any via${ifOut}
${f} add 2051 deny ip from any to any via${ifOut2}
${f} add 2060 allow udp from any to any 53,7723

${f} add 2100 deny ip from any to any


${f} add 32490 deny ip from any to any




Название: Re: два провайдера 2 шлюза
Отправлено: smallcms от 30 Августа 2010, 11:37:05
У Вас xl0 - внешка? Можно как вариант первым направлением сделать внешку, а уаикс закинуть в направление 2. По-умолчанию все направления, кроме основного работают в одну трубу (общая скорость на вх/исх).
Здесь (http://forum.nodeny.com.ua/index.php?topic=245.msg7645#msg7645) я колупал данную проблему. И кстати успешно применяю.


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 30 Августа 2010, 21:26:14
попробував так зробити, але все рівно upload ua-ix не шейпиться, для нього не спрацьовує правило 05400  pipe tablearg ip from table(11) to any


Название: Re: два провайдера 2 шлюза
Отправлено: Elisium от 30 Августа 2010, 23:02:18
Ну, во первых, уже давно и не раз писали, почему НЕЛЬЗЯ делать
Код:
${f} add 28 allow udp from any to any 53

По теме:
ДО бгп была такая же история: два прова есть, а бгп - нет.
Так вот, фаер у меня был на 99% такойже (глянул ща в бакапы), но правил 400/401 там НЕТ и близко и вместо 420/450 у меня ngtee (по вкусу).

п.с. Само собой, не забыть добавить в 126ю таблицу НУЖНЫЕ подсети 2го направления и выставить нужную скорость в соответствующих тарифах.


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 31 Августа 2010, 13:08:54
після видалення правил 400/401, нічого не помінялося, в таблиці 126 ір є, коли в тарифі ставлю швидкісь не основного напрямку то також вхідна шейпиться а вихідна ні.


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 31 Августа 2010, 13:15:02
ipfw sh

00028   479    32892 allow udp from any to any dst-port 53
00029     0        0 allow udp from any to 8.8.8.8
00030   276    32064 allow udp from 8.8.8.8 to any
00050   584    30796 allow tcp from any to me dst-port 22
00051  2054   360532 allow tcp from me 22 to any
00100     0        0 deny tcp from any to any dst-port 445
00110   186   505336 allow ip from any to any via lo0
00120   197    22165 skipto 1000 ip from me to any
00130     0        0 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17
00140    42    10017 deny ip from any to table(120)
00150     0        0 deny ip from table(120) to any
00160   120    49498 skipto 2000 ip from any to me
00200 45083 34813359 skipto 500 ip from any to any via fxp0
00201 19050 18750744 skipto 500 ip from any to any via xl0
00300 17935  2606550 skipto 4500 ip from any to any in
00420 46111 50619920 divert 1 ip from any to any
00450 46111 50619920 divert 2 ip from any to any
00490 46111 50619920 allow ip from any to any
00500 46533 50977428 skipto 32500 ip from any to any in
00510 17600  2586675 divert 1 ip from any to any
00540 17600  2586675 allow ip from any to any
01000   192    21937 allow udp from any 53,7723 to any
01010     0        0 allow tcp from any to any setup keep-state
01020     0        0 allow udp from any to any keep-state
01100     4      228 allow ip from any to any
02000     0        0 check-state
02010     5      461 allow icmp from any to any
02020     0        0 allow tcp from any to any dst-port 80,443
02050    82    47135 deny ip from any to any via fxp0
02051    30     1792 deny ip from any to any via xl0
02060     0        0 allow udp from any to any dst-port 53,7723
02100     3      110 deny ip from any to any
05000    15     1236 deny ip from not table(0) to any
05001     0        0 skipto 5010 ip from table(127) to table(126)
05002 17920  2605314 skipto 5030 ip from any to not table(2)
05003     0        0 deny ip from any to not table(1)
05004     0        0 pipe tablearg ip from table(21) to any
05005     0        0 deny ip from any to any
05010     0        0 pipe tablearg ip from table(127) to any
05030   201     9648 deny tcp from table(15) to any dst-port 25
05226     0        0 allow ip from table(127) to table(126)
05400 17719  2595666 pipe tablearg ip from table(11) to any
32000     0        0 deny ip from any to any
32490     0        0 deny ip from any to any
33000     3      180 pipe tablearg ip from table(126) to table(127)
33001 46530 50977248 skipto 33010 ip from not table(2) to any
33002     0        0 pipe tablearg ip from any to table(20)
33003     0        0 deny ip from any to any
33226     0        0 allow ip from table(126) to table(127)
33400 46394 50961527 pipe tablearg ip from any to table(10)
65535   135    14473 deny ip from any to any


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 31 Августа 2010, 16:04:49
Ну, во первых, уже давно и не раз писали, почему НЕЛЬЗЯ делать
Код:
${f} add 28 allow udp from any to any 53

По теме:
ДО бгп была такая же история: два прова есть, а бгп - нет.
Так вот, фаер у меня был на 99% такойже (глянул ща в бакапы), но правил 400/401 там НЕТ и близко и вместо 420/450 у меня ngtee (по вкусу).

п.с. Само собой, не забыть добавить в 126ю таблицу НУЖНЫЕ подсети 2го направления и выставить нужную скорость в соответствующих тарифах.


я так розумію, що у вас на ua-ix прописані маршрути в системі, а в мене трафік туди йде через правило в pf - pass in on $int_if route-to { ($ext_if2 $ext_gw2) } inet proto { tcp, udp } from $lan_net to <ua-ix> keep state, тому і не обмежується вихідна швидкість


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 31 Августа 2010, 18:40:32
а як зробити щоб з файлику з списком ір ua-ix автоматично прописувалтсь роути на інший шлюз ? думаю що це б мало вирішити мою проблему.


Название: Re: два провайдера 2 шлюза
Отправлено: Elisium от 31 Августа 2010, 22:25:48
Ну, если я правильно понял вопрос то:

У меня было так: два прова - один мир, второй только украина.
Соответственно на первого прова смотрел дефолт, на второго  - все укр префиксы.
Делал так:
1. Забирал укр префиксы текстовым файликом раз в сутки. Там один префикс на строку.
2. После того, как забрал, делал что то вроде:
Код:
route flush
sleep 3
route add default ШЛЮЗ_В_МИР
route add -net ЛОКАЛЬНАЯ_СЕТЬ ЕЕ_ШЛЮЗ
sleep 3
cat ./uaix.txt | xargs -I tst route add -net tst ШЛЮЗ_В_УКРАИНУ
route delete -net ПОДСЕТЬ_ПРОВА_С_МИРОМ

Запускалось по крону раз в сутки дето около 6ти утра.


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 31 Августа 2010, 23:58:55
дякую, так працює.
але все рівно цікаво чому у варіанті з pf-ом є така проблема, бо використовувати pf для цієї задачі для мене краще.


Название: Re: два провайдера 2 шлюза
Отправлено: Elisium от 02 Сентября 2010, 00:01:14
ЕСЛИ я правильно помню, то есть нюанс в ПОРЯДКЕ загрузки фаерволов.
Кто раньше в цепочке загрузился, тот и раньше отрабатывает свои правила. Как то так.
Помню довольно смутно, поэтому это просто намек в эту сторону ...

п.с. Сам на тему "ДВА шлюза в инет" немало перерыл и переспрашивал форумов.
Все советы в основном сводились к "ПФ - только нат и ничего более", а все остальное делать через ипфв/роуты.
И, в принципе, такая схема работала без проблем.


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 02 Сентября 2010, 09:44:41
а як тоді через через іпфв/роути зробити щоб трафік через 80-й порт йшов через окремий канал ?


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 02 Сентября 2010, 09:46:45
вихідні пакети коли проходили через pf дійсно в ipfw вже не йшли


Название: Re: два провайдера 2 шлюза
Отправлено: Elisium от 02 Сентября 2010, 10:34:11
а як тоді через через іпфв/роути зробити щоб трафік через 80-й порт йшов через окремий канал ?

Код:
fwd КУДА_ТО_на_этот_сервер tcp from table(0) to not me dst-port 80

Мм .. как то так ?


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 02 Сентября 2010, 15:06:27
а під яким номером поставити це правило щоб і трафік рахувла і pipe працювали ?


Название: Re: два провайдера 2 шлюза
Отправлено: VitalVas от 05 Октября 2010, 10:14:39
от вчера наткнулся на такую вещь
http://ipfw.ism.kiev.ua/pbr.html
хоть это не панацея, но жить можно.......


Название: Re: два провайдера 2 шлюза
Отправлено: ser970 от 05 Октября 2010, 21:03:04
от вчера наткнулся на такую вещь
http://ipfw.ism.kiev.ua/pbr.html
хоть это не панацея, но жить можно.......
виталя а ты пробовал это?! на версии віше 6.2
форвар на внешние апи ухол с опциешь форвард_ескендет
есть другие но не так все просто.и не по єтой статье.
фри єто не виндовс - где кнопка некс немемялась уже лет 18 начиная с 3.1


Название: Re: два провайдера 2 шлюза
Отправлено: VitalVas от 05 Октября 2010, 23:05:28
виталя а ты пробовал это?! на версии віше 6.2
форвар на внешние апи ухол с опциешь форвард_ескендет
есть другие но не так все просто.и не по єтой статье.
фри єто не виндовс - где кнопка некс немемялась уже лет 18 начиная с 3.1
да, пробовал, работает
но где пробовал стоит 6.0


Название: Re: два провайдера 2 шлюза
Отправлено: methodwest от 29 Октября 2010, 23:15:28
Есть очень класный вариант настроить LAGG! Ето штатная функцыя FreeBSD -- распредиляет весь трафик между несколькими ванами равномерно; есть возможность сделать 100+100=200 обшего канала, не смотря на то что некоторые говорят что ето не возможно!!! Нужно уметь искать и читать маны!!!

работает супер 2 канала по 100 совмесных получаем почти 200

есть реализацыя веб морды на пхп (FreeNAS)

виучю перл -- сделаю модуль (бесплатно!!!)

а вообше то есть шаблон на пхп переписать на перл будет легче чем написать новый модуль
вот только нихто не хочет писать (настройка с морды лан + ван интерфейсы + обьединение ванов в LAGG)

а про сам LAGG дядя google могет розказать многое!!!!!!!!!


Название: Re: два провайдера 2 шлюза
Отправлено: VitalVas от 30 Октября 2010, 00:55:17
Есть очень класный вариант настроить LAGG! Ето штатная функцыя FreeBSD -- распредиляет весь трафик между несколькими ванами равномерно; есть возможность сделать 100+100=200 обшего канала, не смотря на то что некоторые говорят что ето не возможно!!! Нужно уметь искать и читать маны!!!

работает супер 2 канала по 100 совмесных получаем почти 200

есть реализацыя веб морды на пхп (FreeNAS)

виучю перл -- сделаю модуль (бесплатно!!!)

а вообше то есть шаблон на пхп переписать на перл будет легче чем написать новый модуль
вот только нихто не хочет писать (настройка с морды лан + ван интерфейсы + обьединение ванов в LAGG)

а про сам LAGG дядя google могет розказать многое!!!!!!!!!
LAGG подходит для суммирование интерфейсов а не провайдеров


Название: Re: два провайдера 2 шлюза
Отправлено: Андрій от 02 Ноября 2010, 20:14:51
Окончательный обкатанный вариант. Возможности теже, только icmp идет по разным каналов в зависимости от направления. + испарвленны ошибки в синтаксисе.
Код:
lan_net = "10.110.0.0/24"
int_if  = "re0"

ext_if1 = "fxp0"
ext_if2 = "xl0"

ext_gw1 = "ссс.ссс.ссс.ссс"
ext_gw2 = "nnn.nnn.nnn.nnn"
table <ua-ix> persist file "/usr/local/nodeny/prefixes.txt"
#  nat исходящие соединения на каждый интерфейс Интернета
nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)
#  pass all исходящие пакеты на внутреннем интерфейсе
pass out on $int_if from any to $lan_net

#  pass in quick any пакеты, предназначенные для шлюза itself
pass in quick on $int_if from $lan_net to $int_if

#  Принимаем http трафик и пускаем его через шлюз $ext_gw2
pass in on $int_if route-to { ($ext_if2 $ext_gw2) } inet proto tcp from $lan_net to !$lan_net port {80 443} flags S/SA modulate state

#  Принимаем остальной трафик и если он направлен в юаикс отправляем через 2 провайдера сразу
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin sticky-address  proto {tcp} from $lan_net to <ua-ix> port {1:79 81:442 444:65500} flags S/SA

#  Принимаем остальной трафик и если он направлен !!!!!НЕ!!!!! в юаикс отправляем через шлюз $ext_gw1 который прописан в defaultrouter
pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet  proto {tcp} from $lan_net to !<ua-ix> port {1:79 81:442 444:65500} flags S/SA

#  Принимаем udp ели предназначены для юаикса пускаем через два провайдера сразу..
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin proto { udp } from $lan_net to <ua-ix> keep state

#  Принимаем udp если не пренодлежит юаиксу пускаем через шлюз 1.
pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet proto { udp } from $lan_net to !<ua-ix> keep state

#  Принимаем icmp если пренодлежит юаиксу пускаем через шлюз 2.
pass in on $int_if route-to { ($ext_if2 $ext_gw2) } inet proto { icmp } from $lan_net to <ua-ix> keep state

#  Принимаем icmp если не пренодлежит юаиксу пускаем через шлюз 1.
pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet proto { icmp } from $lan_net to !<ua-ix> keep state



#  Общие "pass out" правила для внешних интерфейсов
pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto { udp, icmp } from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp } from any to any keep state

#  маршрутизации пакетов с любого IP-адреса на $ext_if1 to $ext_gw1 и та же для $ext_if2 и $ext_gw2
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any.
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any



а увас при таких правилах вихідний трафік шейпиться ? бо в мене чомусь ні, ніяк не получається розібратись з цією проблемою (


Название: Re: два провайдера 2 шлюза
Отправлено: md5 от 23 Декабря 2010, 00:04:45
Интересно!
А кто то сталкивался с проблемой когда шлюз по дефолту одного првайдера стоит то из вне зайти на сервак через другого не получаеться. проходят только icmp пакеты..


Название: Re: два провайдера 2 шлюза
Отправлено: poxy. от 23 Декабря 2010, 04:07:20
обратный роут?


Название: Re: два провайдера 2 шлюза
Отправлено: md5 от 23 Декабря 2010, 09:10:05
типа да. потому что я уже весь скрипт перелопатил и ничего так и не нашел. хочу из что бы из вне на ип второго провайдера тоже можно было заходить


Название: Re: два провайдера 2 шлюза
Отправлено: stix от 23 Декабря 2010, 10:23:34
ущербные провайдеры какие-то.
сейчас время такое, когда апстримов можно строить на раз-два


Название: Re: два провайдера 2 шлюза
Отправлено: md5 от 23 Декабря 2010, 10:34:11
и к чему ты это вообще сказал ?


Название: Re: два провайдера 2 шлюза
Отправлено: stix от 23 Декабря 2010, 11:39:18
и к чему ты это вообще сказал ?
к вашим аплинкам, которые не дают человеческие условия работы.

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


Название: Re: два провайдера 2 шлюза
Отправлено: md5 от 23 Декабря 2010, 11:48:44
подробнее можно ?


Название: Re: два провайдера 2 шлюза
Отправлено: stix от 23 Декабря 2010, 12:27:52
для BSD pf или Ipfw?

впринципе называется это PBR (Policy-Based Routing)
моментов много...они все не трушные.

у вас схема с двумя статическими дефолтами?


Название: Re: два провайдера 2 шлюза
Отправлено: md5 от 23 Декабря 2010, 15:11:25
PF со статикой!

одно угнетает что шлюз по дефолту отлично работает

Код:
lan_net = "10.0.0.0/16"
int_if  = "em0"

ext_if1 = "sk1"
ext_if2 = "sk0"

ext_gw1 = "ссс.ссс.ссс.ссс"
ext_gw2 = "ссс.ссс.ссс.ссс"

table <ua-ix> persist file "/usr/local/nodeny/prefixes.txt"
table <lan1> persist file "/usr/local/nodeny/lan1.lan"
table <lan2> persist file "/usr/local/nodeny/lan2.txt"

#  nat исходящие соединения на каждый интерфейс Интернета

nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)

#  pass all исходящие пакеты на внутреннем интерфейсе
pass out on $int_if from any to $lan_net

#  pass in quick any пакеты, предназначенные для шлюза itself
pass in quick on $int_if from $lan_net to $int_if

#  Принимаем http трафик и пускаем его через шлюз $ext_gw2
pass in on $int_if route-to { ($ext_if2 $ext_gw2) } inet proto tcp from $lan_net to !<ua-ix> port {80 443 8080 8103} flags S/SA modulate state

#  Принимаем остальной трафик и если он направлен в юаикс отправляем через 2 провайдера сразу
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin proto {tcp} from $lan_net to <ua-ix> port {1:20 23:79 81:442 444:2801 2803:7776 7778:8021 8023:65500} flags S/SA

#  Принимаем остальной трафик и если он направлен !!!!!НЕ!!!!! в юаикс отправляем через шлюз $ext_gw1 который прописан в defaultrouter
pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet  proto {tcp} from $lan_net to !<ua-ix> port {1:20 23:79 81:442 444:2801 2803:7776 7778:8021 8023:65500} flags S/SA

#  Принимаем udp ели предназначены для юаикса пускаем через два провайдера сразу..
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin proto { udp } from $lan_net to <ua-ix> keep state

#  Принимаем udp если не пренодлежит юаиксу пускаем через шлюз 1.
pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet proto { udp } from $lan_net to !<ua-ix> keep state

#  Принимаем icmp если пренодлежит юаиксу пускаем через шлюз 2.
pass in on $int_if route-to { ($ext_if2 $ext_gw2) } inet proto { icmp } from $lan_net to <ua-ix> keep state

#  Принимаем icmp если не пренодлежит юаиксу пускаем через шлюз 1.
pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet proto { icmp } from $lan_net to !<ua-ix> keep state



#  Общие "pass out" правила для внешних интерфейсов
pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto { udp, icmp, tcp } from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp, tcp } from any to any keep state

#  маршрутизации пакетов с любого IP-адреса на $ext_if1 to $ext_gw1 и та же для $ext_if2 и $ext_gw2
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any.
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any

pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any

при включении этого правила только icmp идут на интерфейс второга ипа. ежели выключаешь то тишина полная


Название: Re: два провайдера 2 шлюза
Отправлено: PulsarK от 01 Июня 2011, 13:42:51
Немного подыму тему в связи с аналогичной проблемой.
Нужно часть клиентов перекинуть на другой аплинк с другим гейтвеем.
Дано:
FreeBSD 7.2
Клиенты подключаются через PPPoE (MPD), потому возня с интерфейсами ng*
NAT крутится на PF

Теперь, как я понял, нужно настроить форвардинг пакетов от части клиентов на другой гейтвей. В каком месте в IPFW можно прикрутить правила форвардинга, но чтобы биллинг не пострадал?
Список правил (лишне убрал):
Код:
# ipfw show
00050      3152       287692 allow tcp from any to me dst-port 22
00051      2581       783824 allow tcp from me 22 to any
00110   1873589   3661269797 allow ip from any to any via lo0
00120   1238244    351727011 skipto 1000 ip from me to any
00130     35272      1899961 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17
00160  13695188   1269721322 skipto 2000 ip from any to me
00200 607526540 496564200772 skipto 500 ip from any to any via em0
00201         0            0 skipto 500 ip from any to any via vlan1200
00300 256507799  65219388294 skipto 4500 ip from any to any in
00400 350837488 428767598132 skipto 450 ip from any to any recv em0
00401         0            0 skipto 450 ip from any to any recv vlan1200
00420    310046    221427080 allow ip from any to any
00450 350836210 428766398972 divert 2 ip from any to any
00490 350837872 428767633478 allow ip from any to any
00500 352998448 431575854202 skipto 32500 ip from any to any in
00510 254552333  64997278556 divert 1 ip from any to any
00540 247818228  64860330530 allow ip from any to any
01000    449137     99357287 allow udp from any 53 to any
01010    279306    231073708 allow tcp from any to any setup keep-state
01020    983479    123073608 allow udp from any to any keep-state
01100     28821     19198815 allow ip from any to any
02000         0            0 check-state
02010     82040     72046228 allow icmp from any to any
02015    220780    196793087 allow tcp from any to me dst-port 80 limit src-addr 16
02020     16125      2303436 allow tcp from any to me dst-port 443,25,21
02050  12293412    840853800 deny ip from any to any via em0
02051        68         4779 deny ip from any to any via vlan1200
02060    463767     29497975 allow udp from any to any dst-port 53
02100    115038      7016333 deny ip from any to any
04800     17049      4373381 fwd 127.0.0.1,83 ip from table(35) to not me dst-port 80
04900    297096     50381657 fwd 127.0.0.1,82 ip from not table(0) to not me dst-port 80
05000    755828     52956788 deny ip from not table(0) to any
05001 165133274  37474768981 skipto 5010 ip from table(127) to table(126)
05002  90271241  27633576304 skipto 5030 ip from any to not table(2)
05003      3355       233190 deny ip from any to not table(1)
05004     27837      2952550 pipe tablearg ip from table(21) to any
05005         0            0 deny ip from any to any
05010 165133274  37474768981 pipe tablearg ip from table(127) to any
05030      3239       155740 deny tcp from table(15) to any dst-port 25,465
05226         0            0 allow ip from table(127) to table(126)
05400  90268001  27633420469 pipe tablearg ip from table(11) to any
32000         1           95 deny ip from any to any
32490      1393        96462 deny ip from any to any
33000 260190627 347976754424 pipe tablearg ip from table(126) to table(127)
33001  92807820  83599099621 skipto 33010 ip from not table(2) to any
33002         1          157 pipe tablearg ip from any to table(20)
33003         0            0 deny ip from any to any
33226         0            0 allow ip from table(126) to table(127)
33400  92800444  83598400720 pipe tablearg ip from any to table(10)
65535      7376       698901 deny ip from any to any

Заранее благодарен за помощь.
PS Через PF тяжело организовать, так как внутренний интерфейс получается не один, а целая куча (ng*).


Название: Re: два провайдера 2 шлюза
Отправлено: VitalVas от 01 Июня 2011, 14:36:58
от тебе пример, на основе этого можно без проблем дописать правила....
правила полностью рабочие, но не от этого биллинга
Код:
gateway# ipfw list
00101 allow tcp from any to me dst-port 80
00102 allow udp from any to me dst-port 53 via sk1
00103 allow udp from any to me dst-port 67 via sk1
00105 allow tcp from any to me dst-port 1723
00106 allow tcp from any to me dst-port 5006
00110 allow ip from any to me dst-port 139,445 via sk1
00130 allow icmp from any to me in icmptypes 0,8
00150 fwd 127.0.0.1,8922 tcp from table(3) to table(2) dst-port 80,443
00200 check-state
00220 allow ip from me to any keep-state
00230 setfib 1 ip from any to me in recv ste0
00231 setfib 2 ip from any to me in recv rl0
00232 setfib 0 ip from any to me in recv сс
00250 allow ip from any to any via nfe0
00251 allow ip from any to any via ste0
00252 allow ip from any to any via rl0
00301 setfib 2 ip from table(5) to any
00302 skipto 500 ip from table(5) to any
00305 setfib 2 ip from any to table(5)
00306 skipto 600 ip from any to table(5)
00310 setfib 1 ip from table(10) to any
00312 skipto 500 ip from table(10) to any
00314 setfib 1 ip from any to table(10)
00316 skipto 600 ip from any to table(10)
00320 setfib 0 ip from table(6) to any
00322 skipto 500 ip from table(6) to any
00324 setfib 0 ip from any to table(6)
00326 skipto 600 ip from any to table(6)
00510 pipe tablearg ip from table(0) to any
00590 deny ip from any to any
00610 pipe tablearg ip from any to table(1)
00690 deny ip from any to any
65535 deny ip from any to any
где ste0,rl0,nfe0 - аплинки......


Название: Re: два провайдера 2 шлюза
Отправлено: PulsarK от 02 Июня 2011, 19:04:17
Спасибо за подсказку. Пересобрал ядро, setfib заработал. Но появились новые грабли. Пакеты, на которые распространяется правило с "setfib 1" , пропадают на правиле с "divert 1" (сокет IPCADа). Может ктото подсказать в чём причина?


Название: Re: два провайдера 2 шлюза
Отправлено: VitalVas от 02 Июня 2011, 20:37:30
хм....
я divert вообще не юзаю
Код:
capture-ports enable;
buffers = 64k;
interface sk1;
aggregate 192.168.0.0/16 strip 32;
rsh enable at 127.0.0.1;
rsh root@127.0.0.1 admin;
rsh ttl = 10;
rsh timeout = 60;
dumpfile = ipcad.dump;
chroot = /tmp;
memory_limit = 512m;
может нужно покурить в сторону sysctl


Название: Re: два провайдера 2 шлюза
Отправлено: PulsarK от 04 Июня 2011, 18:54:02
Проблема решилась. Решение нашёл на этом же форуме - http://forum.nodeny.com.ua/index.php?topic=362.0 (http://forum.nodeny.com.ua/index.php?topic=362.0)
В правилах IPFW заменил "divert" на "tee". Окончательный вариант фаервола IPFW (лишнее убрал):
Код:
# ipfw list
00050 allow tcp from any to me dst-port 22
00051 allow tcp from me 22 to any
00080 setfib 1 ip from 10.0.10.128/25 to any
00090 setfib 1 ip from any to 10.0.10.128/25
00110 allow ip from any to any via lo0
00120 skipto 1000 ip from me to any
00130 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17
00160 skipto 2000 ip from any to me
00200 skipto 500 ip from any to any via em0
00201 skipto 500 ip from any to any via vlan1200
00300 skipto 4500 ip from any to any in
00400 skipto 450 ip from any to any recv em0
00401 skipto 450 ip from any to any recv vlan1200
00420 allow ip from any to any
00450 tee 2 ip from any to any
00490 allow ip from any to any
00500 skipto 32500 ip from any to any in
00510 tee 1 ip from any to any
00540 allow ip from any to any
01000 allow udp from any 53 to any
01010 allow tcp from any to any setup keep-state
01020 allow udp from any to any keep-state
01100 allow ip from any to any
02000 check-state
02010 allow icmp from any to any
02015 allow tcp from any to me dst-port 80 limit src-addr 16
02020 allow tcp from any to me dst-port 443,25,21
02050 deny ip from any to any via em0
02051 deny ip from any to any via vlan1200
02060 allow udp from any to any dst-port 53
02100 deny ip from any to any
04800 fwd 127.0.0.1,83 ip from table(35) to not me dst-port 80
04900 fwd 127.0.0.1,82 ip from not table(0) to not me dst-port 80
05000 deny ip from not table(0) to any
05001 skipto 5010 ip from table(127) to table(126)
05002 skipto 5030 ip from any to not table(2)
05003 deny ip from any to not table(1)
05004 pipe tablearg ip from table(21) to any
05005 deny ip from any to any
05010 pipe tablearg ip from table(127) to any
05030 deny tcp from table(15) to any dst-port 25,465
05226 allow ip from table(127) to table(126)
05400 pipe tablearg ip from table(11) to any
32000 deny ip from any to any
32490 deny ip from any to any
33000 pipe tablearg ip from table(126) to table(127)
33001 skipto 33010 ip from not table(2) to any
33002 pipe tablearg ip from any to table(20)
33003 deny ip from any to any
33226 allow ip from table(126) to table(127)
33400 pipe tablearg ip from any to table(10)
65535 deny ip from any to any
В конфиге IPCADa (ipcad.conf) заменил интерфейс "divert" на "tee".
Перед этим в конфиге PF настроил NAT для нужных диапазонов адресов. Также были прописаны нужные направления во второй таблице маршрутизации через setfib 1.
PS Версия nodeny - 50.32


Название: Re: два провайдера 2 шлюза
Отправлено: kuhar от 04 Декабря 2011, 20:58:54
причому тут bgp ? я питаюсь як правильно зробити конфіг pf щоб працювало з інтерфейсом на якому міняється шлюз.
делаешь его основным, а дальше пишешь статическую маршрутизацию для другого провайдера
А можно плиззз тут по подробней, к меня два входа одного и того же прова, у которых меняется шлюз, как быть в этой ситуации?


Название: Re: два провайдера 2 шлюза
Отправлено: kuhar от 03 Июня 2013, 07:06:34
Всем привет.
Подскажите, плизз как организовать, следующую схему:
Есть два прова PS1 и PS2, оба на серваке соединяются по (это один и тот же провайдер, но с разными ip и шлюзами).
Нужно сделать так, чтобы один пров PS1 раздавал на локальную подсеть, например 10.0.24.0/24, а второй PS2 на 10.0.25.0/24.
Фаервол настроен на две сетевухи, все ок, я думал что достаточно в pf настроить так:
Код:
set limit states 128000
set optimization aggressive

nat pass on re2 from 10.0.24.0/24 to any -> re2
nat pass on re0 from 10.0.25.0/24 to any -> re0
re2 - PS1
re0 - PS2

И будет все работать, но не тут то было, по умолчанию принимает шлюз либо PS1, либо PS2 и соответственно в зависимости от шлюза работают абоны либо в подсети 10.0.24.0/24, либо в 10.0.25.0/24.
Попытался добавить руками второй шлюз, и оно как бы работает, но с очень большими потерями пакетов, иногда вообще не работает.

Подскажите, плизз, как правильно это организовать.


Название: Re: два провайдера 2 шлюза
Отправлено: Redmen от 03 Июня 2013, 08:00:42
дядя Гугл подсказывает
http://www.google.com.ua/search?client=opera&hs=kCP&channel=suggest&q=options+routetables&spell=1&sa=X&ei=2y-sUeubA8fmOuWggfgL&ved=0CCkQBSgA (http://www.google.com.ua/search?client=opera&hs=kCP&channel=suggest&q=options+routetables&spell=1&sa=X&ei=2y-sUeubA8fmOuWggfgL&ved=0CCkQBSgA)
в ядро надо добавить опцию options ROUTETABLES=


Название: Re: два провайдера 2 шлюза
Отправлено: ser970 от 03 Июня 2013, 08:13:39
дядя Гугл подсказывает
http://www.google.com.ua/search?client=opera&hs=kCP&channel=suggest&q=options+routetables&spell=1&sa=X&ei=2y-sUeubA8fmOuWggfgL&ved=0CCkQBSgA (http://www.google.com.ua/search?client=opera&hs=kCP&channel=suggest&q=options+routetables&spell=1&sa=X&ei=2y-sUeubA8fmOuWggfgL&ved=0CCkQBSgA)
в ядро надо добавить опцию options ROUTETABLES=
хм
как связаны? ROUTETABLES и pf ?

если делать средствами pf то ROUTETABLES не нужен.

а по сути в pf надо еще кроме ната указать что и через какой интерфейс выходить будет .


Название: Re: два провайдера 2 шлюза
Отправлено: Rico-X от 03 Июня 2013, 08:32:32
Все просто, в конце правил добавьте
Код:
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>
и все заработает, если нет - уберите pass из своих правил.


Название: Re: два провайдера 2 шлюза
Отправлено: kuhar от 03 Июня 2013, 08:35:33
дядя Гугл подсказывает
http://www.google.com.ua/search?client=opera&hs=kCP&channel=suggest&q=options+routetables&spell=1&sa=X&ei=2y-sUeubA8fmOuWggfgL&ved=0CCkQBSgA (http://www.google.com.ua/search?client=opera&hs=kCP&channel=suggest&q=options+routetables&spell=1&sa=X&ei=2y-sUeubA8fmOuWggfgL&ved=0CCkQBSgA)
в ядро надо добавить опцию options ROUTETABLES=

Ядро у меня собрано с options ROUTETABLES=3


Название: Re: два провайдера 2 шлюза
Отправлено: kuhar от 03 Июня 2013, 08:39:00
Пробовал с такой конфигурацией:

Код:
set limit states 128000
set optimization aggressive

ext_if1="ip_PS1"
ext_if2="ip_PS2"
ext_gw1="GW_PS1"
ext_gw2="GW_PS2"

nat pass on $ext_if1 from 10.0.0.0/8 to any -> $ext_if1
nat pass on $ext_if2 from 10.0.25.0/24 to any -> $ext_if2

pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>

Но результатов не дало...:(

Все просто, в конце правил добавьте
Код:
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>
и все заработает, если нет - уберите pass из своих правил.

Правда без pass не пробовал.
Если два прова соединяются по DHCP в таблице должно ведь быть 2 шлюза, правильно?


Название: Re: два провайдера 2 шлюза
Отправлено: Rico-X от 03 Июня 2013, 10:42:31
Пробуйте без pass должно все работать. В своем случае создайте таблицу nonat и закиньте туда адреса на которые натить не нужно или замените !<no_nat> на any


Название: Re: два провайдера 2 шлюза
Отправлено: kuhar от 03 Июня 2013, 15:38:08
Возможно глупый вопрос, но спрошу.
При проверки дефолтного шлюза, чтобы это все работало, netstat должен выдавать 2 шлюза или один?


Название: Re: два провайдера 2 шлюза
Отправлено: Rico-X от 03 Июня 2013, 16:22:39
Возможно глупый вопрос, но спрошу.
При проверки дефолтного шлюза, чтобы это все работало, netstat должен выдавать 2 шлюза или один?
Дефолтным - один. Тут маршруты через второй интерфейс роутятся на уровне pf а не шлюзов.


Название: Re: два провайдера 2 шлюза
Отправлено: kuhar от 04 Июня 2013, 10:19:13
Без pass выдает синтаксическую ошибку, а так не работает.
Пробовал добавить
Код:
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any

Тоже не работает.
Криво но работает, если с конфигурацией, как я раньше писал, но добавить второй шлюз:
Код:
route add default ISP_GW2
После этого netstat выдает два шлюза.
Но тогда выходит следующая картина:
Через PS1 у клиента пинг идет стабильный на 8.8.8.8, но страницы не открываются, а через PS2 пинг на 8.8.8.8 идет один пакет проходит и 5-8 нет.
В rc.conf дефаулт роутер стоит ISP_GW1
Может я действительно, что-то не так делаю, помогите плизз..


Название: Re: два провайдера 2 шлюза
Отправлено: Rico-X от 04 Июня 2013, 10:29:21
Вот реальный пример конфига, работающего через 2 провайдера

Код:
# cat /etc/pf.conf
set limit states 128000
set optimization aggressive
ext_if1="vlan100" #Kanal1
ext_if2="vlan200" #Kanal2

ext_gw1="192.168.88.1"
ext_gw2="192.168.89.1"

table <no_nat> const { 192.168.0.0/16 10.0.0.0/16 }
scrub in all
nat pass on $ext_if1 inet from 10.0.0.0/24 to 192.168.88.0/24 -> 192.168.88.99
nat pass on $ext_if2 inet from 10.0.0.0/24 to 192.168.89.0/24 -> 192.168.89.99
nat pass inet from 10.0.0.105 to 10.0.12.0/24 -> 10.0.12.1
nat pass inet from 10.0.0.0/16 to 10.0.0.100 port {137,138,139,445} -> 10.0.0.1
nat from 10.0.0.100 to !<no_nat> -> $ext_if2
nat pass from 10.0.0.105 to !<no_nat> -> $ext_if1
nat pass from 10.0.0.14 to !<no_nat> -> $ext_if1

nat from 10.0.0.0/20 to !<no_nat> -> { ($ext_if1) ($ext_if2) } round-robin sticky-address
nat from 10.0.100.0/24 to !<no_nat> -> { ($ext_if1) ($ext_if2) } round-robin sticky-address
nat from 10.0.99.0/24 to !<no_nat> -> { ($ext_if1) ($ext_if2) } round-robin sticky-address

pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>

Не забываем также поменять параметры IPFW, что надо менять:
Код:
${f} add 200 skipto 500 ip from any to any { via ${ifOut} or via ${ifOut2} }
${f} add 400 skipto 450 ip from any to any { recv ${ifOut} or recv ${ifOut2} }
${f} add 2050 deny ip from any to any { via ${ifOut} or via ${ifOut2} }

Ни какие дефаултоуты править не нужно.


Название: Re: два провайдера 2 шлюза
Отправлено: kuhar от 04 Июня 2013, 18:30:14
А можешь плизз описать чем являются подсети и ip:
192.168.0.0/16
10.0.0.0/16
192.168.88.99 на сколько я понял это ip ISP1
192.168.89.99 на сколько я понял это ip ISP2
10.0.0.105
10.0.12.0/24
10.0.12.1
10.0.0.100
10.0.0.1
10.0.0.14

Для меня будет достаточна следующая конфигурация?
Код:
set limit states 128000
set optimization aggressive

ext_if1="ip_PS1"
ext_if2="ip_PS2"
ext_gw1="GW_PS1"
ext_gw2="GW_PS2"

nat pass on $ext_if1 from 10.0.24.0/24 to any -> $ext_if1
nat pass on $ext_if2 from 10.0.25.0/24 to any -> $ext_if2

nat from 10.0.24.0/24 to !<no_nat> -> { ($ext_if1) ($ext_if2) } round-robin sticky-address
nat from 10.0.25.0/24 to !<no_nat> -> { ($ext_if1) ($ext_if2) } round-robin sticky-address

pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>

IPFW именно так и настроен у меня, и еще у меня сейчас в rc.conf закоменчен defaultrouter, так как оба прова соединяются по dhcp, но по какой-то причине постоянно в netstat светится GW второго прова, может нужно defaultrouter прописать какой-то локальный ip?


Название: Re: два провайдера 2 шлюза
Отправлено: Rico-X от 05 Июня 2013, 06:53:13
А можешь плизз описать чем являются подсети и ip:
192.168.0.0/16 - Вся серая подсеть 192.168 - на нее не натим
10.0.0.0/8 - тоже с 10.
192.168.88.99 - Айпишка самого маршрутизатора, смотрящая в сторону ISP1
192.168.89.99  - Айпишка самого маршрутизатора, смотрящая в сторону ISP2
10.0.0.105 - Сервак помойка, просто ему разрешаем попадать в приватный вилан 12
10.0.12.0/24 - Приватный вилан для сотрудников
10.0.12.1 - Айпишка самого маршрутизатора для вилана 12
10.0.0.100 - Сервачек, который всегда должен ходить через 1 интерфейс
10.0.0.1 - Айпишка самого маршрутизатора на вилане 1
10.0.0.14 - аналогично со 105
То-есть в принципе эти значения исключительно для сетки, откуда я их выдрал. Основное

Для меня будет достаточна следующая конфигурация?
Код:
set limit states 128000
set optimization aggressive

ext_if1="ip_PS1"
ext_if2="ip_PS2"
ext_gw1="GW_PS1"
ext_gw2="GW_PS2"

nat pass on $ext_if1 from 10.0.24.0/24 to any -> $ext_if1
nat pass on $ext_if2 from 10.0.25.0/24 to any -> $ext_if2

nat from 10.0.24.0/24 to !<no_nat> -> { ($ext_if1) ($ext_if2) } round-robin sticky-address
nat from 10.0.25.0/24 to !<no_nat> -> { ($ext_if1) ($ext_if2) } round-robin sticky-address

pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>


Можно без:
Код:
nat from 10.0.24.0/24 to !<no_nat> -> { ($ext_if1) ($ext_if2) } round-robin sticky-address
nat from 10.0.25.0/24 to !<no_nat> -> { ($ext_if1) ($ext_if2) } round-robin sticky-address
Эти строки для динамической балансировки нагрузки


Цитировать
IPFW именно так и настроен у меня, и еще у меня сейчас в rc.conf закоменчен defaultrouter, так как оба прова соединяются по dhcp, но по какой-то причине постоянно в netstat светится GW второго прова, может нужно defaultrouter прописать какой-то локальный ip?

Нет ничего прописывать не надо, если не выйдет - дайте ssh или тимвивер - посмотрим что не так.


Название: Re: два провайдера 2 шлюза
Отправлено: SeMant от 09 Февраля 2014, 13:47:39
  Что -то у меня ничего не получается.
 У меня два канала, один Я получаю по рррое второй по дхцп.
Код:
 root@vento:/etc#cat pf.conf
set limit states 128000
set optimization aggressive

ext_if1="em1" # dhcp
ext_if2="re0" # pppoe
ext_gw1="GW_PS1"
ext_gw2="GW_PS2"

nat pass on $ext_if1 from 10.10.0.0/16 to any -> $ext_if1
nat pass on $ext_if2 from 10.10.0.0/16 to any -> $ext_if2

nat from 10.10.0.0/16 to !<no_nat> -> { ($ext_if1) ($ext_if2) } round-robin sticky-address
# nat from 10.0.0.0/8 to !<no_nat> -> { ($ext_if1) ($ext_if2) } round-robin sticky-address

pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>

абоненты ходят только туда, куда стоит маршрут по default. меняю по ходу работы маршрут, работаем через другого прова.
И ещё, Я же правильно понимаю, больше нигде ничего настраивать не надо, чтобы сервер мог работать одновременно на два шлюза ?


Название: Re: два провайдера 2 шлюза
Отправлено: k291 от 02 Августа 2014, 23:53:57
Решили проблему?


Название: Re: два провайдера 2 шлюза
Отправлено: SeMant от 08 Октября 2014, 06:34:43
Решили проблему?
Скорее нет чем да. Если к серверу подключаться по ip (всегда онлайн), то трафик балансируется. Но дело в том, что абоненты у меня подключаются по пппое и тунели ходят только по дефолту.
 Как балансировать трафик пппое пока не знаю. Гле-то читал, что народ с помощью PF балансироваал пппое тунели на кол-во шлюзов.
 Проблема пока открыта, если только не поставить перед насом сервер для балансирования.


Название: Re: два провайдера 2 шлюза
Отправлено: Animancorda от 10 Декабря 2015, 09:28:36
Попробуйте создать VLAN для каждого сервиса в отдельности со своим Service ID и Vlan ID. И пускай трафик по каждому гоняет там где вам надо