靜態路由和策略路由的配置實踐

前言

通常在多網卡的網絡訪問關係中咱們一般根據目標IP地址段來添加靜態路由(static-routes),在主機系統配置層面這個需求通常都比較簡單也不須要使用很是複雜的命令,說實話若是不是由於開發測試中心同事@謝恆的亂入啓發,我也不會發現還有策略路由這樣一種靈活通用的配置方法來實現Linux多網卡多路由的設定,灰常感謝。html

策略路由的出如今某些業務場景下可能更優於靜態路由node


更新記錄

2016年03月18日 - 更新靜態路由配置和建議
2015年12月23日 - 增長Linux添加靜態路由最佳實踐
2015年12月18日 - 修正動態路由爲策略路由描述,完善內容,感謝@extreme
2015年12月17日 - 初稿linux

閱讀原文 - http://wsgzao.github.io/post/static-routes/git

擴展閱讀github


靜態路由表和策略路由的區別

一般咱們維護靜態路由表會手工填寫全部IP地址段的路由規則,使用命令或者寫入配置文件永久生效,先以Windows/Linux/AIX經常使用方法爲例工具

#Windows靜態路由
--鍵入 route -p add [目標] [mask <網絡掩碼>] [網關] [metric <度量值>] [if <接口>]
route print
route delete
route -p add 172.16.19.0 mask 255.255.255.0 198.15.0.1

#RHEL靜態路由
vi /etc/sysconfig/network
default via 192.168.3.1 dev eth0
10.211.6.0/24 via 192.168.3.1 dev eth0
10.0.0.0/8 via 10.212.52.1 dev eth1

#SuSE靜態路由
vi /etc/sysconfig/network/routes
default 192.168.3.1 - -
10.211.6.0 192.168.3.1 255.255.255.0 eth0
10.0.0.0 10.212.52.1 255.0.0.0 eth1

#AIX靜態路由
smitty mkroute
172.20.14.0/24 gw 172.23.14.254

這種辦法針對少許的規則還能夠輕鬆應對,但規則一旦增長麻煩也就接踵而至,網段地址不斷變化就必須及時更新路由表,不然其餘用戶就沒法訪問。若是能夠根據用戶訪問進來的路徑設定策略路由就會方便不少,而rt_tables就是爲此而生。

Linux添加靜態路由最佳實踐

按照RedHat官方介紹有三種方式添加永久靜態路由,這裏只列舉最佳方式

臨時路由

如下兩種方法能夠當即生效,但重啓後會消失,切記使用場景

#route命令參數,使用route命令,查看本機路由直接輸入route -n回車便可
add     增長路由
del     刪除路由
-net    設置到某個網段的路由
-host   設置到某臺主機的路由
gw      出口網關 IP地址
dev     出口網關 物理設備名

#添加路由
route add -net 192.168.0.0/24 gw 192.168.0.1
route add -host 192.168.1.1 dev 192.168.0.1
#刪除路由
route del -net 192.168.0.0/24 gw 192.168.0.1
#添加默認路由
route add default gw 192.168.0.1

#使用ip route 命令和route命令相似
add 增長路由
del 刪除路由
via 網關出口 IP地址
dev 網關出口 物理設備名

#添加路由
ip route add 192.168.0.0/24 via 192.168.0.1
ip route add 192.168.1.1 dev 192.168.0.1
#刪除路由
ip route del 192.168.0.0/24 via 192.168.0.1
#增長默認路由
ip route add default via 192.168.0.1 dev eth0

永久路由

該方法須要重啓網絡會形成短暫的網絡服務中斷,但重啓後優先級大於rc.local方式不會影響nfs

#能夠經過臨時命令當即生效
route add -net 192.168.3.0/24 gw 192.168.3.254

#在/etc/sysconfig/static-routes文件裏添加以下內容 (沒有static-routes的話就手動創建一個這樣的文件)
any net 192.168.3.0/24 gw 192.168.3.254
any net 10.250.228.128 netmask 255.255.255.192 gw 10.250.228.129

#若是是生產系統能夠考慮暫時不重啓服務避免網絡中斷
service network restart

rt_tables

rt_tables簡單來講就是經過給表的命名使得管理簡單化

大部分人習慣直接將路由表優先級號碼直接做爲表的名稱來使用,這樣作的好處是很是直觀和簡明的表達了表所在優先級的位置,可是當表的優先級結構出現變更時,咱們對巨大的路由表的修改就顯得很煩瑣和費事了。

在/etc/iproute2/目錄下,有這麼一個文件rt_tables,只要對它進行改動,咱們將很容易的完成路由表優先級結構的變更。(數值越小優先級別越高)

當路由表的優先級發生變化的時候,咱們只須要編輯/etc/iproute2/rt_tables這個文件就能夠直接改變路由表的優先級次序。

cat /etc/iproute2/rt_tables

#
# reserved values
#
255    local
254    main
253    default
0    unspec
#
# local
#
#1    inr.ruhep

Linux最多能夠支持255張路由表,其中有3張表是內置的:

表255 本地路由表(Local table) 本地接口地址,廣播地址,已及NAT地址都放在這個表。該路由表由系統自動維護,管理員不能直接修改。

表254 主路由表(Main table) 若是沒有指明路由所屬的表,全部的路由都默認都放在這個表裏,通常來講,舊的路由工具(如route)所添加的路由都會加到這個表。通常是普通的路由。

表253 默認路由表 (Default table) 通常來講默認的路由都放在這張表,可是若是特別指明放的也能夠是全部的網關路由。

表 0 保留

策略性路由應用及分析(iproute2)

