Нагадаю, що таке ToS (Type of Service) – це можливість пріоритезувати певний трафік за рахунок виставлення спеціального байта у заголовку IP пакету. DSCP – деяке розширення (або в деякому сенсі новіша версія ToS), бо має більше різних пріоритетів (64 проти 7 у ToS).
Нюанс перший у пріоритезації – виставлення цього байту не означає, що трафік всюди буде слідувати цьому пріоритету. Треба щоб на шляху все мережеве обладнання підтримувало ці пріоритети. Зазвичай, зараз багато провайдерів просто ігнорують це на своєму обладнанні. Тому, враховуючи це, ToS/DSCP буде ефективним лише в межах вашої мережі.
Нюанс другий – ви можете як виставляти пріоритети, так і на основі вже виставлених пріоритетів керувати трафіком (наприклад, drop)
Нижче будуть показані налаштування для різних типів файерволів
iptables
TOS target options:
–set-tos value[/mask] Set Type of Service/Priority field to value (Zero out bits in mask and XOR value into TOS)
–set-tos symbol Set TOS field (IPv4 only) by symbol
(this zeroes the 4-bit Precedence part!)
Accepted symbolic names for value are:
(0x10) 16 Minimize-Delay
(0x08) 8 Maximize-Throughput
(0x04) 4 Maximize-Reliability
(0x02) 2 Minimize-Cost
(0x00) 0 Normal-Service
DSCP target options:
–set-dscp value Set DSCP field in packet header to value. This value can be in decimal (ex: 32) or in hex (ex: 0x20)
–set-dscp-class class Set the DSCP field in packet header to the value represented by the DiffServ class value.
This class may be EF,BE or any of the CSxx or AFxx classes.
These two options are mutually exclusive !
Ці опції можна також дізнатися і через команди:
iptables -m tos -h (або iptables -j TOS -h)
iptables -m dscp -h (або iptables -j DSCP -h)
Приклади:
- маркування
iptables -t mangle -A PREROUTING -p tcp--dport 22 -j TOS --set-tos 0x10
iptables -A OUTPUT -t mangle -p udp -m udp --dport 5060 -j DSCP --set-dscp 0×28
- керування:
iptables -A INPUT -p tcp -m tos --tos 0x10 -j ACCEPT
ipfw
Опції
RULE ACTIONS
setdscp DSCP | number | tablearg
Set specified DiffServ codepoint for an IPv4/IPv6 packet. Processing continues at the next rule.
RULE OPTIONS
iptos spec
Matches IPv4 packets whose tos field contains the comma separated list of service types specified in spec. The supported
IP types of service are:
lowdelay (IPTOS_LOWDELAY), throughput (IPTOS_THROUGHPUT),
reliability (IPTOS_RELIABILITY), mincost (IPTOS_MINCOST),
congestion (IPTOS_ECN_CE). The absence of a particula type may be denoted with a `!’.
dscp spec[,spec]
Matches IPv4/IPv6 packets whose DS field value is contained in spec mask. Multiple values can be specified via the comma separated list. Value can be one of keywords used in setdscp action or exact number.
Параметри ToS/DSCP такі самі, тому переходимо до прикладів:
- маркування
ipfw add setdscp be ip from any to any dscp af11,af21
- керування
ipfw add block ip from 1.1.1.1 to any iptos lowdelay
pf
set tos string | number
Enforces a TOS for matching packets. string may be one of critical, inetcontrol, lowdelay, netcontrol, throughput, reliability, or one of the DiffServ Code Points: ef, af11 … af43, cs0 … cs7; number may be either a hex or decimal number.
У версії FreeBSD замість set tos пишемо set-tos
tos string | number
This rule applies to packets with the specified TOS bits set. string may be one of critical, inetcontrol, lowdelay, netcontrol, throughput, reliability, or one of the DiffServ Code Points: ef, af11 … af43, cs0 … cs7; number may be either a hex or decimal number.
For example, the following rules are identical:
pass all tos lowdelay
pass all tos 0x10
pass all tos 16
Приклади:
- маркування
pass in proto tcp to port 22 set tos lowdelay
- керування
pass in quick inet proto udp from $vlan77 tos 0xB8