iproute2:具有多个网络和多个网关的路由

nix*_*win 2 static-routes routing iproute2

我有一个运行 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
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

我想在各自分配的 ISP/30/29子网之间分别路由流量。如果流量来自一个 ISP 的/30网络,则应将其路由到该 ISP 的/29网络,反之亦然。我不介意源自一个 ISP /29网络、发往另一 ISP/29网络的流量是否在我的路由器中路由(不会将其发送到一个 ISP 并返回其他 ISP 的链路)。

我的目标是不为两个 ISP 购买两个路由器。如何使用 iproute2 表和策略路由来实现此目的?

mgo*_*ven 5

首先,为每个 ISP 创建路由表(只需完成一次):

echo "11 isp1" >> /etc/iproute2/rt_tables
echo "12 isp2" >> /etc/iproute2/rt_tables
Run Code Online (Sandbox Code Playgroud)

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

ip route add default via 192.168.0.177 table isp1
ip route add default via 192.168.6.209 table isp2
Run Code Online (Sandbox Code Playgroud)

然后添加规则以根据源地址将流量发送到这些表:

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
Run Code Online (Sandbox Code Playgroud)