В данной статье хочу рассказать, как я строил систему ограничения входящего и исходящего трафика в Linux.
Как и учет трафика, ограничение полосы пропускания в сети является очень важной задачей, хотя первое с каждым годом всё быстрее отходит на второй план, шейпинг трафика остается необходимой задачей каждого системного/сетевого администратора.
Какие есть способы ограничения трафика?
Для того, чтобы ответить на этот вопрос нужно определиться для чего этот трафик ограничивать вообще.
Взяв за основу мою сеть из, примерно, 50 рабочих мест, которые выходят в интернет через шлюз, под управлением ОС Ubuntu и некоторые из пользователей пользуются локальными ресурсами на этом сервере по протоколу SMB.
Моя цель ограничить пользователям скорость передачи данных в Интернет со справедливым разделением полосы пропускания между ними.
Исходя из моих задач, для ограничения полосы пропускания можно использовать следующие методы:
1. Ограничение с помощью прокси-сервера Squid.
🌐 Ограничение пропускной способности и контроль интернет трафика на роутере TP-LINK ⚡
Данный метод позволяет довольно гибко контролировать весь www,ftp трафик пользователей с возможностью гибкого ограничения скорости пропускания.
2. Использование traffic control из iproute2.
Очень гибкий и оптимальный метод ограничения трафика, но не предоставляющий контроля над WWW трафиком, как в предыдущем методе.
3. Конечно возможно ограничить скорость путём использования модуля –m limit для iptables – но считаю это неприемлемым.
В общем я решил остановиться на методе ограничения трафика с помощью пакета iproute2.
Что, где и как?
Как уже упоминал, я использую сервер: OS Ubuntu 10.04, ядро 2.6.32-30. В сервере 3 интерфейса: eth0 – внутренняя сеть, eth1 — провайдер 1, eth2 – провайдер 2.
Задача: ограничить скорость входящего и исходящего трафика пользователей с приоритезацией трафика по классам, исходя из некоторых условий. Локальный трафик не ограничивать.
Немного теории
Представим ситуацию, когда пользователь установил соединение с youtube.com и смотрит какой-нибудь ролик в HD-качестве. Основная часть трафика направляется от сервера, в данном случае youtube.com к пользователю. Учитывая, что весь трафик проходит через наш шлюз, мы можем повлиять на скорость передачи этого трафика путем установки шейпера трафика на интерфейсе внутренней сети.
Похожая ситуация происходит, когда пользователь загружает фотоотчет о проведенном отпуске, состоящий из 300 фотографий в разрешении 5000х3500 пикселей на какой-нибудь сервис хранения фотографий в интернете.
Естественно, что при отсутствии системы ограничения трафика этот пользователь займёт весь канал и остальным пользователям не будет предоставлена нормальная скорость работы с Интернет. Но мы не может ограничить скорость отправки данных пользователем на внешнем интерфейсе сервера, т.к. для доступа пользователей в Интернет используется NAT, а, учитывая, что шейпинг трафика выполняется после преобразования адресов, то на внешнем интерфейсе сервера уже не будет пакетов с внутренними адресами сети.
Ограничение трафика в роутере | Как снизить скорость другим пользователям
Для решения проблемы ограничения исходящего от клиента трафика я использовал устройство IFB, на которое перенаправлял весь исходящий от клиента трафик.
В теории управления трафиком мы можем ограничивать только исходящий трафик. Следовательно, трафик, который направляется к пользователю внутренней сети, будет исходящим относительно внутреннего интерфейса eth0, а трафик, направляющийся от пользователя внутренней сети – исходящим относительно внешнего интерфейса eth1.
Исходя из вышеизложенного, я ограничивал входящий к пользователю трафик на интерфейсе внутренней сети — eth0, а исходящий от пользователя трафик – на виртуальном интерфейсе ifb0.
Для того чтобы во время занятия пользователем всей полосы пропускания, ограниченной ему на шлюзе, для скачивания какого-нибудь большого объема данных и при этом мог нормально пользоваться ssh и чтобы у него работал ping – я использовал приоритезацию трафика.
- icmp
- udp,ssh
- tcp sport 80
- остальной неклассифицированный трафик
Дисциплины, классы, фильтры
Как уже было мной отмечено, входящий к пользователям трафик будет ограничиваться на интерфейсе eth0, а исходящий от пользователей – на виртуальном интерфейсе ifb0.
Для инициализации интерфейса ifb0 нужно сначала загрузить модуль управления интерфейсом:
/sbin/modprobe ifb
После успешной загрузки модуля нужно включить интерфейс:
/sbin/ip link set dev ifb0 up
Затем, после того, как интерфейс будет поднят, нужно организовать переадресацию всего исходящего трафика от пользователей на этот интерфейс:
/sbin/tc qdisc add dev eth0 ingress
/sbin/tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
Теперь можно смело начинать строить классы и фильтры для входящего к пользователям трафика на интерфейсе eth0, а исходящего – на интерфейсе ifb0.
- На интерфейсе создается, так называемый корневой обработчик очереди
- К этой дисциплине прикрепляется класс, который одержит информацию о максимальной пропускной способности данных, которые в этот класс попадут
- Добавляется фильтр, который, с помощью определенных параметров, относит каждый пакет к тому или иному классу
Ограничиваем входящий к пользователям трафик
Все манипуляции с трафиком будем проводить на интерфейсе eth0.
Для начала создадим корневой обработчик очереди на интерфейсе:
/sbin/tc qdisc add dev eth0 root handle 1: htb default 900
Тем самым мы привязали корневой обработчик очереди к интерфейсу eth0, присвоили ему номер 1: и указали на использование планировщика HTB с отправкой всего неклассифицированного трафика в класс с номером 900.
Затем создадим дочерний класс 1:1 с шириной канала, равной скорости интерфейса:
/sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbit burst 15k
Все последующие классы будут подклассами только что созданного нами класса. Это дает нам более точную приоритезацию и обработку скорости потока данных.
Создадим класс для локального трафика, адресом назначения или исходным адресом которого будет являться внутренний адрес сервера. Это нужно для удобства пользования ресурсами сервера, такими как SSH, SMB, FTP, WWW и так далее. Скорость, описанная классом – 50Mbit, но в случае, если скорость потока родительского класса не меньше 100Mbit, то разрешаем использовать 80Mbit, в качестве максимальной скорости передачи данных.
/sbin/tc class add dev eth0 parent 1:1 classid 1:10 htb rate 50Mbit ceil 80Mbit burst 15k
Далее создаем класс, скорость которого будет равно ширине полосы пропускания, которую нам предоставляет провайдер. В моем случае – это 15Mbit.
/sbin/tc class add dev eth0 parent 1:1 classid 1:100 htb rate 15Mbit burst 15k
Даже если провайдер предоставляет большую скорость, к примеру 18Mbit, я рекомендую снижать эту скорость для шейпера на 1-2 Mbit для более «мягкого» ограничения трафика.
Далее создадим класс, в который будут отправляться все пакеты данных, которые не попадут ни в один из созданных ранее классов.
/sbin/tc class add dev eth0 parent 1:1 classid 1:900 htb rate 56Kbit ceil 128Kbit
Для каждого пользователя я создавал отдельный подкласс, с выделенной полосой пропускания, а затем создавал подклассы этого класса для приоритезации трафика:
/sbin/tc class add dev eth0 parent 1:100 classid 1:101 htb rate 4Mbit ceil 6Mbit
Данной командой мы указали на создание класса с номером 1:101, который является подклассом класса с номером 1:100 и указали пропускную способность класса в 4Mbit, а в случае свободной полосу пропускания у родительского класса, разрешить максимальное прохождение данных по классу на скорости 6Mbit.
Далее создаем подклассы для приоритезации трафика:
# PRIO 1 -> icmp traffic — самый низкий приоритет
/sbin/tc class add dev eth0 parent 1:101 classid 1:102 htb rate 33kbit ceil 6Mbit prio 1
# PRIO 2 -> udp, ssh
/sbin/tc class add dev eth0 parent 1:101 classid 1:103 htb rate 33kbit ceil 6Mbit prio 2
# PRIO 3 -> tcp sport 80 – WWW трафик из мира
/sbin/tc class add dev eth0 parent 1:101 classid 1:104 htb rate 33kbit ceil 6Mbit prio 3
# PRIO 4 -> unclassified traffic – трафик, который не попал под условия, указанные в предыдущих классах
/sbin/tc class add dev eth0 parent 1:101 classid 1:105 htb rate 33kbit ceil 6Mbit prio 4
После создания классов пришло время создания фильтров, которые будут классифицировать трафик по определенным критериям.
Есть несколько способов классифицировать трафик.
Самые удобные из них – это u32 классификаторы, позволяющие классифицировать пакеты исходя из адреса назначения или отправителя, используемого протокола, номера порта и так далее, и классификаторы на основе меток iptables. Для использования последних необходимо сначала маркировать пакеты при помощи iptables в цепочке PREROUTING, на основе каких-либо условий, а затем при помощи tc направлять пакеты с соответствующей меткой в нужные классы.
Я предпочел использовать u32 классификатор.
Присваиваем icmp-трафику самый низкий приоритет и отправляем его в класс 1:102
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.10.78
match ip protocol 1 0xff flowid 1:102
UDP и SSH трафик отправляем в класс 1:103
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 match ip dst 192.168.10.78
match ip protocol 17 0xff flowid 1:103
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 match ip dst 192.168.10.78
match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:103
WWW-трафик, пришедший с tcp-порта 80 отправляем в класс 1:104
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 match ip dst 192.168.10.78
match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:104
Трафик, не соответствующий ни одному из условий отправляем в класс 1:105
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 4 u32 match ip dst 192.168.10.78 flowid 1:105
Приоритезация работает по такому принципу, что каждому классу выделяется по минимальной полосе пропускания с возможностью заимствования у родительского класса максимальной полосы пропускания, в зависимости от приоритета трафика, поэтому, если класс будет забит WWW-трафиком с tcp-порта 80, при прохождении icmp пакета с более низким приоритетом, чем у WWW-трафика, он будет пропущен вне очереди, учитывая его приоритет.
Ограничиваем исходящий трафик
Для ограничения исходящего от пользователей трафика выполняются такие же действия как и для входящего, только в ход идет виртуальный интерфейс ifb0. Также нужно изменить назначение следования трафика: вместо dst 192.168.10.78 – нужно указать src 192.168.10.78 соответственно.
Автоматизация и принцип работы скриптов
Для начала, для автоматизации процесса ограничения скорости нужно создать файл, в котором будет перечислены адреса пользователей, для которых нужно устанавливать ограничения с указанием этих ограничений.
Файл представляет из себя поля, разделенный знаком табуляции либо пробелом со следующими значениями:
CLIENT – Имя пользователя. Нужно для удобства предоставления данных
IP – адрес пользователя в сети
DOWN – скорость потока данных к пользователю
CEIL – максимальная скорость входящего трафика к пользователю при доступности данной полосы у родительского класса
UP — скорость потока данных от пользователя
CEIL – то же, что и у CEIL для входящего трафика к пользователю
PROVIDER – какой из провайдеров используется для обслуживания запросов пользователя (при наличии нескольких)
ID – номер класса для пользователя. Подробнее о номерах классов ниже.
Также я использую несколько bash-скриптов.
#!/bin/bash
. /etc/init.d/functions
/sbin/modprobe ifb
/sbin/ip link set dev ifb0 up
TC=»/sbin/tc»
DEV_P1_DOWN=»eth0″
DEV_P1_UP=»ifb0″
stop() $TC qdisc del dev $DEV_P1_DOWN root
$TC qdisc del dev $DEV_P1_UP root
$TC qdisc del dev $DEV_P1_DOWN ingress
>
start() # Удаляем все обработчики на интерфейсе
$TC qdisc del dev $DEV_P1_DOWN root
$TC qdisc del dev $DEV_P1_UP root
$TC qdisc del dev $DEV_P1_DOWN ingress
## Перенаправляем весь исходящий от пользователей трафик на виртуальный интерфейс ifb0
$TC qdisc add dev $DEV_P1_DOWN ingress
$TC filter add dev $DEV_P1_DOWN parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev $DEV_P1_UP
# Подгружаем скрипты с описанием классов входящего и исходящего трафика
# Весь трафик, который следует на шлюз или от него ограничиваем в 50Мбит с максимумом в 80Мбит.
$TC filter add dev $DEV_P1_UP protocol ip parent 1:0 prio 1 u32 match ip dst 10.0.0.1 flowid 1:10
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 1 u32 match ip src 10.0.0.1 flowid 1:10
# Подгружаем скрипт с описанием фильтров
. /etc/rc.d/shape/rc.shape.filters
>
Далее код, который подгружается:
Классы
#!/bin/bash
## DOWNLOAD CLASSES
##########################################################
# Создаем корневой обработчик очереди
$TC qdisc add dev $DEV_P1_DOWN root handle 1: htb default 900
# Описание классов для входящего к пользователям трафика
$TC class add dev $DEV_P1_DOWN parent 1: classid 1:1 htb rate 100Mbit burst 15k
# Локльный трафик (SERVER -> CLIENTS)
$TC class add dev $DEV_P1_DOWN parent 1:1 classid 1:10 htb rate 50Mbit ceil 80Mbit burst 15k
# Трафик от провайдера (SERVER -> CLIENTS)
$TC class add dev $DEV_P1_DOWN parent 1:1 classid 1:100 htb rate 15Mbit burst 15k
# Неклассифицированный трафик будет отправлен в этот класс (SERVER -> CLIENTS)
$TC class add dev $DEV_P1_DOWN parent 1:1 classid 1:900 htb rate 128Kbit ceil 128Kbit
## UPLOAD CLASSES
#############################################################
# Создаем корневой обработчик очереди
$TC qdisc add dev ifb0 root handle 1: htb default 900
# Описание классов для исходящего от пользователей трафика
$TC class add dev ifb0 parent 1: classid 1:1 htb rate 100Mbit burst 15k
# Локальный трафик (CLIENTS -> SERVER)
$TC class add dev $DEV_P1_UP parent 1:1 classid 1:10 htb rate 50Mbit ceil 80Mbit burst 15k
# Трафик к провайдеру (CLIENTS -> SERVER)
$TC class add dev $DEV_P1_UP parent 1:1 classid 1:100 htb rate 5Mbit burst 15k
# Неклассифицированный трафик будет отправлен в этот класс (CLIENTS -> SERVER)
$TC class add dev $DEV_P1_UP parent 1:1 classid 1:900 htb rate 128Kbit ceil 128Kbit
И фильтры:
# создаем отдельный подкласс для пользователя
$TC class add dev $DEV_P1_DOWN parent 1:100 classid 1:$1 htb rate $CLIENT_DOWN_RATE ceil $CLIENT_DOWN_CEIL
# PRIO 1 -> icmp traffic
$TC class add dev $DEV_P1_DOWN parent 1:$1 classid 1:$2 htb rate 33kbit ceil $CLIENT_DOWN_CEIL prio 1
# PRIO 2 -> udp, ssh
$TC class add dev $DEV_P1_DOWN parent 1:$1 classid 1:$3 htb rate 33kbit ceil $CLIENT_DOWN_CEIL prio 2
# PRIO 3 -> tcp sport 80
$TC class add dev $DEV_P1_DOWN parent 1:$1 classid 1:$4 htb rate 33kbit ceil $CLIENT_DOWN_CEIL prio 3
# PRIO 4 -> unclassified traffic
$TC class add dev $DEV_P1_DOWN parent 1:$1 classid 1:$5 htb rate 33kbit ceil $CLIENT_DOWN_CEIL prio 4
# фильтруем icmp-пакеты в ранее созданный нами класс для icmp-трафика с приоритетот 1
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 1 u32 match ip dst $CLIENT_IP
match ip protocol 1 0xff flowid 1:$2
# фильтрация udp
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 2 u32 match ip dst $CLIENT_IP
match ip protocol 17 0xff flowid 1:$3
# ssh
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 2 u32 match ip dst $CLIENT_IP
match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:$3
# WWW, sport 80
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 3 u32 match ip dst $CLIENT_IP
match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:$4
# самый высокий приоритет – трафику, не попавшему под предыдущие фильтры
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 4 u32 match ip dst $CLIENT_IP flowid 1:$5
### ТАКИЕ ЖЕ ПРАВИЛА И ДЛЯ ИСХОДЯЩЕГО ТРАФИКА
$TC class add dev $DEV_P1_UP parent 1:100 classid 1:$1 htb rate $CLIENT_UP_RATE ceil $CLIENT_UP_CEIL
# PRIO 1 -> icmp traffic
$TC class add dev $DEV_P1_UP parent 1:$1 classid 1:$2 htb rate 1kbit ceil $CLIENT_UP_CEIL prio 1
# PRIO 2 -> udp, ssh
$TC class add dev $DEV_P1_UP parent 1:$1 classid 1:$3 htb rate 1kbit ceil $CLIENT_UP_CEIL prio 2
# PRIO 3 -> unclassified traffic
$TC class add dev $DEV_P1_UP parent 1:$1 classid 1:$4 htb rate 1kbit ceil $CLIENT_UP_CEIL prio 3
$TC filter add dev $DEV_P1_UP protocol ip parent 1:0 prio 1 u32 match ip src $CLIENT_IP
match ip protocol 1 0xff flowid 1:$2
$TC filter add dev $DEV_P1_UP protocol ip parent 1:0 prio 2 u32 match ip src $CLIENT_IP
match ip protocol 17 0xff flowid 1:$3
$TC filter add dev $DEV_P1_UP protocol ip parent 1:0 prio 2 u32 match ip src $CLIENT_IP
match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:$3
$TC filter add dev $DEV_P1_UP protocol ip parent 1:0 prio 3 u32 match ip src $CLIENT_IP flowid 1:$4
Данные скрипты нужно положить в один каталог, Выполнить:
chmod +x ./rc.shape
Я описал один из методов ограничения трафика. Утилита tc – очень мощная вещь в вопросах об ограничениях трафика. Рекомендую ознакомиться с документом: LARTC-HOWTO для более глубокого изучения данного вопроса.
Источник: habr.com
Как ограничить трафик на компьютере под управлением Windows 10
Windows 10 — современная операционная система, которая устанавливается даже на портативных ноутбуках. Часто пользователи подобных компактных компьютеров используют их вне дома или офисного помещения, где для выхода в интернет приходится подключаться к точке доступа на смартфоне или планшете. Мало у кого трафик мобильного интернета безлимитный, и всего за несколько минут или часов работы за компьютером под управлением Windows 10, подключенным к мобильному интернету, могут окончиться предоплаченные гигабайты. Чтобы этого не произошло, в Windows 10 можно ограничить максимально потребляемый компьютером лимит трафика, и в рамках данной статьи мы рассмотрим, как это сделать.
Оглавление: Как установить лимит трафика на компьютере с Windows 10 Как оптимизировать использование трафика в Windows 10
Как установить лимит трафика на компьютере с Windows 10
Среди стандартных утилит операционной системы Windows 10 имеется программа, которая способна контролировать используемый трафик. Чтобы ею воспользоваться, выполните следующие действия:
-
Зайдите в “Параметры” (нажав на шестеренку в меню “Пуск” или с помощью сочетания Win+I на клавиатуре). Перейдите в раздел “Сеть и интернет”;
В левой части окна параметров переключитесь на подраздел “Использование данных”;
Далее нужно выбрать сетевое подключение, для которого на компьютере будет установлен лимит по потреблению трафика. Выбирается подключение в списке “Показать параметры для”. И нажмите “Установить лимит”;
Откроется окно для настройки параметров лимита. Здесь можно выбрать, какой именно лимит активировать для данного соединения: ежемесячный, разовый или без ограничений. Также настраивается срок действия лимита и количество разрешенного для данного устройства трафика по соединению — можно установить, как в мегабайтах, так и в гигабайтах. Задав необходимые параметры, нажмите “Сохранить”;
После этого в настройках появятся сведения о лимите трафика для соединения. Будет указываться, сколько трафика уже использовано, и сколько осталось. Если нужно убрать лимит по трафику, нажмите “Удалить лимит”. Если необходимо установить больше или меньше лимит допустимого трафика, нажмите “Изменить лимит”.
Важно отметить, что при установленном лимите на передачу данных, также доступна опция ограничения фоновой работы приложений и компонентов Microsoft, когда осталось меньше 10% от трафика.
Как оптимизировать использование трафика в Windows 10
Если трафик лимитирован, не лишним будет провести оптимизацию компьютера, чтобы быстро не истратить доступные мегабайты. Малая часть программ, которые задействуют интернет в фоновом режиме, самостоятельно умерят свои аппетиты при активации функции лимита трафика. Рекомендуется выполнить следующие действия для оптимизации потребления интернета:
-
Отключить синхронизацию с облачными сервисами. По умолчанию на компьютерах под управлением Windows 10 установлена программа OneDrive. Нажмите на значок программы правой кнопкой мыши в панели задач, после чего выберите вариант “Приостановить синхронизацию”. Можно выбрать период, на который будет остановлена работа OneDrive — 1, 3 или 24 часа.
Выберите нужный вариант. Если на компьютере используются другие облачные сервисы, попробуйте их приостановить похожим образом, например, Dropbox или Google Backup. Если используемые сервисы не предполагают временную остановку, отключите их полностью на период использования лимитированного соединения с интернетом;
Далее нужно приостановить работу в фоновом режиме всех приложений, поскольку они могут обращаться к интернету, в том числе и с целью обновления, что может потратить значительное количество лимитированного трафика. Зайдите в “Параметры” на компьютере, перейдите в раздел “Конфиденциальность” и подраздел “Фоновые приложения”. Запретите работу приложениям в фоновом режиме, отключив некоторые из них или все сразу при помощи единого переключателя в верхней части страницы параметров;
Посмотрите, какие программы на компьютере используют больше всего трафика. Это можно сделать из параметров системы. Перейдите в раздел “Параметры” — “Сеть и интернет” — “Использование данных”. Нажмите на ссылку “Просмотр сведений об использовании отдельно для каждого приложения”.
Откроется окно, в котором содержится конкретная информация о том, сколько трафика истратило каждое приложение на компьютере за последние 30 дней. Отключите программы, работа которых не требуется в фоновом режиме при использовании лимитированного трафика.
Оптимизировав потребление компьютером на Windows 10 трафика при использовании мобильного интернета, можно не волноваться, что доступные мегабайты закончатся из-за действий, которые вы не выполняли.
Источник: okeygeek.ru
Способы ограничения скорости копирования по сети в Windows
29.05.2020
insci
PowerShell, Windows 10, Windows Server 2016, Групповые политики
комментариев 13
В этой статье мы рассмотрим способы ограничения скорости передачи данных по сети с/на Windows Server 2016 и Windows 10 с помощью встроенных и сторонних средств. Как известно, что по умолчанию, приложения Windows используют сетевой интерфейс по максимуму. Это может вызвать проблемы, когда определенная задача (чаще всего это общие сетевые папки) используют всю доступную пропускную способность сетевой карты. В это случае вы можете ограничить максимальную скорость копирования файлов из сетевой папки, и предоставить пользователям других приложения гарантированные ресурсы сетевой карты.
Для управления классами и приоритетами трафика в сетях TCP/IP используется технология QoS (quality of service).
Настройка групповой политики QoS в Windows
Вы можете управлять приоритетами трафика в Windows с помощью настроек групповой политики QoS. В этом сценарии я ограничу скорость передачи данных для всех исходящих соединений (политика будет применяться, в том числе, когда пользователи копируют файлы с вашего сервера). На основе данного примера вы сможете ограничить скорость для любого приложения, порта или сайта.
Групповые политики QoS поддерживается в:
- Windows Server 2008 и выше
- Windows Vista и выше
В первую очередь настройки параметры сетевой карты и убедитесь, что у вас включена опция Qos Packet Scheduler.
- Запустите оснастку локального редактора GPO (gpedit.msc) и перейдите в раздел Computer Configuration ->Windows Settings ->Policy-based QoS и нажмите Create new policy;
- Укажите имя политики, включите опцию Specify Outbound Throttle Rate и задайте ограничение скорости Throttle Rate. Это скорость в MBps/KBps (мегабайтах/килобайтах) до которой вы хотите ограничить исходящий трафик.
Заметка. Также есть возможность выставить DSCP значение. DSCP (Differenciated Services Code Point) может использоваться на продвинутых маршрутизаторах типа Cisco/Mikrotik. В зависимости от значения DSCP у пакета, маршрутизаторы будут выставлять этому пакету приоритет. Не используйте этот параметр, если вы не уверены в настройках QoS DSCP на ваших маршрутизаторах.



