Tôi có một cây cầu 4 cổng:
root@Linux-Switch:~# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000024cd2cb0 no eth0
eth1
eth2
eth3
Mục tiêu của tôi là giới hạn tốc độ tải lên của giao diện eth2. (eth0 là giao diện đường lên tới công tắc ngược dòng). Tôi đã cố gắng làm điều này thông qua tc và iptables.
# tried in both the filter table and mangle table
iptables -A FORWARD -t mangle -m physdev --physdev-in eth2 -j MARK --set-mark 5
tc qdisc add dev eth0 root handle 1:0 htb default 2
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 1mbit ceil 1mbit
tc class add dev eth0 parent 1:0 classid 1:2 htb rate 5mbit ceil 5mbit
tc filter add dev eth0 parent 1:0 handle 5 fw flowid 1:1
Tôi có thể thấy rằng iptables
quy tắc phù hợp-
root@Linux-Switch:~# iptables -vL -t mangle
...
Chain FORWARD (policy ACCEPT 107K packets, 96M bytes)
pkts bytes target prot opt in out source destination
38269 11M MARK all -- any any anywhere anywhere PHYSDEV match --physdev-in eth2 MARK set 0x5
...
root@Linux-Switch:~#
Nhưng cấu hình tc không đọc dấu fw; tất cả lưu lượng truy cập trong cổng eth2 đang bị giới hạn ở mặc định 5Mb, không phải là 1Mb tôi đang cố gắng định cấu hình.
root@Linux-Switch:~# tc -s class show dev eth0
class htb 1:1 root prio 0 rate 1000Kbit ceil 1000Kbit burst 100Kb cburst 100Kb
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 200000 ctokens: 200000
class htb 1:2 root prio 0 rate 5000Kbit ceil 5000Kbit burst 100Kb cburst 100Kb
Sent 11465766 bytes 39161 pkt (dropped 0, overlimits 0 requeues 0)
rate 6744bit 3pps backlog 0b 0p requeues 0
lended: 39161 borrowed: 0 giants: 0
tokens: 2454400 ctokens: 2454400
root@Linux-Switch:~#
Tôi đang làm gì sai?
br0
thay thế? Đồng thời chỉ định rõ ràng bộ lọc là 0x5 thay vì chỉ 5 tại dòng lệnh (cho cả tc và iptables).