我有一台运行 Ubuntu 10.04 的 Linux 机器,它有三个接口:eth0
和eth1
。eth2
我计划将其用作由两个不同的 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
子网之间路由流量。如果流量来自一个 ISP 的/30
网络,则应将其路由到该 ISP/29
的网络,反之亦然。我不介意从一个 ISP 的 /29
网络发起并发往另一个 ISP 的/29
网络的流量在我的路由器中路由(而不是将其发送到一个 ISP 并返回其他 ISP 的链接)。
我的目标是不为两个 ISP 购买两个路由器。如何使用 iproute2 表和策略路由来实现这一点?
答案1
首先,为每个 ISP 创建一个路由表(只需做一次):
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
然后添加规则,根据源地址将流量发送到这些表:
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