Мое подключение к Интернету выглядит так:
Интернет <-128kbps link-> Cisco Router (Public IP) <-LAN-> Linux Router / server (Public IP) <-LAN-> Обычные ПК (Public IP)
Маршрутизатор Cisco:
Маршрутизатор Linux
Штатные ПК (их 4):
Я включил регистрацию пакетов iptables на маршрутизаторе Linux и иногда обнаруживаю, что:
Теперь, как я могу настроить маршрутизатор Linux для формирования трафика таким образом, чтобы:
Я уже пометил (используя параметр IP-таблиц --set-xmark) каждый исходящий пакет для каждого ПК:
... И так далее.
Каждый входящий пакет также маркируется по этой схеме, начиная с 16.
Прошу прощения за этот длинный вопрос, но я отказался от настройки с помощью команды tc, слишком мало документации по формированию трафика, и я не знаю, что делать дальше.
Предполагая, что eth0 - это 100-мегабитное соединение Ethernet с маршрутизатором Cisco, оно должно быть примерно таким (не так ли?):
tc qdisc add dev eth0 root handle 1: htb default 2
# 100 mbps
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
# To LAN traffic
tc class add dev eth0 parent 1:1 classid 1:2 htb rate 99000kbit ceil 100mbit
# IN traffic
tc class add dev eth0 parent 1:1 classid 1:3 htb rate 120kbit
# OUT traffic
tc class add dev eth0 parent 1:1 classid 1:4 htb rate 120kbit
# IN “bands” (one for each PC)
tc class add dev eth0 parent 1:3 classid 1:10 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:3 classid 1:11 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:3 classid 1:12 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:3 classid 1:13 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:3 classid 1:14 htb rate 24kbit ceil 120kbit
# OUT “bands” (one for each PC)
tc class add dev eth0 parent 1:4 classid 1:15 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:4 classid 1:16 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:4 classid 1:17 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:4 classid 1:18 htb rate 24kbit ceil 120kbit
tc class add dev eth0 parent 1:4 classid 1:19 htb rate 24kbit ceil 120kbit
Получил бы мне что-то вроде этого:
+-----------------------------------------------------------+
| 100 mbits (1:1) |
+---------+------------------------+------------------------+
| 99mbits | 120 kbits In (1:3) | 120 kbits Out(1:4) |
+ (1:2) +----+----+----+----+----+----+----+----+----+----+
+---------+ PC1| PC2| PC3| PC4| PC5| PC1| PC2| PC3| PC4| PC5|
|1:10|1:11|1:12|1:13|1:14|1:15|1:16|1:17|1:18|1:19|
+----+----+----+----+----+----+----+----+----+----+
И для каждой группы:
# PC1, IN
tc qdisc add dev eth0 parent 1:10 handle 20: prio
tc qdisc add dev eth0 parent 20:1 handle 22: sfq perturb 10
tc qdisc add dev eth0 parent 20:2 handle 23: sfq perturb 10
tc qdisc add dev eth0 parent 20:3 handle 24: sfq perturb 10
# PC1, OUT
tc qdisc add dev eth0 parent 1:15 handle 21: prio
tc qdisc add dev eth0 parent 21:1 handle 25: sfq perturb 10
tc qdisc add dev eth0 parent 21:2 handle 26: sfq perturb 10
tc qdisc add dev eth0 parent 21:3 handle 27: sfq perturb 10
+--------------------++--------------------+
| PC1 IN || PC1 OUT |
+--------------------++--------------------+
| PRIO (20:0) || PRIO (21:0) |
| | | || | | |
| Prio | Prio | Prio || Prio | Prio | Prio |
| 1 | 2 | 3 || 1 | 2 | 3 |
|(20:1)|(20:2)|(20:3)||(21:1)|(21:2)|(21:3)|
+------+------+------++------+------+------+
| SFQ | SFQ | SFQ || SFQ | SFQ | SFQ |
|(22:0)|(23:0)|(24:0)||(25:0)|(26:0)|(27:0)|
+------+------+------++------+------+------+
И так далее.
Правила должны быть такими
# PC1, OUT
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 21:1
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 2 fw flowid 21:2
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 3 fw flowid 21:3
# PC1, IN
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 16 fw flowid 20:1
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 17 fw flowid 20:2
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 18 fw flowid 20:3
и так далее.
Есть предложения, комментарии и т. Д.? (У меня нет опыта в этой области)
взглянуть Вот - это довольно простое руководство по использованию механизма htb qos. По сути, вы помечаете пакеты в iptables, а затем назначаете их различным запросам в зависимости от марки.
в качестве альтернативы вы можете посмотреть на hfsc, он может работать лучше с таким медленным интернет-соединением, хотя я никогда им не пользовался.
Что касается размера пакета - я не могу представить большой пакет размером 20 КБ. даже jumbo-кадры в ethernet короче [9kB].
редактировать: Как объясняет Some Guy, LEN - это длина дефрагментированного IP-пакета, а не размер кадра на проводе.
Что это за Cisco? Как правило, формирование можно выполнять и на IOS, это может быть немного проще в настройке, чем Linux tc.