Meu servidor tem vários IPs nos quais apenas um é mapeador para a interface física de entrada eth0. Outros IPs são tratados de forma virtual via iptables/DNAT.
Quero limitar o tráfego para um dos meus contêineres lxc chamado "service1" (192.168.123.2 internamente) para no máximo 50 MBit/s.
De externo, alcanço meu servidor principal "hypervisor" via xxx90, mas o Firewall roteia todas as portas necessárias para xxx89 para "service1" (eu uso apenas as portas 10000 e 5666)
Como posso moldar o tráfego com tc
um limite máximo de 50Mbit/s para o tráfego que atinge o service1 contianer no IP xxx89?
eu começaria com
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
Estas são as minhas regras do 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
Agora, como eu teria que definir regras para limitar o tráfego a no máximo 50Mit apenas para essas duas portas 10000 e 5666 de e para "service1"?
Para começar, você deve usar
tcng
para gerar as regras tc:http://linux-ip.net/gl/tcng/node10.html