Gih's Blog

只言片语

FreeBSD多路由表的应用

2011-06-24 by gihnius, tagged as freebsd

从FreeBSD 7.1开始,系统支持 multi route tables. 不过还不是默认,需要编译内核才支持. 其实有很多人都希望这个应作为系统默认的功能. 希望在即将到来的FreeBSD 9中出现. 这样可以轻松实现策略路由. 本人在工作中也需要这种功能,所以写个经验总结跟大家分享一下. 错漏之处还请多多指教.

加入内核支持,这个是必需的,希望以后成为默认:

option ROUTETABLES=16
这个值有个范围: 1 - 16, 选最大的吧. 添加进内核后, 可以通过 net.fib=N来修改,比如:
## in /boot/loader.conf
net.fib=4 
还可以通过sysctl 查看当前设置值.
$ sysctl net. | grep fib
net.my_fibnum: 0
net.add_addr_allfibs: 1
net.fibs: 16 
编译内核,参考文档吧:
cd /usr/src; make -j4 kernel KERNCONF=MRT
应用:客户端应用,以我的为例, 上班时我要用wifi上网,又要上维护内网服务器.wifi的路由是 192.168.1.1 192.168.1.0/24, 接口是 wlan0内网服务器的路由是 132.96.20.8 132.96.20.0/26, 接口是 re0先配置ip, wlan0是动态的,常规方法配置即可. re0是静态的:
ifconfig re0 up
ifconfig re0 inet 132.96.20.24 netmask 255.255.255.192
setfib -F 1 route add default 132.96.20.8 
re0的路由表配置在 fib 1 上, wlan0之前已经设置,它会默认使用 fib 0.可以看看路由表:
 netstat -nr
Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            192.168.1.1        UGS        20     9905  wlan0
127.0.0.1          link#13            UH          0     4092    lo0
132.96.20.0/26     link#6             U           0        0    re0
132.96.20.24       link#6             UHS         0        0    lo0
192.168.1.0/24     link#15            U           0       43  wlan0
192.168.1.9        link#15            UHS         0        0    lo0
... 
上面是 wlan0的配置,跟 setfib -F 0是一致的:
 setfib -F 0 netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            192.168.1.1        UGS        11    10008  wlan0
127.0.0.1          link#13            UH          0     4098    lo0
132.96.20.0/26     link#6             U           0        0    re0
132.96.20.24       link#6             UHS         0        0    lo0
192.168.1.0/24     link#15            U           0       43  wlan0
192.168.1.9        link#15            UHS         0        0    lo0
... 
re0上的配置:
 setfib -F 1 netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            132.96.20.8        UGS       112     3518    re0
127.0.0.1          link#13            UH          0       75    lo0
132.96.20.0/26     link#6             U           0        0    re0
192.168.1.0/24     link#15            U           0        0  wlan0
... 
路由器应用:接口1 re0, 接外网internet, 通过专用 ISP. fib=2接口2 re1, 接城域网 172.16.1.0/24 fib=1接口3 re2, 接内部局域网 192.168.1.0/24 fib=0fib跟随配置网络的顺序增加.可以在路由器上用setfib启动一个shell,这个shell就处于对应的网络环境下:
setfib -F 1 $SHELL -l
之后就可以接入城域网.具体配置跟上面的差不多,无非是再作一个路由器,就不详细介绍了,因为涉及具体的方案,而且需求不同也可以灵活配置,还可以结合 pf一起使用,功能就不是一般的强大了.