溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

iproute2的策略路由與流量控制筆記是怎么樣的

發(fā)布時(shí)間:2021-11-05 10:19:20 來源:億速云 閱讀:228 作者:柒染 欄目:建站服務(wù)器

iproute2的策略路由與流量控制筆記是怎么樣的,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

iproute2 策略路由與流量控制筆記

-- 前提知識(shí): --
如果需要使用策略路由需確認(rèn)編譯內(nèi)核時(shí)配置中帶有IP:advanced route和IP:policy routing

iproute匹配條件:from源地址,to目的地址,Tos域,Dev物理接口,Fwmark防火墻標(biāo)記  這些做為匹配條件

iproute動(dòng)作:可以以table指明所用的表,nat網(wǎng)絡(luò)地址轉(zhuǎn)換,prohibit丟棄并發(fā)送icmp信息,reject單純丟棄,unreachable丟棄并發(fā)送icmp信息.

ip rule首先程序從優(yōu)先級(jí)高到低掃描所有的規(guī)則,如果規(guī)則匹配,處理該規(guī)則的動(dòng)作。如果是普通的路由尋址或者是nat地址轉(zhuǎn)換的換,首先從規(guī)則得到路由表,然后對(duì)該路由表進(jìn)行操作。這樣RPDB(routing policy database)終于清晰的顯現(xiàn)出來了。
 
iproute相關(guān)的內(nèi)核編譯選項(xiàng):CONFIG_IP_ADVANCED_ROUTER=y CONFIG_IP_MULTIPLE_TABLES=y CONFIG_IP_ROUTE_FWMARK=y

/etc/iproute2/rt_tables 保存規(guī)則的名字與數(shù)字的關(guān)聯(lián)

iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 允許調(diào)整tcp syn包里的MSS域,用于控制連接包的最大長度。一些防火墻或主機(jī)會(huì)很不適當(dāng)?shù)倪^濾掉type 3、code 4(需要分片)的icmp包。目前發(fā)行的linux的內(nèi)核從2.4.7開始已經(jīng)包含了這個(gè)補(bǔ)丁。

IMQ 中介隊(duì)列設(shè)備
被打了特定標(biāo)記的數(shù)據(jù)包在netfilter的NF_IP_PRE_ROUTING和NF_IP_POST_ROUTING兩個(gè)鉤子函數(shù)處被攔截,并被送到一個(gè)隊(duì)列規(guī)定中,該隊(duì)列規(guī)定附加到一個(gè)IMQ設(shè)備上。可以實(shí)現(xiàn)對(duì)入口流量整形,而且可以把網(wǎng)卡當(dāng)成一個(gè)個(gè)的類來看待而進(jìn)行全局整形設(shè)置。

--應(yīng)用案例1 --

通過iptables與iproute2協(xié)同實(shí)現(xiàn)根據(jù) 應(yīng)用 的策略路由
實(shí)現(xiàn)要點(diǎn): iptables根據(jù)端口將服務(wù)類的數(shù)據(jù)包打上標(biāo)示,iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 100 (用這些標(biāo)記我們可以做帶寬限制和基于請(qǐng)求的分類)
根據(jù)情況做nat iptables -t nat -A POSTROUTING -o eth3 -j MASQUERADE
然后設(shè)置路由策略ip rule add fwmark 100 table 100 

-- 應(yīng)用案例2 --

普通雙ISP的設(shè)置 外網(wǎng)接口$IF1 IF1接口地址$IP1 ISP1網(wǎng)關(guān)地址$P1 ISP1的網(wǎng)絡(luò)地址P1_NET
#分別指定兩條默認(rèn)網(wǎng)關(guān)負(fù)責(zé)單獨(dú)的上行流
ip route add $P1_NET dev $IF1 src $IP1 table T1 源地址為IP1且目的為ISP1網(wǎng)段從IF1接口發(fā)出(必需的,它能夠讓我們找到該子網(wǎng)內(nèi)的主機(jī)及本網(wǎng)關(guān)) 將這條路由加入表T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2 源地址為IP2且目的為ISP2網(wǎng)段從IF2接口發(fā)出((必需的,它能夠讓我們找到該子網(wǎng)內(nèi)的主機(jī)及本網(wǎng)關(guān)) 將這條路由加入表T2
ip route add default via $P2 table T2

#也加入到main路由表
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
  main缺省走ISP1
ip route add default via $P1

#設(shè)置路由規(guī)則
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
#設(shè)置負(fù)載均衡
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \
nexthop via $P2 dev $IF2 weight 1

均衡是基于路由進(jìn)行的,而路由是經(jīng)過緩沖的,所以這樣的均衡并不是100%精確.

-- 應(yīng)用案例3 --
 TC帶寬管理的主要實(shí)現(xiàn)步驟 主要是在輸出端口處建立一個(gè)隊(duì)列進(jìn)行流量控制,控制的方式是基于路由,亦即基于目的IP地址或目的子網(wǎng)的網(wǎng)絡(luò)號(hào)的流量控制。
1 編譯內(nèi)核時(shí)注意事項(xiàng)
以下實(shí)例:發(fā)往A主機(jī)8M帶寬 發(fā)往B主機(jī)1M帶寬 發(fā)往C主機(jī)1M帶寬
2  1) 針對(duì)網(wǎng)絡(luò)物理設(shè)備(如以太網(wǎng)卡eth0)綁定一個(gè)CBQ隊(duì)列;
 tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit avpkt 1000 cell 8 mpu 64
  2) 在該隊(duì)列上建立分類;
 tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate 10Mbit maxburst 20 allot \ 1514 prio 8 avpkt 1000 cell 8 weight 1Mbit
 tc class add dev eth0 parent 1:1 classid 1:2 cbq bandwidth 10Mbit rate 8Mbit maxburst 20 allot \ 1514 prio 2 avpkt 1000 cell 8 weight 800Kbit split 1:0 bounded
 tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 10Mbit rate 1Mbit maxburst 20 allot \ 1514 prio 1 avpkt 1000 cell 8 weight 100Kbit split 1:0
 tc class add dev eth0 parent 1:1 classid 1:4 cbq bandwidth 10Mbit rate 1Mbit maxburst 20 allot \ 1514 prio 6 avpkt 1000 cell 8 weight 100Kbit split 1:0
  3) 為每一分類建立一個(gè)基于路由的過濾器;
