Всем привет, в свое время данный форум мне очень помог, и сейчас хочу снова прибегнуть к вашей помощи.
Имеется шлюз-сервер на: FreeBSD 9.3-RELEASE #2: Thu Jun 11 09:52:58 MSK 2015
И центральный L3 Коммутатор.
В шлюзе серверное железо с сетевыми картами с поддержкой 802.1Q.
Был подключен второй провайдер, и отсюда появился вопрос, как можно организовать работу всей инфраструктуры.
em0 - Интерфейс смотрящий в сеть 192.168.1.10
em1 - Интерфейс смотрящий во внешний мир 11.11.11.11На сервере стоит IPFW + Kernel NAT, почти все правила IPFW имеют вид:
allow tcp from me [port] to any via em1 , то есть пакеты пропускаются непосредственно через интерфейс, как таковой IP адрес в правилах почти нигде не фигурирует
Я объединил на коммутаторе оба провайдера по разным VLAN в trunk, который подал на em1
Я прошу прощение, за мое невежество, но возможно ли создать на внешнем интерфейсе два VLANа
ifconfig_vlan10="inet 11.11.11.11 netmask 255.255.255.252 vlan 10 vlandev em1"
ifconfig_vlan11="inet 22.22.22.22 netmask 255.255.255.252 vlan 11 vlandev em1"
Затем простой метрикой выставить главным основной канал, а второстепенным - резервный.
То есть по приоритету все пакеты будут ломиться в основной vlan, а как только он не сможет обеспечить работу все пакеты пойдут на резерв.И так как они оба vlandev em1, то правила файерволла не придется переписывать повторно, так как их довольно много. Или так не получится? И все равно конфиг придется полностью разделять на оба виртуальных интерфейса по виду:
allow tcp from me [port] to any via vlan10
allow tcp from me [port] to any via vlan11
Или все таки IPFW умеет работать с транком?Отсюда возникает еще один вопрос
defaultrouter="11.11.11.10"
rc.conf, на сколько я знаю не поддерживает больше одного defaultrouter, а следовательно что бы назначить на второй интерфейс его шлюз нам придется использовать что-то другое. Возможно ли здесь использование демона mrouted для решение этой задачи? Если да, то как должно выглядеть правило, я так понимаю: route add IP 22.22.22.21 -iface vlan11Жду ваших ценных советов и замечаний, если данный метод заработает то, выложу статью на wiki
> Отсюда возникает еще один вопрос
> defaultrouter="11.11.11.10"
> rc.conf, на сколько я знаю не поддерживает больше одного defaultrouter, а следовательно
> что бы назначить на второй интерфейс его шлюз нам придется использовать
> что-то другое. Возможно ли здесь использование демона mrouted для решение этой
> задачи? Если да, то как должно выглядеть правило, я так понимаю:
> route add IP 22.22.22.21 -iface vlan11в rc.conf
static_routers="vlan11"
route_vlan11="-net 22.22.22.20/30 22.22.22.21"Вроде, работает.
>[оверквотинг удален]
>> defaultrouter="11.11.11.10"
>> rc.conf, на сколько я знаю не поддерживает больше одного defaultrouter, а следовательно
>> что бы назначить на второй интерфейс его шлюз нам придется использовать
>> что-то другое. Возможно ли здесь использование демона mrouted для решение этой
>> задачи? Если да, то как должно выглядеть правило, я так понимаю:
>> route add IP 22.22.22.21 -iface vlan11
> в rc.conf
> static_routers="vlan11"
> route_vlan11="-net 22.22.22.20/30 22.22.22.21"
> Вроде, работает.маленькая опечатка - static_routes, но смысла именно в таком маршруте не вижу, т.к. для маршрутизации сети 22.22.22.20/30 через шлюз 22.22.22.21 вам на интерфейсе vlan11 необходимо иметь 22.22.22.22/30, что само собой значит наличие маршрута на сеть 22.22.22.20/30 в статусе connected.
Mrouted вам не нужен, он предназначен для мультикаста, вы же работаете с "интернет" где трафик грубо говоря уникаст.
По существу основного вопроса:
- метрикой интерфейса вам не удасься разрулить два канала в два провайдера, т.к. вы не сможете знать "жив" основной канал или нет. Для этого надо делать самописные приблуды проверяющие доступность канала: кому-то достаточно проверять раз в минуту кроном пинг на шлюз, кому-то необходимо делать это максимально быстро, поэтому вешается скриптом tcpdump и слушается входящий трафик. Как только срабатывает событие down делаем route change default.
- в ipfw вам точно надо дописать/поменять nat чтоб он работал на оба интерфейса, а для основных правил можно использовать конструкцию { via vlan10 or via vlan11 }
> По существу основного вопроса:
> - метрикой интерфейса вам не удасься разрулить два канала в два провайдера,
> т.к. вы не сможете знать "жив" основной канал или нет. Для
> этого надо делать самописные приблуды проверяющие доступность канала: кому-то достаточно
> проверять раз в минуту кроном пинг на шлюз, кому-то необходимо делать
> это максимально быстро, поэтому вешается скриптом tcpdump и слушается входящий трафик.
> Как только срабатывает событие down делаем route change default.А нельзя заставить фряху работать просто сразу с двумя, не переключаясь, что бы пакеты шли в оба провайдера. Так как и там и там безлимит, а через те же pipe's можно указать скорости, что бы не было зависаний.
> - в ipfw вам точно надо дописать/поменять nat чтоб он работал на
> оба интерфейса, а для основных правил можно использовать конструкцию { via
> vlan10 or via vlan11 }Ну и если менять правила nat, то это решается прямо в лоб?
nat 1 ip4 from any to any via vlan10
nat 1 ip4 from any to any via vlan11
nat 1 ip4 from any to any via em1
То есть средствами IPFW нельзя работать сразу с транком, а можно только с вланами?
Вообще в файерволле сейчас написаны правила вида^
Lanout="em1"
fwcmd="/sbin/ipfw -q"
Где сами правила имеют вид
${fwcmd} add allow ip from any to any via ${Lanout}Не могли бы подсказать как должно выглядеть данное правило or?
Гугл говорит подобное: ipfw add 10000 allow ip from any to any in { via fxp0 or via fxp1 }Тут надо подумать как можно их засунуть в тот же Lanout=""
С другой стороны можно попробовать скриптом, как вы советуете, (поискать в том же интернете готовый, и изменить) где при падении как вы говорите будет меняться defaultrouter и путь к правилам ipfw, дальше перезагрузка ipfw+nat и оно снова работает
Я так понимаю при замене defaultrouter , нам надо будет перезагрузить маршруты /etc/rc.d/routing restart
>[оверквотинг удален]
> Не могли бы подсказать как должно выглядеть данное правило or?
> Гугл говорит подобное: ipfw add 10000 allow ip from any to any
> in { via fxp0 or via fxp1 }
> Тут надо подумать как можно их засунуть в тот же Lanout=""
> С другой стороны можно попробовать скриптом, как вы советуете, (поискать в том
> же интернете готовый, и изменить) где при падении как вы говорите
> будет меняться defaultrouter и путь к правилам ipfw, дальше перезагрузка ipfw+nat
> и оно снова работает
> Я так понимаю при замене defaultrouter , нам надо будет перезагрузить маршруты
> /etc/rc.d/routing restartУ меня что-то типа from myip2 fwd gwprovider2
это дает отвечать с двух интерфейсов серверу (почта и т.д.), ну и 2 ната. Я не стал париться, один ядром, второй демоном запустил. Но нагрузка тут балансируется только статическими маршрутами.
Ну так руки и не дошли до второго провайдера
Появилась новая мысль, сделать через setfib, то есть добавив еще одну таблицу маршрутизации.
И через rc.local выставить: setfib 0 add default 111.111.111.111 setfib 1 add default 222.222.222.222
с ipfw я так понимаю придется все правила, а их около сотни продублировать для второго провайдера, что грустно, ну а куда деваться
Я не дублировал. Не понимаю чего там дублировать.
> Я не дублировал. Не понимаю чего там дублировать.Ну просто у меня в фаерволле много правил, например такого вида
кусочек ipfw show:08500 allow udp from any to any dst-port 87 via em1
08600 allow tcp from any to any dst-port 1024 via em1
08700 allow tcp from any 1024 to any via em1
08800 allow tcp from any to any dst-port 9443 via em1
08900 allow tcp from any 9443 to any via em1
09000 allow tcp from any 8010 to any via em1
09100 allow tcp from any to any dst-port 8010 via em1Грубо говоря в файерволе закрыты все не используемые порты, а те которые открыты идут от определенного узла до определенного, например в том же openvpn, разрешается прохождение пакетов только от удаленного офиса ко мне
правила выглядят таким образом "проходящие через внешнюю сетевую карту"
Я хотел, что бы оба vlan-a от основного и резервного канала, которые приходят на em1 работали по одним правилам, и спрашивал поддерживает ipfw правила на транковый интерфейс, или ему обязательно надо будет писать правила на каждый влан отдельно. т.е.
К примеру, данные два правила будут работать на vlan10 и vlan11? если оба vlan-a находятся на em1
08900 allow tcp from any 9443 to any via em1
09000 allow tcp from any 8010 to any via em1Или нам придется изменять правила на:
08900 allow tcp from any 9443 to any via vlan10
09000 allow tcp from any 8010 to any via vlan10
08900 allow tcp from any 9443 to any via vlan11
09000 allow tcp from any 8010 to any via vlan11Если будет работать, то хорошо, в выходные тогда доделаю резерв
Настроил две таблицы маршрутизации, работают оба провайдера, чуть позже выложу мануал