我的服务器有多个 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