Настроил PBR , используя статью :http://www.opennet.me/base/net/bsd_pbr_route.txt.html
Можно ли настроить PBR , используя вместо IPFW PF ?
Поделитесь опытом , пожалуйста .
>Настроил PBR , используя статью :
>
>http://www.opennet.me/base/net/bsd_pbr_route.txt.html
>
>Можно ли настроить PBR , используя вместо IPFW PF ?
>Поделитесь опытом , пожалуйста .В Pf так же как и в ip-filter есть возможность роутить ракеты на шлюз по принуждению за счёт route-to и при наличии net.inet.ip.forwarding=1
почитай на PF сайте документацию на тему "Load Balance Outgoing Traffic"
там возможностей по больше будет чем в IPFW
>>Настроил PBR , используя статью :>
>В Pf так же как и в ip-filter есть возможность роутить ракеты
>на шлюз по принуждению за счёт route-to и при наличии net.inet.ip.forwarding=1
>
>почитай на PF сайте документацию на тему "Load Balance Outgoing Traffic"
>там возможностей по больше будет чем в IPFW
Прочитал .
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
# load balance outgoing udp and icmp traffic from internal network
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Эти правила , насколько понимаю , включают балансировку между двумя
провайдерами , а как быть , если нужно просто направить все пакеты из
$int_net1 на $gw1 , а из $int_net2 на $gw2 ?
>Эти правила , насколько понимаю , включают балансировку между двумя
>провайдерами , а как быть , если нужно просто направить все пакеты
>из
>$int_net1 на $gw1 , а из $int_net2 на $gw2 ?Я решал такую же проблему. Нужно было сделать NAT из внутренней сети к двум разным провайдерам. Сделать так чтобы всё шло правильным маршрутом автоматически не получилось. Ведь действительно как роутер должен угадывать какому из двух провайдеров сейчас отправлять пакет?
Поэтому работает такой подход:
Делаем NAT:
nat on $proc from $internal_net to any -> ($proc)
Теперь нужно сделать чтобы это шло через нужный шлюз, а не тот, что указан в таблице роутинга:
pass in quick on $internal from $internal_net to $internal
pass in on $internal route-to ($proc $proc_gw) from $internal_net to any
Первая строчка нужна чтобы связь с самим роутером не была потеряна. Вторая строчка говорит, что всё из внутренней сети должно идти через шлюз $proc_gw.
Вот объявления переменных:
corbina_tun = "tun0"
corbina_loc = "xl0"
proc = "fxp0"
internal = "vr0"
corbina_tun_gw = "Unknown"
corbina_loc_gw = "10.83.0.17"
proc_gw = "217.117.116.129"
internal_net = "vr0/29"Если нужно теперь отправить что-то через второй шлюз, то надо дописать правила на те случаи когда нужно пользоваться вторым шлюзом. Эти правила должны быть и для NAT и для pass in .. route-to .....
Далее идут непрверенные мысли:
Возможно автоматически всё можно сделать строчками типа вот этих:
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
которые я взял из http://www.openbsd.org/faq/pf/pools.html. Но эти строчки ловят идущие не туда пакеты и направляют их куда надо (я так предполагаю), а надо напрямую написать правила pass out для одного и того же интерфейса типа:
pass out on $ext_if1 route-to ($ext_if1 $ext_gw1) from $ext_if1 \
to any
pass out on $ext_if2 route-to ($ext_if2 $ext_gw2) from $ext_if2 \
to any
Эти строчки отличаются от предыдущих!