linux多網卡策略路由
雖然我們無法改變人生,但可以改變人生觀。雖然我們無法改變環境,但我們可以改變心境。
現在很多伺服器由於業務需求,需要實現多網卡,多IP,多路由,我們知道,一般我們在系統上,只能添加一條默認路由,其他路由我們都是通過目標網段或IP來添加靜態路由實現,那麼如何實現多網卡,多IP對應多路由,實現入口IP和出口IP一致,下面了解一下。
在linux中,有一種靈活的路由策略實現方法,就是利用rt_tables。
在以往的路由管理中,我們都是通過route命令,臨時添加靜態路由,將要實現的路由,通過靜態路由的方式,添加實現,或者直接將路由表寫入network文件,以實現永久生效,簡單的路由,用這種方式實現,還能夠輕鬆應對,當網路環境複雜的時候,這種方式讓運維人員力不從心。
而rt_tables通過對路由表的命名區分,及路由規則綁定,輕鬆應對多網卡,多路由的複雜環境,
rt_tables配置文件在/etc/iproute2/rt_tables,如下:
rt_tables中,每行一條路由表及對應的優先順序(前面的數字代表優先順序,數字越小優先順序越高),使用路由表時,可以用優先順序的值,也可以用路由表的名稱,最多可以有255個路由表,默認有3張內置路由表,分別是
local(本地路由表)
本地介面地址,廣播地址,NAT地址都在這張表裡,該表由系統自動維護
main(主路由表)
通常沒有綁定路由表的路由,都在這個表中,route管理的路由一般也是添加在這張表中
default(默認路由表)
放置網關路由和默認路由
開始配置雙網卡路由,首先確認確認網卡配置中先不配置網關,否則在後面的規則配置中無法添加對應網卡路由
在rt_tables中添加兩張路由表
[root@localhost ~]# echo "2 ens37" >> /etc/iproute2/rt_tables
添加規則到路由表
[root@localhost ~]# ip rule add from 192.168.2.21 table eno16777736
在eno16777736路由表中添加一條路由規則,並綁定192.168.2.21的數據包使用該路由表。
[root@localhost ~]# ip route add default via 192.168.1.1 dev ens37 src 192.168.1.21 table ens37
[root@localhost ~]# ip rule add from 192.168.1.21 table ens37
添加好之後可以通過ip route show tables [路由表]查看路由規則
然後通過ip rule查看規則綁定
上面的配置是所有的數據包按照配置的規則執行路由,那麼下面介紹通過iptables以用戶區分執行路由。
這裡就用到了iptables的Owner Match,Owner match支持–uid-owner、–gid-owner匹配
首先我們通過useradd新建用戶,在/etc/passwd中查看用戶uid,然後通過iptables命令添加uid匹配的nat規則
iptables -t nat -A POSTROUTING -m owner --uid-owner 496 -j SNAT --to-source 192.168.2.21
之後,我們通過uid496的用戶啟動的對外的連接,都會匹配該規則,我們可以用shadowsocks代理測試。
往期經常


TAG:運維實談 |