
我想為 TCP 代理網站建立一個虛擬網路接口,並讓我的瀏覽器透過慢速網路連接查看它,以便調試網站本身的效能問題。
到目前為止,我設法透過以下方式進行設定:
ip link add dummy-SLOW type dummy
ifconfig dummy-SLOW 10.54.0.10 up
tc qdisc add dev dummy-SLOW root tbf rate 120kbit latency 200ms burst 1540
進而
socat tcp-listen:443,bind=10.54.0.10,reuseaddr,fork tcp:XXX.XXX.XXX.XXX:443
我還添加了別名,/etc/hosts
以便我可以看到IP位址下的網站10.54.0.10
。
好吧,我可以透過這個設定看到該網站,沒問題,地址10.54.0.10
甚至顯示在 Chrome 開發工具中。但流量整形不起作用...我仍然看到太多位元組下載得太快。如何使流量整形發揮作用?
注意:如果有一種方法可以讓代理進行限制,那麼這也適合我。
答案1
您可以調整常規介面上的流量,而無需新增虛擬介面。
為 qdisc 分配唯一 ID
tc qdisc add dev eth0 root handle 1: htb
將類別分配給上面定義的 qdisc。這被認為是 qdisc 的子項。我使用 htb 模式,因為它本質上是 tbf 的功能更豐富的版本。
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 120kbit latency 200ms burst 1540
為該類別指派一個過濾器,並主動尋找標記為「10」的流量
tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 10 fw flowid 1:10
現在 TC 有了規則,我們現在需要將流量傳送到流量控制以進行節流。
iptables -A OUTPUT -t mangle -p tcp --dport 443 -j MARK --set-mark 10
更進一步,這樣您就不會限制每個進行 443 流量的人,讓我們編寫一條僅影響您的流量的規則。
iptables -A OUTPUT -t mangle -p tcp -s <client IP > --dport 443 -j MARK --set-mark 10
透過標記離開伺服器的流量,我們確保所有可能的 Linux 網路路由(技術上 %90)都已完成,現在我們準備標記與規則相符的流量。來源是筆記型電腦或另一台伺服器,其中測試進入連接埠 443,將在封包標頭中標記為 10。一旦發現這一點,核心將獲取資料包並對其應用 TC 規則。
您可以透過以下方式查看所有 mangle 規則iptables -t mangle -nvL