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的線路上網。這樣就能通過動態調整用戶路由的方式來合理使用帶寬資源,避免帶寬浪費和多用戶共用出口導致擁堵。