tc filter add dev eth0 parent 1:0 protocol ip prio 100 route
tc filter add dev eth0 parent 1:0 protocol ip prio 100 route to 2 flowid 1:2
tc filter add dev eth0 parent 1:0 protocol ip prio 100 route to 3 flowid 1:3
tc filter add dev eth0 parent 1:0 protocol ip prio 100 route to 4 flowid 1:4
  4) 最后與過濾器相配合,建立特定的路由表。
ip route add 192.168.1.24 dev eth0 via 192.168.1.66 realm 2
ip route add 192.168.1.30 dev eth0 via 192.168.1.66 realm 3
ip route add 192.168.1.0/24 dev eth0 via 192.168.1.66 realm 4
3 應(yīng)用,監(jiān)控

--關(guān)于負(fù)載平衡--
關(guān)于負(fù)載平衡 CONFIG_IP_ROUTE_MULTIPATH內(nèi)核選項(xiàng)將把所有這些路徑(缺省路由)等同看待,然后再根據(jù)/usr/src/linux /Documentation/Configure.help來選擇其特定的方式。Ip route命令的equalize選項(xiàng),會(huì)讓Linux內(nèi)核基于IP地址平衡外部連接。對(duì)于一個(gè)特定的IP地址,內(nèi)核會(huì)選擇一個(gè)接口用于傳輸流出的數(shù)據(jù)包,然后內(nèi)核會(huì)為該IP地址在路由緩沖中建一個(gè)記錄。這樣,其它到達(dá)的有相同IP地址的數(shù)據(jù)包就會(huì)使用同一個(gè)接口,直到該記錄從路由緩沖中刪除。我們可以使用ip route list cache命令來查看路由緩沖。


通過DNS循環(huán)來實(shí)現(xiàn)的服務(wù)的負(fù)載平衡
各種不同的服務(wù)(DNS、SMTP、HTTP、LDAP、SSH等) 可以通過DNS循環(huán)來實(shí)現(xiàn)。
循環(huán)復(fù)用DNS還有太多的限制(DNS緩存,忽略TTL值,修改后的刷新時(shí)間,不能意識(shí)到服務(wù)器的可用性),只能算是一種勉強(qiáng)可接受的負(fù)載平衡方案

--相關(guān)命令 --
ip link list 顯示鏈路
ip address show 顯示IP地址 對(duì)于PPP0接口還會(huì)告訴我們鏈路另一端的地址
ip route show 輸出結(jié)果之一default via x.x.x.x dev x

ip neigh show 查看緩存的ARP表
ip neigh delete x.x.x.x dev x

--TC流量控制:--
我們只能對(duì)發(fā)送數(shù)據(jù)進(jìn)行整形
默認(rèn)整形方式是Pfifo_fast隊(duì)列規(guī)定。特點(diǎn)為先進(jìn)先出。只看數(shù)據(jù)包的TOS字節(jié)節(jié)來判斷應(yīng)該放到哪個(gè)頻道(優(yōu)先).一般的應(yīng)用程序會(huì)如何設(shè)置他們的TOS值。
HTB分層的令牌桶
HTB 可以保障提供給每個(gè)類帶寬的數(shù)量是它所需求的最小需求或者等于分配給它的數(shù)量.當(dāng)一個(gè)類需要的帶寬少于分配的帶寬時(shí),剩余的帶寬被分配給其他需要服務(wù)的類.

SFQ隨機(jī)公平隊(duì)列
簡單輪轉(zhuǎn)。使用一個(gè)散列算法,把所有的會(huì)話映射到有限的幾個(gè)隊(duì)列中去。(只有當(dāng)你的出口網(wǎng)卡確實(shí)已經(jīng)擠滿了的時(shí)候,SFQ才會(huì)起作用)
 
(如果你并不希望進(jìn)行流量整形,只是想看看你的網(wǎng)卡是否有比較高的負(fù)載而需要使用隊(duì)列,可使用pfifo隊(duì)列。它缺乏內(nèi)部頻道但是可以統(tǒng)計(jì)backlog)

--HTB應(yīng)用案例4--
1)
tc qdisc add dev eth0 root handle 1: htb default 12
2)
tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 30kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 10kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 60kbps ceil 100kbps
3)為隊(duì)列規(guī)定分配子類, 如果沒有指定缺省是pfifo
tc qdisc add dev eth0 parent 1:10 handle 20: pfifo limit 5
tc qdisc add dev eth0 parent 1:11 handle 30: pfifo limit 5
tc qdisc add dev eth0 parent 1:12 handle 40: sfq perturb 10
1:12隊(duì)列的類不定義時(shí),即所有不匹配其它類規(guī)則的數(shù)據(jù)包。

--流量分析與故障診斷--
tc -s -d qdisc show dev eth0 隊(duì)列狀態(tài)
tc -s class show dev eth0 類狀態(tài)
tc filter show dev eth0 過濾器狀態(tài)

關(guān)于iproute2的策略路由與流量控制筆記是怎么樣的問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI