Как замедлить трафик с тк?

615
elmazzun

Я на Ubuntu 14.04; Я хотел бы изучить основы формирования трафика, я сделал простой скрипт, который должен замедлять мой HTTP (S) трафик на порты 80 и 443.

# usage: sudo ./filename.sh  #delete existing rules # wlan0 is my WiFi tc qdisc del root dev wlan0  iptables -t mangle -F  echo "Setting.." # Turn on queuing discipline, enter: tc qdisc add dev wlan0 root handle 1: htb tc class add dev wlan0 parent 1: classid 1:1 htb rate 512kbps # Define a class with limitations: tc class add dev wlan0 parent 1:1 classid 1:5 htb rate 256kbps ceil 312kbps prio 1 # Define another class with limitations: tc class add dev wlan0 parent 1:1 classid 1:6 htb rate 256kbps ceil 312kbps prio 0 # Assign it to appropriate qdisc: tc filter add dev wlan0 parent 1:0 prio 1 protocol ip handle 5 fw flowid 1:5 # Assign it to appropriate qdisc: tc filter add dev wlan0 parent 1:0 prio 0 protocol ip handle 6 fw flowid 1:6 # Port 80 is NOT defined anywhere in above class. You will use iptables mangle rule as follows: iptables -A FORWARD -t mangle -p tcp --sport 80 -j MARK --set-mark 5 iptables -A OUTPUT -t mangle -p tcp --sport 80 -j MARK --set-mark 5 # Port 443 is NOT defined anywhere in above class. You will use iptables mangle rule as follows: iptables -A FORWARD -t mangle -p tcp --sport 443 -j MARK --set-mark 6 iptables -A OUTPUT -t mangle -p tcp --sport 443 -j MARK --set-mark 6 iptables-save 

Выход

RTNETLINK answers: No such file or directory Setting.. # Generated by iptables-save v1.4.21 on Wed Sep 7 08:56:25 2016 *mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A FORWARD -p tcp -m tcp --dport 80 -j MARK --set-xmark 0x5/0xffffffff -A FORWARD -p tcp -m tcp --dport 443 -j MARK --set-xmark 0x6/0xffffffff -A OUTPUT -p tcp -m tcp --dport 80 -j MARK --set-xmark 0x5/0xffffffff -A OUTPUT -p tcp -m tcp --dport 443 -j MARK --set-xmark 0x6/0xffffffff COMMIT # Completed on Wed Sep 7 08:56:25 2016 

И sudo iptables -t mangle --list:

Chain PREROUTING (policy ACCEPT) target prot opt source destination   Chain INPUT (policy ACCEPT) target prot opt source destination   Chain FORWARD (policy ACCEPT) target prot opt source destination  MARK tcp -- anywhere anywhere tcp dpt:http MARK set 0x5 MARK tcp -- anywhere anywhere tcp dpt:https MARK set 0x6  Chain OUTPUT (policy ACCEPT) target prot opt source destination  MARK tcp -- anywhere anywhere tcp dpt:http MARK set 0x5 MARK tcp -- anywhere anywhere tcp dpt:https MARK set 0x6  Chain POSTROUTING (policy ACCEPT) target prot opt source destination  

Тем не менее, браузер кажется все еще быстрым, и тест скорости Ookla по-прежнему дает более 20 Мбит / с при загрузке и более 30 Мбит / с при загрузке.

Я делаю что-то не так или этого сценария недостаточно, чтобы замедлить соединение?

2

1 ответ на вопрос

0
Warren Downs

Я не какой-либо эксперт в этом, но у меня был лучший успех cbq (см. Ниже). Эта версия замедляет все, но я бы предпочел замедлить длительную загрузку с сохранением быстрого интерактивного просмотра. Я знаю, что могу сделать это с прокси-сервером, но я бы хотел найти способ сделать это на этом уровне.

rate=64kbps # 64kbps (512 kbit/sec) = 450 Mb/2 hrs, for each IP address irate=192kbps # 192kbps allows 490 Gb in 31 days, for the whole interface, max 3 simultaneous downloaders  iface=eth0 # LAN address (could be WiFi) ranges="192.168.201.128/25" # 192.168.1.128/255.255.255.128, only slow down DHCP dynamic addresses alg=cbq # cbq or htb  echo "Throttling hotel network..."  # Clear existing tc qdisc del dev $iface root 2>&1 | grep -v "No such"  # Limit interface rate tc qdisc add dev $iface handle 1: root $alg avpkt 1000 bandwidth $irate tc class add dev $iface parent 1: classid 1:1 $alg rate $rate allot 1500 prio 5 bounded isolated # Limit rate of each IP address for range in $ranges; do echo "$range" tc filter add dev $iface parent 1: protocol ip prio 16 u32 match ip dst $range flowid 1:1 tc filter add dev $iface parent 1: protocol ip prio 16 u32 match ip src $range flowid 1:1 done 
Не могли бы вы немного объяснить, что делает этот код и как вы думаете, он решит исходный вопрос? Пожалуйста, посмотрите [ответ] и возьмите наш [тур]. Burgi 7 лет назад 2

Похожие вопросы