Tc

傳入速率限制

  • October 16, 2017

我有一台帶有兩個介面的 ubuntu 機器。eth1 是 NAT 介面,eth2 是 WAN 介面。我有一個 4 mbps 的網際網路連接。我想將 eth1 NAT 網路的速度限制為 2 mbps。所以我使用這個 tc 規則:

tc qdisc add dev eth1 root tbf rate 2mbit burst 10kb latency 70ms peakrate 2.4mbit minburst 1540

現在,如果我檢查超出 eth1 的頻寬,它被限制為 250 KBps,這很好。但是 eth2 的頻寬遠不止這些:它將在 300 KBps 到 400 KBps 之間。如果我檢查 tc 規則的狀態,它會顯示大量丟包。如何將 eth2 的傳入頻寬限制為 2 mb,如何防止封包遺失?

我嘗試了這個答案中給出的解決方案。該行tc qdisc add dev eth2 ingress給了我一個file exists error. 答案中的第二種方法顯示了我在這裡提到的相同行為:更多數據(超過 2mbit)通過 eth2 進入。

編輯 1: 我可以使用哪些 iptables 和 tc 規則來減慢 SYN、ACK、FIN 數據包的速度,以便讓 ISP 路由器知道我本地網路上的擁塞。

除非我誤解了您的目標,否則您無法真正限制從您的 ISP 進入您的網路的數據包速率,除非您與您的 ISP 協調某種形式的 QoS 以調整其路由器的流量。這通常需要企業級連接和資金。您會看到丟包,因為這是塑造流量的唯一方法 - 您將其丟在地板上。因此,您的 TC 規則按設計工作,但您無法控制發送您的 WAN 介面的流量級別,因為發送者試圖盡可能快地發送它。

現在,您可以通過策略性地丟棄數據包或弄亂 ACK 數據包來調整傳入的 TCP 流量,以使發送者認為您的網路比實際情況更擁擠。但這對於進入您的網路的非 TCP 流量並沒有真正的幫助。

引用自:https://serverfault.com/questions/251644