Linux系统自带的ip命令功能十分强大,选项也十分丰富,在使用Linux主机当网关,多ISP接入的环境下,常用的方式就是根据AS号来选择路由,即多用户共同使用一张路由表。而因系统自带的默认路由无法根据源IP进行选路,所以仅依靠默认路由来无法使资源得到充分的利用,这时候就可以利用ip命令来配置基于源IP的策略路由。
其实系统维护着很多张的路由表,默认路由表只是其中的一张,路由表文件位于/etc/iproute2/rt_tables当中,其中255是本地路由表;254是主路由表;253是默认路由表和0则是系统保留的路由表,用户自定义路由表编码可在1-252之间。
可以在/etc/iproute2/rt_tables文件里加上自定义的路由表并且命名,比如
100 isp1
101 isp2
保存后,接下来就是自定义策略路由,让网关根据源ip来进行选路,假设ISP1的网关为172.16.0.1,ISP2的网关为172.17.0.1,首先往路由表100里面配置规则
ip route add 0.0.0.0/0 via 172.16.0.1 table 100
或者也可以用路由表名称代替号码
ip route add 0.0.0.0/0 via 172.16.0.1 table isp1
这条路由就定义了到ISP1的默认路由,而ISP2也同理
ip route add 0.0.0.0/0 via 172.17.0.1 table isp2
两条路由都配置完毕后,就应该配置策略,匹配源IP与查询的路由表。
ip rule add from 192.168.0.0/24 table isp1
ip rule add from 192.168.1.0/24 table isp2
这条规则表示源IP是192.168.0.0/24网段的,查询名称为isp1的路由表,而源IP是192.168.1.0/24的则查询名称为isp2的路由表,这样配置后的效果就是,192.168.0.0/24网段的用户下一跳路由为172.16.0.1,即通过ISP1的线路上网,而192.168.1.0/24网段的用户则下一跳为172.17.0.1,通过ISP2的线路上网。这样就能通过动态调整用户路由的方式来合理使用带宽资源,避免带宽浪费和多用户共用出口导致拥堵。
如果要删除上述2条策略路由的命令:输入
#ip rule del from 192.168.0.1/24 table isp1
#ip route del to 0.0.0.0/0 via 172.16.0.1 table isp1
ip route list table isp1
ip route show