在 Debian Jessie 上使用 tc 进行流量整形来限制只有一个虚拟 IP

在 Debian Jessie 上使用 tc 进行流量整形来限制只有一个虚拟 IP

我的服务器有多个 IP,其中只有一个映射到入站物理接口 eth0。其他 IP 通过 iptables/DNAT 以虚拟方式处理。

我想将到我的一个名为“service1”(内部为 192.168.123.2)的 lxc 容器的流量限制为最大 50MBit/s。

从外部我通过 xxx90 到达我的主要服务器“虚拟机管理程序”,但防火墙将 xxx89 所需的所有端口路由到“service1”(我只使用端口 10000 和 5666)

tc对于到达 IP xxx89 上的 service1 容器的流量,如何才能将其最大限制为 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

现在我该如何定义规则来将往返于“service1”的两个端口 10000 和 5666 的流量限制为最大 50Mit?

答案1

首先,您应该使用tcng来生成 tc 规则:

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

相关内容