Назад | Перейти на главную страницу

Почему мой скрипт формирования трафика linux дает ограниченные результаты?

Я пытаюсь ввести некоторые правила трафика для моего сквозного сервера Linux, которые улучшат качество обслуживания для следующих целей:

1) Низкий портовый трафик из коробки (веб-трафик, почта и т. Д.). 2) Низкий портовый трафик в коробке - в частности, веб-управление портами (80) и SSH (22). 3) Ставьте приоритет обмена файлами в последнюю очередь. Т.е. весь остальной трафик.

Я адаптировал сценарий оболочки для настройки некоторых основных правил с использованием tc и htb:

#!/bin/bash

UPLINK=7000
DOWNLINK=500

tc qdisc del dev eth0 root    2> /dev/null > /dev/null
tc qdisc del dev eth1 root    2> /dev/null > /dev/null

ip link set dev eth0 qlen 30 2> /dev/null > /dev/null
ip link set dev eth0 mtu 576 2> /dev/null > /dev/null

# add HTB root qdisc
tc qdisc add dev eth0 root handle 1: htb default 40
tc class add dev eth0 parent 1: classid 1:1 htb rate ${UPLINK}kbit

tc class add dev eth0 parent 1:1 classid 1:5 htb rate $[$UPLINK]kbit ceil ${UPLINK}kbit quantum 1 prio 0
tc class add dev eth0 parent 1:1 classid 1:10 htb rate $[(($UPLINK/8)*3)]kbit ceil ${UPLINK}kbit quantum 1 prio 1
tc class add dev eth0 parent 1:1 classid 1:20 htb rate $[(($UPLINK/8)*3)]kbit ceil ${UPLINK}kbit quantum 1 prio 2
tc class add dev eth0 parent 1:1 classid 1:30 htb rate $[(($UPLINK/8)*1)]kbit ceil ${UPLINK}kbit quantum 1 prio 3
tc class add dev eth0 parent 1:1 classid 1:40 htb rate $[(($UPLINK/8)*1)]kbit ceil ${UPLINK}kbit quantum 1 prio 4

# No SFQ because we should have almost no queue here. Better dropping packets than delay them in VoIP
tc qdisc add dev eth0 parent 1:20 handle 5: pfifo limit 5
tc qdisc add dev eth0 parent 1:10 handle 10: pfifo limit 30
tc qdisc add dev eth0 parent 1:20 handle 20: pfifo limit 30
tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10 limit 200
tc qdisc add dev eth0 parent 1:40 handle 40: sfq perturb 10 limit 300

iptables -t mangle -F QOSSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X QOSSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o eth0 -j QOSSHAPER-OUT 2> /dev/null > /dev/null

########################################################################################################

iptables -t mangle -N QOSSHAPER-OUT
iptables -t mangle -I POSTROUTING -o eth0 -j QOSSHAPER-OUT

# ensure min delay by TOS field
iptables -t mangle -A QOSSHAPER-OUT -m tos --tos 0x10 -j CLASSIFY --set-class 1:5

iptables -t mangle -A QOSSHAPER-OUT -p icmp -j CLASSIFY --set-class 1:20
iptables -t mangle -A QOSSHAPER-OUT -p udp --dport domain -j CLASSIFY --set-class 1:20
iptables -t mangle -A QOSSHAPER-OUT -p tcp --tcp-flags SYN,RST,ACK SYN,FIN -j CLASSIFY --set-class 1:20
iptables -t mangle -A QOSSHAPER-OUT -p tcp -m length --length 60 -j CLASSIFY --set-class 1:30   #Small packets

########################################################################################################

Затем я добавил несколько правил IPTABLES, чтобы сформировать трафик.

-A POSTROUTING -o eth0 -j QOSSHAPER-OUT 
-A QOSSHAPER-OUT -p tcp -m tcp --sport 80 -j CLASSIFY --set-class 0001:0020 
-A QOSSHAPER-OUT -p tcp -m tcp --sport 22 -j CLASSIFY --set-class 0001:0020 
-A QOSSHAPER-OUT -p tcp -m tcp --sport 7080 -j CLASSIFY --set-class 0001:0020 
-A QOSSHAPER-OUT -p tcp -m tcp --sport 9080 -j CLASSIFY --set-class 0001:0020 
-A QOSSHAPER-OUT -p tcp -m tcp --sport 1:1024 -j CLASSIFY --set-class 0001:0030 
-A QOSSHAPER-OUT -p tcp -m tcp --dport 1:1024 -j CLASSIFY --set-class 0001:0030 
-A QOSSHAPER-OUT -m tos --tos 0x10/0xff -j CLASSIFY --set-class 0001:0005 
-A QOSSHAPER-OUT -p icmp -j CLASSIFY --set-class 0001:0020 
-A QOSSHAPER-OUT -p udp -m udp --dport 53 -j CLASSIFY --set-class 0001:0020 
-A QOSSHAPER-OUT -p tcp -m tcp --tcp-flags SYN,RST,ACK FIN,SYN -j CLASSIFY --set-class 0001:0020 
-A QOSSHAPER-OUT -p tcp -m length --length 60 -j CLASSIFY --set-class 0001:0030 

Если вам интересно, порты 7080 и 9080 используются для проксирования.

Я надеялся, что абоненты LAN смогут иметь приоритет на 80-м порте, а пользователи-администраторы будут иметь доступ к WAN-сети на 80-м и 22-м портах, прежде всего, для входящего трафика - однако правила мало что изменили.

Любой совет или понимание приветствуются.

Проверить три вещи:

  1. Мне неизвестна топология вашей сети, но вы уверены, что хотите использовать спорт классифицировать трафик в iptables? Может ты намеревался порт.

  2. Используйте модуль ведения журнала iptables. У них есть хорошие примеры на странице руководства. Используя модуль регистрации, вы можете легко определить, классифицируются ли пакеты так, как вы их задумали, или нет.

  3. Использовать iperf инструмент, чтобы подчеркнуть и проверить эффективность вашего нового роутера!

Прежде всего, я прошу прощения за то, что не ответил на ваш вопрос напрямую, но я узнал несколько вещей из этой статьи. http://tomatousb.org/tut:using-tomato-s-qos-system может быть, вы найдете это полезным.