Traffic-Shaping

在 debian jessie 上使用流量整形和 tc 來限制一個虛擬 IP

  • December 29, 2018

我的伺服器有多個 IP,其中只有一個映射到入站物理介面 eth0。其他 IP 通過 iptables/DNAT 以虛擬方式處理。

我想將我的一個名為“service1”(內部為 192.168.123.2)的 lxc 容器的流量限制為最大 50MBit/s。

從外部我通過 xxx90 到達我的主伺服器“管理程序”,但防火牆將 xxx89 所需的所有埠路由到“service1”(我只使用埠 10000 和 5666)

tc對於到達 IP xxx89 上的 service1 contianer 的流量,如何將流量調整為最大 50Mbit/s?

我會從

DEV=eth0
IPT=/sbin/iptables
TC=/sbin/tc
$IPT -t mangle -F
# clear old rules:
$TC qdisc del dev $DEV ingress > /dev/null 2>&1
$TC qdisc del dev $DEV root > /dev/null 2>&1
$TC qdisc del dev lo root > /dev/null 2>&1
# initialize shaping and set default to channel 12: 
$TC qdisc add dev $DEV root handle 1:0 htb default 12 r2q 6
# set max limit to 1GBit
$TC class add dev $DEV parent 1:0 classid 1:1 htb rate 1Gbit ceil 1Gbit

這些是我的 iptables 規則(iptables-save):

-A PREROUTING -d x.x.x.89/32 -i eth0 -p tcp -m tcp --dport 5666 -j DNAT --to-destination 192.168.123.2:5666
-A PREROUTING -d x.x.x.89/32 -i eth0 -p udp -m udp --dport 5666 -j DNAT --to-destination 192.168.123.2:5666
-A PREROUTING -d x.x.x.89/32 -i eth0 -p tcp -m tcp --dport 10000 -j DNAT --to-destination 192.168.123.2:10000
-A PREROUTING -d x.x.x.89/32 -i eth0 -p udp -m udp --dport 10000 -j DNAT --to-destination 192.168.123.2:10000
-A POSTROUTING -s 192.168.123.0/24 -o eth0 -j SNAT --to-source x.x.x.89

現在,我將如何定義規則以將流量限制為最大 50Mit,僅用於從“service1”到“service1”的這兩個埠 10000 和 5666?

首先,您應該使用tcng來生成 tc 規則:

http://linux-ip.net/gl/tcng/node10.html

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