/etc/network/interfaces
iface eth0 inet static
address 10.0.0.1
netmask 255.255.255.0
gateway 10.0.0.254
iface eth1 inet static
address 20.0.0.1
netmask 255.255.255.0
gateway 20.0.0.254
NETWORK0 NETWORK1 \ / \ / \ / \ / \ / ROUTER0 ROUTER1 10.0.0.254 20.0.0.254 \ / +------\----------------/------+ | \ / | | em0 em1 | | 10.0.0.1 20.0.0.1 | | | | FREEBSD BOX | | | +------------------------------+
Now, You can not use the 'casual' defaultrouter="X" cause it will be only for one network.
We will have to use setfib(1) to create two (or more) separete routing tables per network/interface.
Add these lines to /boot/loader.conf file:
ipfw_load="YES" net.fibs=16
It will unfortunately require kernel recompile, but its not as that hard:
# cd /usr/src/sys/$( uname -m )/conf # cp GENERIC /root/ROUTES # ln -s /root/ROUTES # echo "options ROUTETABLES=16" >> ROUTES # cd /usr/src # make NO_MODULES=1 kernel KERNCONF=ROUTES KODIR=/boot/routes # mv /boot/routes/kernel /boot/kernel/kernel # reboot
We can of course set 2 instead of 16, but You will at least have to recompile Your kernel again and reboot which is not very handy ...
Nest set your networks/interfaces as usual in /etc/rc.conf file:
ifconfig_em0="inet 10.0.0.1/24" ifconfig_em1="inet 20.0.0.1/24" # check /etc/rc.local for default routes
All the rest configuration resides in /etc/rc.local file:
# define default routes setfib 0 route delete default setfib 0 route add default 10.0.0.254 setfib 1 route delete default setfib 1 route add default 20.0.0.254 # assing route tables to interfaces ipfw -f flush ipfw add allow ip from any to any via lo0 ipfw add setfib 1 ip from any to any via em0 ipfw add setfib 0 ip from any to any via em1 ipfw add allow ip from any to any
These would be handy for restarting:
# /etc/rc.d/netif restart # /etc/rc.d/local restart
... and thats all folks.