Shaiper или распиливаем траффик: различия между версиями

Материал из support.qbpro.ru
imported>Vix
(Новая страница: «описываем правила для пакетов в iptables: #!/bin/bash iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 0x1 iptables -t m…»)
 
imported>Vix
Нет описания правки
 
Строка 63: Строка 63:


* [http://linuxshare.ru/docs/HOWTO/lartc-HOWTO/x2755.html использованная статья - за что спасибо отдельно]
* [http://linuxshare.ru/docs/HOWTO/lartc-HOWTO/x2755.html использованная статья - за что спасибо отдельно]
'''ДОПОЛНИТЕЛЬНО:'''
<hr>
* [https://itsecforu.ru/2018/09/07/%D0%BA%D0%B0%D0%BA-%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B8%D1%82%D1%8C-%D0%BF%D1%80%D0%BE%D0%BF%D1%83%D1%81%D0%BA%D0%BD%D1%83%D1%8E-%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%BD%D0%BE%D1%81/ Как ограничить пропускную способность сети в Linux с помощью Wondershaper]

Текущая версия от 13:18, 16 января 2023

описываем правила для пакетов в iptables:

#!/bin/bash
iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -p icmp -j RETURN 
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x5
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN
iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x6
iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN
### приоритетные пакеты по траффику - по портам
iptables -t mangle -A PREROUTING -p tcp -m multiport --sports 22,80,53,1194,5061 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -p tcp -m multiport --sports 22,80,53,1194,5061 -j RETURN
### для пакетов, с которых начинается TCP-соединение, т.е. SYN-пакетов
iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x1
iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN
### После того, как в цепочку PREROUTING, таблицы mangle, будут внесены все правила, закончим ее правилом:
iptables -t mangle -A PREROUTING -j MARK --set-mark 0x6

теперь распределяем трафик в соответствии с классами..

#!/bin/bash

## сброс правил

DEV1='ppp0'
DEV0='eth0'
DEV2='eth1'
DEV3='eth2'
DEV4='eth3'
tc q d dev $DEV0 root handle 1: htb
tc q d dev $DEV1 root handle 1: htb
tc q d dev $DEV2 root handle 1: htb
tc q d dev $DEV3 root handle 1: htb
tc q d dev $DEV4 root handle 1: htb

### присвойте переменной CEIL величину, составляющую 75% от общей пропускной способности для исходящего трафика
CEIL='5'
tc qdisc add dev ppp0 root handle 1: htb default 15
tc class add dev ppp0 parent 1: classid 1:1 htb rate ${CEIL}mbit ceil ${CEIL}mbit
tc class add dev ppp0 parent 1:1 classid 1:10 htb rate 3mbit ceil 5mbit prio 0
tc class add dev ppp0 parent 1:1 classid 1:11 htb rate 3mbit ceil ${CEIL}mbit prio 1
tc class add dev ppp0 parent 1:1 classid 1:12 htb rate 2mbit ceil ${CEIL}mbit prio 2
tc class add dev ppp0 parent 1:1 classid 1:13 htb rate 2mbit ceil ${CEIL}mbit prio 2
tc class add dev ppp0 parent 1:1 classid 1:14 htb rate 1mbit ceil ${CEIL}mbit prio 3
tc class add dev ppp0 parent 1:1 classid 1:15 htb rate 1mbit ceil ${CEIL}mbit prio 3
tc qdisc add dev ppp0 parent 1:12 handle 120: sfq perturb 10
tc qdisc add dev ppp0 parent 1:13 handle 130: sfq perturb 10
tc qdisc add dev ppp0 parent 1:14 handle 140: sfq perturb 10
tc qdisc add dev ppp0 parent 1:15 handle 150: sfq perturb 10
### фильтры, которые будут выполнять классификацию пакетов, основываясь на метках iptables
tc filter add dev ppp0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10
tc filter add dev ppp0 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:11
tc filter add dev ppp0 parent 1:0 protocol ip prio 3 handle 3 fw classid 1:12
tc filter add dev ppp0 parent 1:0 protocol ip prio 4 handle 4 fw classid 1:13
tc filter add dev ppp0 parent 1:0 protocol ip prio 5 handle 5 fw classid 1:14
tc filter add dev ppp0 parent 1:0 protocol ip prio 6 handle 6 fw classid 1:15 
###

.. все распределение формируется на внешнем интерфейсе.. посмотреть можно командой:

tc -s class show dev ppp0

ДОПОЛНИТЕЛЬНО: