ΠΠ½Π° Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ Π·Π°ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»Π° ΡΠ΅Π±Ρ ΠΏΡΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΠ΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² ΡΡΡΠ΄Π΅Π½ΡΠ΅ΡΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΆΠΈΡΠΈΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄Π°ΠΌΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ. Π¦Π΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° WRR ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°Π±ΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π², Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΠ΅ΡΠ΅ΠΉ.
ΠΠ»Π°Π²Π° 15. Π Π΅ΡΠ΅Π±Π½ΠΈΠΊ.
Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²ΡΡ Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ Π² ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠ½Π° Π½Π΅ Π΄Π°Π΅Ρ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΠ΅ΠΏΡΠΎΠ² Π½Π° Π²ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΆΠΈΠ·Π½ΠΈ, Π½ΠΎ ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΆΠΎΠ³ΠΎ ΠΎΠΏΡΡΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ²Π°Π΅Ρ Π»ΠΈΡΠ½ΠΈΠΌ.
15.1. ΠΠ°ΠΏΡΡΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΠΉΡΠΎΠ² Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ sla.
ΠΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ° (Π.Π.): SLA (ΠΎΡ Π°Π½Π³Π». Service Level Agreement) ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ "Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± Π£ΡΠΎΠ²Π½Π΅ ΠΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ" β ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, ΡΠ΅Π³Π»Π°ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ Π²Π·Π°ΠΈΠΌΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΠ’-ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ ΠΈ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠΎΠΌ.
Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ Apache ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π½ΠΎ ΠΌΡ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΈ ΡΡΡΠΎΠΊΠΈ Π²Π·ΡΡΡ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΠΆΠ°ΠΌΠ°Π»ΠΎΠΌ Π₯Π°Π΄ΠΈ (Jamal Hadi).
ΠΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ Π΄Π²Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π°ΡΠ΅Π½Π΄ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠ»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΏΠΎΠ΄ http, ftp ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ΅ audio. ΠΠ΅ΡΠ²ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ Π°ΡΠ΅Π½Π΄ΡΠ΅Ρ ΠΏΠΎΠ»ΠΎΡΡ Π² 2 ΠΠ±ΠΈΡΠ°, Π²ΡΠΎΡΠΎΠΉ β 5 ΠΠ±ΠΈΡ. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°Π·Π½Π°ΡΠΈΠΌ Π½Π°ΡΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ IP-Π°Π΄ΡΠ΅ΡΠ° Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅:
# ip address add 188.177.166.1 dev eth0
# ip address add 188.177.166.2 dev eth0
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ IP-Π°Π΄ΡΠ΅ΡΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΡΠ»ΡΠΆΠ±Π°ΠΌ, ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π·Π° Π²Π°ΠΌΠΈ. ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Π΄Π΅ΠΌΠΎΠ½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ°ΠΊΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ.
ΠΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ CBQ qdisc ΠΊ eth0:
# tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit cell 8 avpkt 1000 \
mpu 64
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠ»Π°ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²:
# tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate \
2MBit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21
# tc class add dev eth0 parent 1:0 classid 1:2 cbq bandwidth 10Mbit rate \
5Mbit avpkt 1000 prio 5 bounded isolated allot 1514 weight 1 maxburst 21
Π Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠΈΠ»ΡΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ:
##FIXME: ΠΠ»Ρ ΡΠ΅Π³ΠΎ Π½ΡΠΆΠ½Π° ΠΏΠ΅ΡΠ²Π°Ρ ΡΡΡΠΎΠΊΠ°, ΡΡΠΎ ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ? ΠΠ°ΠΊΠΎΠ²ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ "Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ" (divisor)?:
##FIXME: ΠΠ΅Π»ΠΈΡΠ΅Π»Ρ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ Ρ Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΈ Π½ΠΎΠΌΠ΅ΡΡ ΠΏΡΠ»Π°
## (bucket) β ahu
# tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 1: u32 divisor 1
# tc filter add dev eth0 parent 1:0 prio 5 u32 match ip src 188.177.166.1
flowid 1:1
# tc filter add dev eth0 parent 1:0 prio 5 u32 match ip src 188.177.166.2
flowid 1:2
FIXME: ΠΠΎΡΠ΅ΠΌΡ Π½Π΅Ρ token bucket filter?
15.2. ΠΠ°ΡΠΈΡΠ° ΠΎΡ syn flood.
ΠΡΠΈΠΌΠ΅Ρ Π²Π·ΡΡ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊ iproute, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΠ»Π΅ΠΊΡΠ΅Π΅ΠΌ ΠΈ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ netfilter. ΠΡΠ»ΠΈ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ Π²Π°Ρ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π±ΡΠ» Π½Π°ΠΏΠΈΡΠ°Π½ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Ρ ΠΎΡΡΠ°, Π° Π½Π΅ ΡΠ΅ΡΠΈ. Π£ΡΠΈΡΡΠ²Π°ΠΉΡΠ΅ ΡΡΠΎ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²ΠΎ.
ΠΠ»Ρ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΌΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ iproute2.
#! /bin/sh βx
#
# Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Ρ ΠΎΠ΄ΡΡΠΈΠΌ (ingress) ΡΡΠ°ΡΠΈΠΊΠΎΠΌ
# Π·Π΄Π΅ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π΄Π»Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ SYN-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²
# ΠΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ TCP-SYN Π°ΡΠ°ΠΊ.
# #ΠΏΡΡΠΈ ΠΊ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌ; #ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
#
TC=/sbin/tc
IP=/sbin/ip
IPTABLES=/sbin/iptables
INDEV=eth2
#
# ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ Π²ΡΠ΅ SYN-ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΏΡΠΈΡΠ΅Π΄ΡΠΈΠ΅ ΡΠ΅ΡΠ΅Π· $INDEV, ΡΠΈΡΠ»ΠΎΠΌ 1
############################################################
$iptables βA PREROUTING βi $INDEV βt mangle βp tcp βsyn \
βj MARK βset-mark 1
############################################################
#
# ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ingress qdisc Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
############################################################
$TC qdisc add dev $INDEV handle ffff: ingress
############################################################
#
#
# SYN-ΠΏΠ°ΠΊΠ΅Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ 40 Π±Π°ΠΉΡ (320 Π±ΠΈΡ), ΠΎΡΡΡΠ΄Π° β ΡΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°
# ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ 960 Π±ΠΈΡ (ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 1 ΠΠ±ΠΈΡ); ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠΌ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ
# 3-ΠΌΡ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ ( ΡΠΎΡΠ½Π΅Π΅ β 1 ΠΠ±ΠΈΡ/ΡΠ΅ΠΊ )
############################################################
$TC filter add dev
$INDEV parent ffff: protocol ip prio 50 handle 1 fw \
police rate 1kbit burst 40 mtu 9k drop flowid :1
############################################################
# echo "β qdisc parameters Ingress β"
$TC qdisc ls dev $INDEV
echo "β Class parameters Ingress β"
$TC class ls dev $INDEV
echo "β filter parameters Ingress β"
$TC filter ls dev $INDEV parent ffff:
#Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ingress qdisc
#$TC qdisc del $INDEV ingress
15.3. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π΄Π»Ρ icmp-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Ρ ΡΠ΅Π»ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ dDoS Π°ΡΠ°ΠΊ.
ΠΠ΅Π΄Π°Π²Π½ΠΈΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π°ΡΠ°ΠΊΠΈ, ΡΠΈΠΏΠ° "ΠΡΠΊΠ°Π· Π² ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ", ΡΡΠ°Π»ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ "Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΡΡ" Π΄Π»Ρ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ. ΠΠ°ΡΡΡΠΎΠΈΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΉ, Π²ΡΠ·Π²Π°Π½Π½ΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° Π°ΡΠ°ΠΊΠ°ΠΌΠΈ.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° β Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠΈΠ»ΡΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ°ΠΊΠ΅ΡΡ, Ρ ΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠΌΠΈ Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ, Π½Π΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠΌΠΈ Π²Π°ΡΠ΅ΠΉ ΡΠ΅ΡΠΈ, Π½Π΅ ΡΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΠΊΠΈΠ½ΡΡΡ Π΅Π΅. ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π²ΡΡΠΊΠΎΠΉ "Π³Π°Π΄ΠΎΡΡΠΈ" Π² ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ.
ΠΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ Π΄Π΅Π»Ρ, Π½Π°ΡΠΈΡΡΠ΅ΠΌ ΡΡ Π΅ΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ ΠΊ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ:
[ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ] ---<E3, T3...>--- [Linux router] --- [ΠΡΠΈΡ]
eth1 eth0
ΠΠ°Π΄Π°Π΄ΠΈΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ:
# tc qdisc add dev eth0 root handle 10: cbq bandwidth 10Mbit avpkt 1000
# tc class add dev eth0 parent 10:0 classid 10:1 cbq bandwidth 10Mbit rate \
10Mbit allot 1514 prio 5 maxburst 20 avpkt 1000
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΡΠΊΠΎΡΠΎΡΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ β ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΠΈ ΡΠΈΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡΡΡ Ρ "ΡΠΈΡΠΈΠ½ΠΎΠΉ" ΠΊΠ°Π½Π°Π»Π° Π΄Π»Ρ ICMP-ΡΡΠ°ΡΠΈΠΊΠ°. Π§ΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΡΠ΅ΡΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ tcpdump, Π·Π°ΠΏΡΡΡΠΈΠ² Π΅Π΅ Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ²ΠΎΠ΄Π° Π² ΡΠ°ΠΉΠ». ΠΠ°ΡΠ΅ΠΌ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ICMP-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ Π²Π°ΡΠ΅ΠΉ ΡΠ΅ΡΡΡ Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΡΠ»ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΡΠ΅ΠΌ Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡΡΡ 10% ΠΎΠ±ΡΠ΅ΠΉ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ. ΠΠΎΡΡΡΠΎΠΈΠΌ Π½Π°Ρ ΠΊΠ»Π°ΡΡ:
# tc class add dev eth0 parent 10:1 classid 10:100 cbq bandwidth 10Mbit rate \
100Kbit allot 1514 weight 800Kbit prio 5 maxburst 20 avpkt 250 \
bounded
ΠΠ½ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΊΠ°Π½Π°Π»Π° Π²Π΅Π»ΠΈΡΠΈΠ½ΠΎΠΉ 100 ΠΠ±ΠΈΡ/ΡΠ΅ΠΊ. Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ ΠΊ Π½Π΅ΠΌΡ ΡΠΈΠ»ΡΡΡ Π΄Π»Ρ ICMP-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²:
# tc filter add dev eth0 parent 10:0 protocol ip prio 100 u32 match ip protocol 1 0xFF flowid 10:100
15.4. Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΡΠ°ΡΠΈΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ².
ΠΡΠ»ΠΈ ΠΊΠ°Π½Π°Π» ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°Π±ΠΈΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌΠΈ/ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΠΎ ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ΡΠ΅Π· telnet ΠΈΠ»ΠΈ ssh ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ. ΠΠ°ΠΊ Π±ΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΡΠ°ΡΠΈΠΊ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π»ΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ. Linux ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π² ΡΡΠΎΠΌ!
ΠΠ°ΠΊ ΠΈ ΠΏΡΠ΅ΠΆΠ΄Π΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΠΊΠ° Π½Π° ΠΎΠ±ΠΎΠΈΡ ΠΊΠΎΠ½ΡΠ°Ρ ΠΊΠ°Π½Π°Π»Π°. ΠΠ°ΠΈΠ»ΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β ΠΊΠΎΠ³Π΄Π° Ρ ΠΎΠ±ΠΎΠΈΡ ΠΊΠΎΠ½ΡΠΎΠ² ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Linux, ΠΎΠ΄Π½Π°ΠΊΠΎ UNIX ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌΠΈ ΡΡΠ°ΡΠΈΠΊΠ°.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ pfifo_fast ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ "ΠΏΠΎΠ»ΠΎΡΡ". Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ»ΠΎΡΠ° 0, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΡΡ 1 ΠΈ 2. ΠΠΎΡΡΠΎΠΌΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²Π΅ΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΡΠ°ΡΠΈΠΊ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π² ΠΏΠΎΠ»ΠΎΡΡ 0!
ΠΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡ ΠΎΡ "Ipchais HOWTO" (ΡΠΆΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅Π³ΠΎ):
Π IP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ 4 ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π±ΠΈΡΠ° β TOS (Type of Service β Π’ΠΈΠΏ ΠΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ). ΠΠ½ΠΈ Π·Π°Π΄Π°ΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ°: "Minimum Delay" (ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠ°), "Maximum Throughput" (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ), "Maximum Reliability" (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ) ΠΈ "Minimum Cost" (ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΠΊΠ°Π½Π°Π»Π°). ΠΡΠΈΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ Π±ΠΈΡΠΎΠ². Π ΠΎΠ± Π²Π°Π½ ΠΡΡΠΊΠ΅ΡΠΊ (Rob van Nieuwkerk), Π°Π²ΡΠΎΡ ΠΊΠΎΠ΄Π° ipchains TOS-mangling, Π΄Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠ΅:
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΠΌ Π΄Π»Ρ ΠΌΠ΅Π½Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π°Π³ "Minimum Delay" (ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠ°). Π― Π²ΠΊΠ»ΡΡΠ°Ρ Π΅Π³ΠΎ Π² ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ° Π½Π° ΠΌΠΎΠ΅ΠΌ ΡΠΎΡΡΠ΅ΡΠ΅, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΌ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Linux. Π― ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΠΊ ΡΠ΅ΡΠΈ ΡΠ΅ΡΠ΅Π· ΠΌΠΎΠ΄Π΅ΠΌ 33.6. Linux "ΡΠ°ΡΠΊΠΈΠ΄ΡΠ²Π°Π΅Ρ" ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΠΎ 3-ΠΌ ΠΎΡΠ΅ΡΠ΅Π΄ΡΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ° ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΊΠ°Π½Π°Π»Π°.
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ»Π°Π³ "Minimum Delay" ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ Π΄Π»Ρ telnet ΠΈ ftp-control, Π° Π² ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ ftp-data β "maximum throughput". ΠΠ΅Π»Π°Π΅ΡΡΡ ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
# iptables βA PREROUTING βt mangle βp tcp βsport telnet \
-j TOS βset-tos Minimize-Delay
# iptables βA PREROUTING βt mangle βp tcp βsport ftp \
-j TOS βset-tos Minimize-Delay
# iptables βA PREROUTING βt mangle βp tcp βsport ftp-data \
-j TOS βset-tos Maximize-Throughput
ΠΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ ΠΎΡΡΠ΅ ΠΈ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΡΡΡ Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅, ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ, ΠΏΠ°ΠΊΠ΅ΡΡ. ΠΠ»Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, ΡΡΠΈ ΡΠ»Π°Π³ΠΈ (Π²ΡΠΎΠ΄Π΅ Π±Ρ) ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π° ΡΠ²ΠΎΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°: