На днях возникла необходимость на FreeBSD маршрутизаторе порезать канал для одной из машин. Поскольку на нем стоит DHCP-сервер без привязки IP-адресов к MAC’ам — пришлось исхитриться, полазить в гугле и понять, как порезать ширину канала, используя только MAC-адрес.
ipfw add <номер_правила> pipe <номер_правила> \
ip from any to any MAC any <MAC-адрес> \
layer 2 in # Входящий трафик
ipfw add <номер_правила+5> pipe <номер_правила+5> \
ip from any to any MAC any <MAC-адрес> \
layer 2 out # Исходящий трафик
А теперь указываем ширину канала для каждого направления
ipfw pipe <номер_правила> config bw <ширина_канала>
ipfw pipe <номер_правила+5> config bw <ширина_канала>
+5 к правилу добавляю для того, чтобы разделить направления. По желанию, можно или впихнуть все в одно правило. Ширина не обязательно должна быть +5, это так, моя привычка.