Есть шлюз, ОС Ubuntu 12.04. Задача настроить доступ для пользователей локальной сети в интернет с ограничением скорости. Помимо Squid на котором тоже есть возможность органичить скорость, возникла потребность зарезать пололу пропускания для некоторых пользователей, так же можно сделать приоритетность трафика. ТС будет более приоритетен чем Squid, поэтому правила сквида у которых скорость будет больше чем у правил TC не будут работать. TC сможет обеспечит гарантированную скорость для начальства, ограничит особо прожорливых пользователей, у которых по каким либо причинам есть прямой доступ без сквида, а также будет возможность обеспечить приоритеты для разных ыидов трафика.
Настроим NAT
https://onedayadmin.sytes.net/nat-ubuntu-12-04/
Настроим Traffic Control
Так как скорость можно ограничить только на исходящем интерфейсе, то трафик идущей от клиентов в интернет прийдется ограничивать на eth0(интерфейс смотрящий в интернет), а там работает NAT и все src adress-а будут адресом нащего сервера. Поэтому создадим виртуальный интерфейс ifb0 на котором мы сможем увидеть адреса клиентов.
Добавим в конец
class="class-code">post-up modprobe ifb
post-up ifconfig ifb0 up
post-up tc qdisc add dev eth2 handle ffff: ingress
tc filter add dev eth2 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
post-up /root/tc.sh
eth1 смотрит в локальную сеть.
Создадим скрипт с правилами управления трафиком для TC.
nano /home/scripts/tc.sh
#!/bin/bash
int_iface=eth2
if_virt=ifb0
func () {
# Удаляем все обработчики на интерфейсе
tc qdisc del dev $int_iface root
tc qdisc del dev $if_virt root
tc qdisc del dev $int_iface ingress
# Перенаправим трафикс локалки eth2 на виртуальный интерфейс
tc qdisc add dev $int_iface handle ffff: ingress
tc filter add dev $int_iface parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev $if_virt
}
func
# download #
tc qdisc add dev $int_iface root handle 1: htb default 1
#Main speed
tc class add dev $int_iface parent 1: classid 1:1 htb rate 100Mbit burst 30K
#For routers
tc class add dev $int_iface parent 1:1 classid 1:2 htb rate 10Mbit ceil 20Mbit burst 30K
#For admins
tc class add dev $int_iface parent 1:1 classid 1:3 htb rate 40Mbit ceil 80Mbit burst 30K
# upload #
tc qdisc add dev $if_virt root handle 1: htb default 1
#Main speed
tc class add dev $if_virt parent 1: classid 1:1 htb rate 100Mbit burst 30K
#For routers
tc class add dev $if_virt parent 1:1 classid 1:2 htb rate 10Mbit ceil 20Mbit burst 30K
#For admins
tc class add dev $if_virt parent 1:1 classid 1:3 htb rate 40Mbit ceil 80Mbit burst 30K
#admins
tc filter add dev $int_iface parent 1: protocol ip u32 match ip dst 192.168.21.20 flowid 1:3
tc filter add dev $if_virt parent 1: protocol ip u32 match ip src 192.168.21.20 flowid 1:3
Добавим в cron
Добавим строку
Проверим наш список правил.