策略性路由

  策略性是指對於IP包的路由是以網絡管理員根據須要定下的一些策略爲主要依據進行路由的。例如咱們能夠有這樣的策略:「全部來直自網A的包,選擇X路徑;其餘選擇Y路徑」,或者是「全部TOS爲A的包選擇路徑F;其餘選者路徑K」。
  Cisco 的網絡操做系統 (Cisco IOS) 從11.0開始就採用新的策略性路由機制。而Linux是在內核2.1開始採用策略性路由機制的。策略性路由機制與傳統的路由算法相比主要是引入了多路由表以及規則的概念。

多路由表(multiple Routing Tables)

  傳統的路由算法是僅使用一張路由表的。可是在有些情形底下,咱們是須要使用多路由表的。例如一個子網經過一個路由器與外界相連,路由器與外界有兩條線路相連,其中一條的速度比較快,一條的速度比較慢。對於子網內的大多數用戶來講對速度並無特殊的要求,因此可讓他們用比較慢的路由;可是子網內有一些特殊的用戶倒是對速度的要求比較苛刻,因此他們須要使用速度比較快的路由。若是使用一張路由表上述要求是沒法實現的,而若是根據源地址或其它參數,對不一樣的用戶使用不一樣的路由表,這樣就能夠大大提升路由器的性能。

規則(rule)

  規則是策略性的關鍵性的新的概念。咱們能夠用天然語言這樣描述規則,例如我門能夠指定這樣的規則:
  規則一:「全部來自192.16.152.24的IP包,使用路由表10, 本規則的優先級別是1500」
  規則二:「全部的包,使用路由表253,本規則的優先級別是32767」

  咱們能夠看到,規則包含3個要素:
  什麼樣的包,將應用本規則(所謂的SELECTOR,多是filter更能反映其做用);
  符合本規則的包將對其採起什麼動做(ACTION),例如用那個表;
  本規則的優先級別。優先級別越高的規則越先匹配(數值越小優先級別越高)。

環境配置

服務器A和B爲雙網卡,操做系統爲rhel_7.1_64

網卡顯示名稱 IP地址 子網掩碼 網關 備註
ens4f0 172.31.192.201 255.255.255.0 172.31.192.254 服務器A
ens9f0 172.31.196.1      255.255.255.0 172.31.196.254 服務器A
ens4f0 172.31.192.202 255.255.255.0 172.31.192.254 服務器B
ens9f0 172.31.196.2      255.255.255.0 172.31.196.254 服務器B
/            172.25.168.44    255.255.255.0 172.25.168.254 接入測試

網絡配置,以服務器A爲例,注意註釋默認網關

cat /etc/sysconfig/network-scripts/ifcfg-ens4f0

DEVICE=ens4f0
ONBOOT=yes
BOOTPROTO=static
TYPE=Ethernet
IPADDR=172.31.192.201
NETMASK=255.255.255.0
#GATEWAY=172.31.192.254

cat /etc/sysconfig/network-scripts/ifcfg-ens9f0

DEVICE=ens9f0
ONBOOT=yes
BOOTPROTO=static
TYPE=Ethernet
IPADDR=172.31.196.1
NETMASK=255.255.255.0
#GATEWAY=172.31.196.254

策略路由配置

注意配置名稱必定要吻合

#編輯rt_tables
echo "192 net_192 " >> /etc/iproute2/rt_tables
echo "196 net_196 " >> /etc/iproute2/rt_tables

#清空net_192路由表
ip route flush table net_192
# 添加一個路由規則到 net_192 表,這條規則是 net_192 這個路由表中數據包默認使用源 IP 172.31.192.201 經過 ens4f0 走網關 172.31.192.254
ip route add default via 172.31.192.254 dev ens4f0 src 172.31.192.201 table net_192
#來自 172.31.192.201 的數據包,使用 net_192 路由表的路由規則
ip rule add from 172.31.192.201 table net_192

#清空net_196路由表
ip route flush table net_196
#添加一個路由規則到 net_196 表,這條規則是 net_196 這個路由表中數據包默認使用源 IP 172.31.196.1 經過 ens9f0 走網關 172.31.196.254
ip route add default via 172.31.196.254 dev ens9f0 src 172.31.196.1 table net_196
#來自 172.31.196.1 的數據包,使用 net_196 路由表的路由規則
ip rule add from 172.31.196.1 table net_196

#添加默認網關
route add default gw 172.31.192.254

#若是須要自啓動生效能夠寫進配置文件也能夠加入rc.local
vi /etc/rc.local

ip route flush table net_192
ip route add default via 172.31.192.254 dev ens4f0 src 172.31.192.201 table net_192
ip rule add from 172.31.192.201 table net_192
ip route flush table net_196
ip route add default via 172.31.196.254 dev ens9f0 src 172.31.196.1 table net_196
ip rule add from 172.31.196.1 table net_196
route add default gw 172.31.192.254

#查看路由表
route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
169.254.0.0     0.0.0.0         255.255.0.0     U     1006   0        0 ens9f0
169.254.0.0     0.0.0.0         255.255.0.0     U     1008   0        0 ens4f0
169.254.0.0     0.0.0.0         255.255.0.0     U     1014   0        0 br-ex
169.254.0.0     0.0.0.0         255.255.0.0     U     1015   0        0 br-int
172.31.192.0    0.0.0.0         255.255.255.0   U     0      0        0 ens4f0
172.31.196.0    0.0.0.0         255.255.255.0   U     0      0        0 ens9f0

#在接入測試服務器上驗證連通性
ping 172.31.192.201
ping 172.31.196.1
相關文章
相關標籤/搜索