[tc] Ograniczenie przepustowości dla danego ip

0

Witam.

Od jakiegoś czasu usiłuję ograniczyć przepustowość dla danego IP do 100kbit/s i nie więcej. Jak to zrobić?
Serwer posiada jedną kartę sieciową(eth0) do której podpięci są klienci oraz router poprzez switcha.
Bramą dla klientów jest serwer(ip_forward=1), a dla serwera router.

1.
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: htb default 2
tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbit
iptables -t mangle -A OUTPUT -d 192.168.0.140 -j CLASSIFY --set-class 1:1

2.
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1:  classid 1:1  htb rate 3mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100kbit ceil 1mbit prio 4
iptables -t mangle -A OUTPUT -d 192.168.0.140 -j CLASSIFY --set-class 1:10

3.
tc qdisc del dev eth0 root
iptables -t mangle -F
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1:  classid 1:1  htb rate 3mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100kbit ceil 512kbit
iptables -t mangle -A POSTROUTING -d 192.168.0.140 -j MARK --set-mark 10

4.
tc qdisc del dev eth0 root
iptables -t mangle -F
tc qdisc add dev eth0 handle  1:0  root htb default 13
tc class add dev eth0 classid 1:1  root htb rate 4mbit ceil 4mbit
tc class add dev eth0 classid 1:10 parent 1:1 htb rate 100kbit ceil 4mbit
tc qdisc add dev eth0 handle 10:0 parent 1:10 sfq perturb 5
tc filter add dev eth0 pref 1 protocol ip handle 10 fw flowid 1:10
iptables -t mangle -A POSTROUTING -d 192.168.0.140 -j MARK --set-mark 10

Powyżej przepustowości mijają się z założeniami, ale powinny dawać efekt którego nie widzę. Na testspeedzie przepustowość jest taka sama jaka była. Jak skonfigurować serwer, aby to działało?

0
tc qdisc del dev eth1 root
tc qdisc add dev eth1 root handle 1:0 htb
tc class add dev eth1 parent 1:0 classid 1:1 htb rate 100Mbit ceil 100Mbit
tc class add dev eth1 parent 1:1 classid 1:2 htb rate 90Mbit ceil 90Mbit 
tc class add dev eth1 parent 1:1 classid 1:3 htb rate 256kBit ceil 256kBit
tc class add dev eth1 parent 1:1 classid 1:4 htb rate 5MBit ceil 5MBit
tc class add dev eth1 parent 1:1 classid 1:5 htb rate 1MBit ceil 1MBit
tc class add dev eth1 parent 1:1 classid 1:6 htb rate 2MBit ceil 2MBit
tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.119/32 flowid 1:3 
tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.215/32 flowid 1:3 
tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.186/32 flowid 1:4
 

takie coś działa u mnie, tylko ma jedną wadę: ogranicza cały ruch do danego ipka z routera, więc jak masz na routerze jakieś usługi, to je też ograniczysz.

0

Witam,

Konfiguracja serwera:

# ifconfig eth0 192.168.0.2 up
# route add default gw 192.168.0.1
# echo "1" > /proc/sys/net/ipv4/ip_forward
# tc qdisc del dev eth0 root
# tc qdisc add dev eth0 root handle 1:0 htb
# tc class add dev eth0 parent 1:0 classid 1:1 htb rate 100Mbit ceil 100Mbit
# tc class add dev eth0 parent 1:1 classid 1:2 htb rate 90Mbit ceil 90Mbit 
# tc class add dev eth0 parent 1:1 classid 1:3 htb rate 256kBit ceil 256kBit
# tc class add dev eth0 parent 1:1 classid 1:4 htb rate 5MBit ceil 5MBit
# tc class add dev eth0 parent 1:1 classid 1:5 htb rate 1MBit ceil 1MBit
# tc class add dev eth0 parent 1:1 classid 1:6 htb rate 2MBit ceil 2MBit
# tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 192.168.0.10/32 flowid 1:3

Klient:

# ifconfig eth0 192.168.0.10 up
# route add default gw 192.168.0.2

Prędkość jaka testspeed pokazuje mi u klienta to 6Mbit/s, a ma być 256kbit/s. Co jest nie tak?

0

Masz oba gatewaye w tej samej podsieci - więc forwarding nie zachodzi tak jakbyś myślał! A to powoduje, że:

A - 192.168.0.1 - gateway dla całej sieci
B - 192.168.0.2 - gateway lokalny z tc
C - 192.168.0.10 - klient

C -> wysyła zapytanie GET do wp.pl (212.77.100.101) 
	-> B nie zna takiego ip jak 212.77.100.101 wiec posyła to dalej 
	-> A tez, wiec wysyła to do swojego gatyewaya
	-> ... zapytanie dociera do serwera, zostaje obsłużone i wraca do
	-> A który z tabeli forward swojej odczytuje, że zapytanie do 212.77.100.101 było z C
	-> A wysyła więc do C pakiety **z pominięciem B**
0

Okej rozumiem;]
Przerobiłem trochę konfiguracje sieci.

# ifconfig eth0 192.168.0.2 up
# ifconfig eth0:0 192.168.1.2 up
# route add default gw 192.168.0.1
# echo "1" > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -APOSTROUTING -j SNAT -s 192.168.1.0/24 --to 192.168.0.5
# tc qdisc del dev eth0 root
# tc qdisc add dev eth0 root handle 1:0 htb
# tc class add dev eth0 parent 1:0 classid 1:1 htb rate 100Mbit ceil 100Mbit
# tc class add dev eth0 parent 1:1 classid 1:2 htb rate 90Mbit ceil 90Mbit 
# tc class add dev eth0 parent 1:1 classid 1:3 htb rate 256kBit ceil 256kBit
# tc class add dev eth0 parent 1:1 classid 1:4 htb rate 5MBit ceil 5MBit
# tc class add dev eth0 parent 1:1 classid 1:5 htb rate 1MBit ceil 1MBit
# tc class add dev eth0 parent 1:1 classid 1:6 htb rate 2MBit ceil 2MBit
# tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 192.168.1.10/32 flowid 1:3

Klient

# ifconfig eth0 192.168.1.10 up
# route add default gw 192.168.1.2
 

Download ograniczony jest do 256kBit/s - działa ;) Zostało jeszcze ograniczyć upload do 128kBit/s, jak to zrobić?

1 użytkowników online, w tym zalogowanych: 0, gości: 1