做網(wǎng)站搭建環(huán)境游戲推廣員一個月能賺多少
首先糾正某一篇博客,TC并不是只管發(fā)包不管收包,之前我也很納悶 知道最后看到了14年前一位大佬的帖子。是ingress!
?這里有個非常重要的點就是ingress,如果父類不是他的話是完不成限制源IP的,這個關(guān)鍵詞表明你正在添加一個入口隊列規(guī)則。與傳統(tǒng)的egress(數(shù)據(jù)包離開網(wǎng)絡(luò)接口時)規(guī)則不同,ingress規(guī)則是在數(shù)據(jù)包進入網(wǎng)絡(luò)接口之前應(yīng)用的。這意味著它可以過濾或修改入站流量,即便這些流量不是發(fā)送到本地主機的。這對于實現(xiàn)防火墻規(guī)則、流量監(jiān)控或者服務(wù)質(zhì)量(QoS)策略非常有用,尤其是在你希望在網(wǎng)絡(luò)層對數(shù)據(jù)包進行操作時。但是,網(wǎng)上的教學(xué)很少有關(guān)于ingress的講解以及使用,樓主當(dāng)時也很疑惑為什么限制不住源IP而只能限制住目標(biāo)IP。
TC (Traffic Control)?是Linux內(nèi)核中提供的一個用于控制和管理網(wǎng)絡(luò)流量的強大工具,它允許用戶實現(xiàn)QoS(Quality of Service)策略,包括帶寬限制、優(yōu)先級控制、延遲保證等。TC基于內(nèi)核的隊列 discipline (qdisc) 和流量類別(class) 體系結(jié)構(gòu),允許對進入或離開網(wǎng)絡(luò)接口的數(shù)據(jù)流進行復(fù)雜的整形和過濾。
輸入格式和基本使用流程:
一般來說,TC命令的基本格式如下:
Bash
1tc [ OPTIONS ] OBJECT ACTION [ FILTER ]
OPTIONS
: 可選參數(shù),比如?-s
?顯示統(tǒng)計數(shù)據(jù),-d
?刪除對象等。OBJECT
: 操作對象,可以是?qdisc
(隊列規(guī)則)、class
(流量類別)或?filter
(過濾器)。ACTION
: 針對對象的操作,如?add
(添加)、change
(更改)、replace
(替換)、delete
(刪除)等。FILTER
: 對象的具體參數(shù),如接口名稱(dev eth0
)、父級分類ID(parent ...
)、qdisc類型(htb
、pfifo_fast
等)、速率限制(rate ...
)等。
限制 IP 示例:
1. 設(shè)置根qdisc (隊列規(guī)則)
首先,我們需要在接口上設(shè)置一個隊列規(guī)則作為流量控制的起點。假設(shè)我們要在ens192接口上使用HTB(Hierarchical Token Bucket)算法:
Bash
tc qdisc add dev ens192 root handle 1: htb default 20
這條命令將在ens192接口上添加一個根級別的HTB隊列,分配給它的handle是1:,default 20
意味著所有未經(jīng)分類的流量將被送到handle為20的類,這里的default相當(dāng)于switch里面的default,就是說網(wǎng)口默認收到的數(shù)據(jù)毀到handle為20的子類去處理,大家看到這可能會疑惑為什么會有默認,這是因為下方的過濾器,過濾器是為了更加細膩的去處理網(wǎng)口數(shù)據(jù)。
生活舉例:
例如我現(xiàn)在收到了三顆糖,一個甜的,一個咸的,一個辣的,如果我下面沒人要我默認都給了甲,但是如果下面設(shè)好了過濾器,也就是規(guī)則,比如說乙想要辣的,我就會把辣的給乙,不再給甲了。
2. 創(chuàng)建子類進行帶寬限制
接下來,創(chuàng)建一個子類并分配一定速率的帶寬:
Bash
tc class add dev ens192 parent 1:0 classid 1:20 htb rate 500kbps ceil 1mbps
這條命令創(chuàng)建了一個新的類,其父級是上面創(chuàng)建的根類(handle為1:),新類的handle為1:20,這里同時也對應(yīng)了上方基類的default的20,使用HTB算法,基礎(chǔ)速率(rate)為500kbps,最高上限(ceil)為1mbps。
3. 創(chuàng)建過濾器以識別特定流量
最后,創(chuàng)建一個過濾器,以便將特定流量路由到上面創(chuàng)建的帶寬受限的子類:
Bash
tc qdisc add dev "$intf" handle ffff: ingresstc filter add dev "$intf" protocol ip parent 1:0 prio 0 u32 match ip dst 172.16.0.135 flowid 1:20# "$intf" 代表網(wǎng)口 類似于ens33這種
這條命令創(chuàng)建了一個IP協(xié)議的過濾器,將目標(biāo)地址為ip子網(wǎng)的流量引導(dǎo)至類ID為1:20的流量類別,因此這些流量將受到500kbps的帶寬限制。
限制 端口?示例:
?下面的兩步操作都跟限制ip相同,主要是第三步過濾器的不同。
1. 設(shè)置根qdisc (隊列規(guī)則)
首先,我們需要在接口上設(shè)置一個隊列規(guī)則作為流量控制的起點。假設(shè)我們要在ens192接口上使用HTB(Hierarchical Token Bucket)算法:
Bash
tc qdisc add dev ens192 root handle 1: htb default 20
這條命令將在ens192接口上添加一個根級別的HTB隊列,分配給它的handle是1:,default 20
意味著所有未經(jīng)分類的流量將被送到handle為20的類,這里的default相當(dāng)于switch里面的default,就是說網(wǎng)口默認收到的數(shù)據(jù)毀到handle為20的子類去處理,大家看到這可能會疑惑為什么會有默認,這是因為下方的過濾器,過濾器是為了更加細膩的去處理網(wǎng)口數(shù)據(jù)。
2. 創(chuàng)建子類進行帶寬限制
接下來,創(chuàng)建一個子類并分配一定速率的帶寬:
Bash
tc class add dev ens192 parent 1:0 classid 1:20 htb rate 500kbps ceil 1mbps
這條命令創(chuàng)建了一個新的類,其父級是上面創(chuàng)建的根類(handle為1:),新類的handle為1:20,這里同時也對應(yīng)了上方基類的default的20,使用HTB算法,基礎(chǔ)速率(rate)為500kbps,最高上限(ceil)為1mbps。
?3. 創(chuàng)建端口過濾器
Bash
tc filter add dev ens192 parent 1:0 protocol ip handle 20 fw flowid 1:20
tc filter add dev ens192 parent 1:0 protocol ip u32 match ip sport 2049 0xffff flowid 1:20
這里第一步是將ipv4類型的接口都歸于20的子類去處理,這一步也是為了添加容錯,主要是第二步,u32是一種過濾器類型,但它提供了具體的匹配條件——match ip sport 2049 0xffff
,這意味著只有源端口號(sport)等于2049的流量(這里范圍是精確匹配,0xffff是因為u32匹配方式需要指定掩碼長度)才會被這個過濾器捕獲,并將其流量導(dǎo)向類ID為1:20
的類去處理這個數(shù)據(jù)。