Настройка QoS политики в Windows завершена. Перезагружаться не надо, сразу после применения изменений скорость передачи по сети начнёт шейпиться. Обратите внимание, что Throttle Rate отображается редакторе политик в КилоБайтах, даже если вы выбрали значение 3 МБ.
Так как я выбрал все приложения и все порты, данная политика будет ограничивать максимальную скорость передачи файлов по сети до 3 Мб (в том числе при копировании файлов через File Explorer — explorer.exe).
Еще существуют Advanced QoS политики, которые доступны только в разделе конфигурации политик компьютера. Вы можете ограничить входящий TCP трафик на вкладке Inbound TCP Traffic. (Вкладка DSCP Marking Override относится к настройкам DSCP, её рассматривать мы не будем)
Как вы видите, имеются 4 уровня ограничения трафика. В следующей таблице указаны уровни и их скорости.
Управление политиками QoS Windows средствами PowerShell
Для создания и управления политиками QoS можно использовать PowerShell. Например, чтобы создать политику QoS, ограничивающую пропускную способность для SMB (файлового) трафика, используйте команду:
New-NetQosPolicy -Name «SMBRestrictFileCopySpeed» -SMB -ThrottleRateActionBitsPerSecond 10MB
Name : SMBRestrictFileCopySpeed Owner : Group Policy (Machine) NetworkProfile : All Precedence : 127 Template : SMB JobObject : ThrottleRate : 10.486 MBits/sec
Чтобы вывести список примененных политик QoS на компьютере, выполните команду:
Get-NetQosPolicy
Чтобы изменить, или удалить политику QoS, используются соответственно командлеты Set-NetQosPolicy и Remove-NetQosPolicy .
Remove-NetQosPolicy -Name SMBRestrictFileCopySpeed
Set-SmbBandwidthLimit: управление пропускной способностью для SMB трафика из PowerShell
Командлет Set-SmbBandwidthLimit позволяет ограничить скорость передачи данных по SMB протоколу. Сначала нужно установить компонент Windows Server SMB Bandwidth Limit с помощью PowerShell:
Add-WindowsFeature -Name FS-SMBBW
Или можно установить его из графического Server Manager (Add Windows Feature -> SMB Bandwidth Limit).
Обычно данный модуль применяется для ограничения скорости для Hyper-V Live Migration. Например, следующая команда ограничить скорость миграции виртуальных машин до 100 Мбайт/сек.
Set-SmbBandwidthLimit -Category LiveMigration -BytesPerSecond 100MB
Вы также можете указать -Category Default для ограничения обычного трафика для передачи файлов по протоколу SMB.
Set-SmbBandwidthLimit -Category Default -BytesPerSecond 10MB
Компонент FS-SMBBW доступен начиная с Windows Server 2012 R2.
Ограничение скорости передачи файлов в Robocopy – ключ /IPG
При использовании robocopy вы также можете использовать специальный ключ, позволяющий ограничения скорости копирования/перемещения файлов по сети. Для этого используется ключ /ipg (Inter packet Gap). Этот ключ выставляет интервал между пакетами в миллисекундах и используется для снижения нагрузки на сеть при копировании по низкоскоростным каналам. Robocopy передает данные по сети блоками по 64 КБ, и таким образом, зная пропускную способность вашего канала, можно рассчитать нужное значение для /ipg , исходя из требований к ограничению скорости передачи.
Если вы не хотите углубляться в формулы, то можете использовать уже готовый калькулятор Robocopy IPG Calclator: http://www.zeda.nl/index.php/en/robocopyipgcalculator-en-2
Для копирования данных по медленным и нестабильным каналам также можно использовать протокол BITS (см. пример в статье Копирование больших файлов с помощью BITS и PowerShell). Этот протокол позволят динамически управлять скоростью передачи данных между двумя узлами в зависимости от занятости канала и поддерживает докачку.
Управление шейпингом трафика с помощью сторонних утилит
Из платных вариантов самым популярным решением для ограничения пропускной способности в Windows в зависимости от порта, приложения, назначения является программы NetLimiter, а из бесплатных TMeter Free.
Также можно отменить:
- Glasswire – также включается в себя файервол и сетевой мониторинг;
- NetBalancer – сетевой мониторинг и возможность настраивать правила для трафика;
- cFosSpeed – может задать приоритет трафика для определенных приложений;
- Net Peeker – как и Glasswire имеет функцию файервола и возможность задавать приоритеты для трафика.
С задачей ограничения скорости передачи данных по сети отлично справляются QoS политики Windows, поэтому если перед вами стоит такая задача, то политики QoS должны быть рассмотрены в первую очередь. К тому же как и любые политики, они могут быть настроены на уровне всего домена через консоль gpmc.msc.
Стороннее ПО более функционально и имеет графический интерфейс, но в большинстве случаев это платные программы.
Предыдущая статья Следующая статья
Источник: winitpro.ru