關於ip route線路負載均衡的一些總結
問題一:關於包的原路返回的問題:
#################################################################################
舉個例子,比如如果一個linux服務器有三個口接三個不同的網絡,假設對應的網絡信息是如此
eth0是電信,ip地址為1.1.1.1/24,電信網關為1.1.1.254
eth1是網通,ip地址為2.2.2.2/24,網通網關為2.2.2.254
eth2是教育網,ip地址為3.3.3.3/24,教育網網關為3.3.3.254
傳統情況下,如果是為了從內向外訪問獲得更好的速度,讓訪問電信走電信,訪問網通走網通,那麼配置是網關只能夠配置一個,比如以電信為主的,那麼網關就只設置電信的1.1.1.254,而針對網通和教育網設置不同的路由,路由下一跳指向網通和教育網對應的 網關。如果這樣做的目的只是實現內部訪問外面,那麼是沒問題了,但是如果是為了讓外面的用戶能夠正常訪問到服務器上的服務就會出問題。比如電信用戶會無法訪問網通和教育網的ip,網通用戶會無法訪問電信和教育網的ip。要解決這個問題,思路就是由哪個網口進來的流量希望全部就由哪個回去。用lartc裡面提到的方法就是來源的口不同,走不同的路由表。在默認的路由表基礎上再建立三個路由表。
用 ip route show 可以看到默認有local,main,default三個路由表,這三個路由表的名稱命名來自 /etc/iproute2/rt_tables ,這裡先在這個配置文件裡面添加三個不同的路由表表名,
echo “101 ChinaNet” >> /etc/iproute2/rt_tables
echo ”102 ChinaCnc“ >> /etc/iproute2/rt_tables
echo ”103 ChinaEdu“ >> /etc/iproute2/rt_tables
之後建立這三個路由表的內容,因為這三個路由表的只是用來響應來自不同接口的,而不是用來相應從哪個接口出去的,所以只需要每個路由表裡面建立默認網關即可。
ip route add default via 1.1.1.254 dev eth0 table ChinaNet
ip route add default via 2.2.2.254 dev eth1 table ChinaCnc
ip route add default via 3.3.3.254 dev eth2 table ChinaEdu
之後再加上三條規則,使來自不同的口的走不同的路由表
ip rule add from 1.1.1.1 table ChinaNet
ip rule add from 2.2.2.2 table ChinaCnc
ip rule add from 3.3.3.3 table ChinaEdu
至此無論是電信還是網通還是教育網用戶,訪問三個ip的任意一個地址都能夠連通了。即便是服務器上本身的默認路由都沒有設置,也能夠讓外面的用戶正常訪問。
命令匯總:
#ip route show
#echo “101 ChinaNet” >> /etc/iproute2/rt_tables
#echo ”102 ChinaCnc“ >> /etc/iproute2/rt_tables
#echo ”103 ChinaEdu“ >> /etc/iproute2/rt_tables // 這裡也可以直接通過Vi編輯
#ip route add default via 1.1.1.254 dev eth0 table ChinaNet
#ip route add default via 2.2.2.254 dev eth1 table ChinaCnc
#ip route add default via 3.3.3.254 dev eth2 table ChinaEdu
#ip rule add from 1.1.1.1 table ChinaNet
#ip rule add from 2.2.2.2 table ChinaCnc
#ip rule add from 3.3.3.3 table ChinaEdu //如果用數字,可以不許要上面的“echo”過程