作者:鄧聰聰
關於包的原路返回的問題:
舉個例子,比如如果一個linux服務器有三個口接三個不同的網絡,假設對應的網絡信息是如此
ens33是電信,ip地址為1.1.1.2/24,電信網關為1.1.1.1
ens224是聯通,ip地址為2.2.2.2/24,聯通網關為2.2.2.1
ens256是移動,ip地址為3.3.3.2/24,移動網關為3.3.3.1
傳統情況下,如果是為了從內向外訪問獲得更好的速度,讓訪問電信走電信,訪問聯通走聯通,那么配置是網關只能夠配置一個,比如以電信為主的,那么網關就只設置電信的1.1.1.1,而針對聯通和移動設置不同的路由,路由下一跳指向聯通和移動對應的網關。如果這樣做的目的只是實現內部訪問外面,那么是沒問題了,但是如果是為了讓外面的用戶能夠正常訪問到服務器上的服務就會出問題。比如電信用戶會無法訪問聯通和移動的ip,聯通用戶會無法訪問電信和移動的ip。要解決這個問題,思路就是由哪個網口進來的流量希望全部就由哪個回去。用lartc里面提到的方法就是來源的口不同,走不同的路由表。在默認的路由表基礎上再建立兩個路由表。
用 ip route show 可以看到默認有local,main,default三個路由表,這三個路由表的名稱命名來自 /etc/iproute2/rt_tables ,這里先在這個配置文件里面添加兩個不同的路由表表名,分別是聯通和移動,電信配置有默認網關
echo ''102 Chinacnc'' >> /etc/iproute2/rt_tables
echo "103 Chinacmcc" >> /etc/iproute2/rt_tables
之后建立這兩個路由表的內容,因為這兩個路由表的只是用來響應來自不同接口的,而不是用來相應從哪個接口出去的,所以只需要路由表里面建立默認網關即可。
ip route add default via 2.2.2.1 dev eth1 table Chinacnc
ip route add default via 3.3.3.1 dev eth2 table Chinacmcc
之后再加上兩條規則,使來自不同的口的走不同的路由表
ip rule add from 2.2.2.2 table Chinacnc
ip rule add from 3.3.3.2 table Chinacmcc
至此無論是電信還是聯通還是移動用戶,訪問三個ip的任意一個地址都能夠連通了。
查看路由信息:ip route show / route -n
目的地址選擇出口使用靜態路由的方式:
1,手動添加目的地址靜態路由的方式
route add -net x.x.x.x/24 gw x.x.x.x
2,增加目的地址路由的配置文件,網卡重啟立即生效
vi /etc/sysconfig/network-scripts/route-ens224 #聯通,移動方法同理,設置正確的網卡信息
x.x.x.x via 2.2.2.1
