Iproute2:具有多个networking和多个网关的路由

我有一个运行Ubuntu 10.04的Linux机器,有三个接口: eth0eth1eth2 。 我打算将它用作由两个不同的ISP分配的4个公共子网的WAN路由器。 这里是子网(我已经将ISP分配的子网转换为C类私有子网):

 ISP 1 WAN 192.168.0.176/30 gateway 192.168.0.177 LAN 192.168.3.192/29 ISP 2 WAN 192.168.6.208/30 gateway 192.168.6.209 LAN 192.168.9.216/29 

/30子网面向各自的ISP和/29子网面向我的LAN交换机。

这是IP如何分配给接口:

 LAN interface eth0 192.168.3.193/29 eth0:0 192.168.9.217/29 ISP 1 interface eth1 192.168.0.178/30 ISP 2 interface eth2 192.168.6.210/30 

我想分别在各自的ISP分配的/30/29子网之间路由stream量。 如果stream量来自一个ISP的/30networking,则应将其路由到该ISP /29networking,反之亦然。 我不介意在一个ISP的networking中发送的stream量是否发送到另一个ISP的networking(在没有发送给一个ISP的情况下返回到其他ISP的链接)。

我的目标是不要为两个ISP购买两台路由器。 我怎么能通过使用iproute2表和策略路由来实现这一点?

首先,为每个ISP创build一个路由表(只做一次):

 echo "11 isp1" >> /etc/iproute2/rt_tables echo "12 isp2" >> /etc/iproute2/rt_tables 

然后为每个指向相应网关的表添加一条默认路由:

 ip route add default via 192.168.0.177 table isp1 ip route add default via 192.168.6.209 table isp2 

然后添加规则来根据源地址向这些表发送stream量:

 ip rule add from 192.168.3.192/29 table isp1 ip rule add from 192.168.0.176/30 table isp1 ip rule add from 192.168.9.216/29 table isp2 ip rule add from 192.168.6.208/30 table isp2