Jump to content
Калькуляторы

FreeBSD+mpd policy based routing

Добрый день.

Имеется:

 

# uname -a

FreeBSD vpn11.xxx.ru 7.3-STABLE-201011 FreeBSD 7.3-STABLE-201011 #0: Wed Dec 1 15:28:18 MSK 2010 root@vpn.xxx.ru:/usr/obj/usr/src/sys/VPN11 amd64

 

# mpd5 -v

Version 5.5 (root@vpn11.xxx.ru 16:54 1-Dec-2010)

 

 

# ifconfig em0

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

options=219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC>

ether 00:1c:c0:a3:3f:8b

inet 11.11.11.32 netmask 0xfffff800 broadcast 11.11.18.255

inet 22.22.22.32 netmask 0xfffff800 broadcast 22.22.29.255

inet 33.33.33.32 netmask 0xfffff800 broadcast 33.33.40.255

media: Ethernet autoselect (1000baseTX <full-duplex>)

status: active

 

 

 

mpd5+radius выдает юзерам белые адреса из разных подсетей - 11.11.11.0/21, 22.22.22.0/21, 33.33.33.0/21 (почему? потому что такие белые адреса :) )

 

В каждой подсети есть свой default route (т.к. разные провайдеры) - 11.11.11.1, 22.22.22.1, 33.33.33.1 соответственно

Сам ВПН сидит с default route=33.33.33.1.

 

Пример: юзер на ВПН сидит на ng0 (ip 11.11.15.50). Инет у юзера работает. Но пакеты уходят через шлюз ВПН, т.е. 33.33.33.1. А должны уходить через 11.11.11.1

 

Как это реализовать? В линухе делал через iproute2 (ip route table xxx / ip rule xxx)

Share this post


Link to post
Share on other sites
Пример: юзер на ВПН сидит на ng0 (ip 11.11.15.50). Инет у юзера работает. Но пакеты уходят через шлюз ВПН, т.е. 33.33.33.1. А должны уходить через 11.11.11.1

 

Как это реализовать? В линухе делал через iproute2 (ip route table xxx / ip rule xxx)

iface up-script
${fwcmd} table 10 add $4
rc.firewall
${fwcmd} add fwd 11.11.11.1 ip from table\(10\) to any

Share this post


Link to post
Share on other sites

Кроме правил fwd для ipfw и route-to для pf можно посмотреть в сторону man setfib.

Share this post


Link to post
Share on other sites

кто-нибудь может, как такое с помощью pf реализовать?

Share this post


Link to post
Share on other sites

как-то так

pass out quick route-to (vlan123 11.11.11.1) inet from <table10> to !<table10> flags any no state

Share this post


Link to post
Share on other sites

У меня пока так.

 

ext_if="em0"
ext_gw1="11.11.11.11"
ext_gw2="22.22.22.11"
ext_gw3="33.33.33.11"
int_if="sk0"
nn_lan="{10.0.0.0/8 172.16.0.0/16}"
nn_inet1="11.11.11.0/21"
nn_inet2="22.22.22.0/21"
nn_inet3="33.33.33.0/21"


scrub in all fragment reassemble



pass out route-to ($ext_if $ext_gw1) from $nn_inet1 to any keep state
pass out route-to ($ext_if $ext_gw2) from $nn_inet2 to any keep state
pass out route-to ($ext_if $ext_gw3) from $nn_inet3 to any keep state

 

так работает только для самой фряхи (например traceroute -s 11.11.11.32 ya.ru отличается от traceroute -s 33.33.33.32 ya.ru). ВПН клиенты же вообще тогда не могут прорваться в сеть.

Share this post


Link to post
Share on other sites

Почему мне всё это кажется какими-то костылями? Не изящнее ли BGP? Или это не PI-адреса?..

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this