用户工具

站点工具


freebsd:multiple_interface_policy_based_routing

这是本文档旧的修订版!


FreeBSD的多网卡策略路由

  • 网卡bce0: 192.168.0.10/24 网关 192.168.0.1, 系统默认路由
  • 网卡bce1: 192.168.1.10/24 网关 192.168.1.1
  • 网卡bce2: 192.168.2.10/24 网关 192.168.2.1

设置范例

/etc/sysctl.conf

默认的kernel是只有1个fib. 启用 8 组 fib. 另外从 13.0 开始, 系统默认不再在其他 fib 添加所有地址, 为了简化工作启用 net.add_addr_allfibs 用于添加所有设备的地址到所有路由表.

net.fibs=8
net.add_addr_allfibs=1

/etc/rc.conf

ifconfig_bce0="inet 192.168.0.10/24"
ifconfig_bce1="inet 192.168.1.10/24 fib 1"
ifconfig_bce2="inet 192.168.2.10/24 fib 2"
defaultrouter="192.168.0.1"
static_routes="bce1 bce2"
route_bce1="-inet default 192.168.1.1 -fib 1"
route_bce2="-inet default 192.168.2.1 -fib 2"

防火墙设置

选择 pf 或者 ipfw 其中一项即可. 需要用到防火墙做转发规则的原因是, 当非默认路由所在的网卡(bce1和bce2), 发送至网段以外的数据包, 系统还是通过默认路由传出. 因此要设置转发规则来进行基于源地址的策略路由.

pf

pass out quick inet from 192.168.1.10 to any flags S/SA keep state rtable 1
pass out quick inet from 192.168.2.10 to any flags S/SA keep state rtable 2
pass in quick on bce1 reply-to (bce1 192.168.1.1) inet from any to 192.168.1.10 flags S/SA keep state
pass in quick on bce2 reply-to (bce2 192.168.2.1) inet from any to 192.168.2.10 flags S/SA keep state

ipfw

ipfw add setfib 1 ip from 192.168.1.10 to any
ipfw add setfib 2 ip from 192.168.2.10 to any
freebsd/multiple_interface_policy_based_routing.1652044413.txt.gz · 最后更改: 2022/05/09 05:13 由 Hshh