Для реализации нашей задумки нам поможет QoS Packet Scheduler. Работы будем проводить на Windows Server 2012 R2
Кратко, что такое QoS (англ. quality of service «качество обслуживания») — технология предоставления различным классам трафика различных приоритетов в обслуживании, также этим термином в области компьютерных сетей называют вероятность того, что сеть связи соответствует заданному соглашению о трафике, или же, в ряде случаев, неформальное обозначение вероятности прохождения пакета между двумя точками сети.
В работе мы будем использовать PowerShell для настройки политики QoS. Более подробно об используемых командлетах и их параметрах можно ознакомиться Читать
New-NetQosPolicy -Name "WSUS" ...
Remove-NetQosPolicy -Name "WSUS"
Set-NetQosPolicy -Name "WSUS" …
Get-NetQosPolicy
И так у нас имеется WSUS сервер и множество клиентов (рабочих станций) находящихся на других площадках с крайне ограниченными каналами связи. Соответственно клиенты с появлением новых обновлений разом начинают их скачивать и тем самым забивают наш канал по полной. Одним из решений данной проблемы – это ограничить исходящий трафик для удаленных клиентов.
Внимание! Создаваемые политики могут применяться на пользователя или на локальную машину, при этом политика пользователя имеет приоритет. При работе через PowerShell мы будем создавать для локальной машины. Обратите внимание на параметр –NetworkProfile
– при создании политик надо правильно выбирать сетевой профиль иначе у вас ничего работать не будет.
Другие важные моменты при работе с политиками, прочтите обязательно:
Управление политики QoS и
Вопросы и ответы по политики QoS
Запускаем оснастку PowerShell с правами администратора
Ограничим исходящий трафик с сервера исходя из сети клиентовТ.к. у сервера всего одна роль, то данной командой мы ограничили весь исходящий трафик для указанной сети.
PS C:\Windows\system32> New-NetQosPolicy -Name "WSUS" -IPDstPrefixMatchCondition "10.1.1.0/24" -NetworkProfile Domain -ThrottleRateActionBitsPerSecond 1MB
Name : WSUS
Owner : Group Policy (Machine)
NetworkProfile : Domain
Precedence : 127
JobObject :
IPProtocol : Both
IPDstPrefix : 10.1.1.0/24
ThrottleRate : 1.049 MBits/sec
Где:
Если ролей много, то мы можем расширить условия добавив, например, порт:
PS C:\Windows\system32> New-NetQosPolicy –Name "WSUS 2" -IPProtocolMatchCondition TCP -IPSrcPortMatchCondition 8530 -IPDstPrefixMatchCondition "10.1.1.0/24" -ThrottleRateActionBitsPerSecond 1MB
Name : WSUS 2
Owner : Group Policy (Machine)
NetworkProfile : All
Precedence : 127
JobObject :
IPProtocol : TCP
IPSrcPortStart : 8530
IPSrcPortEnd : 8530
IPDstPrefix : 10.1.1.0/24
ThrottleRate : 1.049 MBits/sec
Где:
PS C:\Windows\system32> New-NetQosPolicy –Name "SMB" -SMB -ThrottleRateActionBitsPerSecond 1MB
Name : SMB
Owner : Group Policy (Machine)
NetworkProfile : All
Precedence : 127
Template : SMB
JobObject :
ThrottleRate : 1.049 MBits/sec
PS C:\WINDOWS\system32> New-NetQosPolicy -Name "FTP" -AppPathNameMatchCondition "ftp.exe" -ThrottleRateActionBitsPerSecond 1MB
Name : FTP
Owner : Group Policy (Machine)
NetworkProfile : All
Precedence : 127
AppPathName : ftp.exe
JobObject :
ThrottleRate : 1.049 MBits/sec
Get-NetQosPolicy
- список имеющихся политик QoS
PS C:\Windows\system32> Get-NetQosPolicy
Name : FTP
Owner : Group Policy (Machine)
NetworkProfile : All
Precedence : 127
AppPathName : ftp.exe
JobObject :
ThrottleRate : 1.049 MBits/sec
Name : SMB
Owner : Group Policy (Machine)
NetworkProfile : All
Precedence : 127
Template : SMB
JobObject :
ThrottleRate : 1.049 MBits/sec
Set-NetQosPolicy
- изменение уже существующей политики QoS
PS C:\Windows\system32> Set-NetQosPolicy -Name "FTP" -AppPathNameMatchCondition "ftp.exe" -ThrottleRateActionBitsPerSecond 5MB
Смотрим изменение
PS C:\Windows\system32> Get-NetQosPolicy
Name : FTP
Owner : Group Policy (Machine)
NetworkProfile : All
Precedence : 127
AppPathName : ftp.exe
JobObject :
ThrottleRate : 5.243 MBits/sec
Name : SMB
Owner : Group Policy (Machine)
NetworkProfile : All
Precedence : 127
Template : SMB
JobObject :
ThrottleRate : 1.049 MBits/sec
Remove-NetQosPolicy
- удаление существующих политик QoS
PS C:\Windows\system32> Remove-NetQosPolicy -Name "smb"
Подтверждение
Вы действительно хотите выполнить это действие?
Remove-NetQosPolicy -Name SMB -Store GPO:localhost
[Y] Да - Y [A] Да для всех - A [N] Нет - N [L] Нет для всех - L [S] Приостановить - S [?] Справка (значением по умолчанию является "Y"): y
Смотрим изменения
PS C:\Windows\system32> Get-NetQosPolicy
Name : FTP
Owner : Group Policy (Machine)
NetworkProfile : All
Precedence : 127
AppPathName : ftp.exe
JobObject :
ThrottleRate : 5.243 MBits/sec
В качестве подопытного будем использовать программу iperf3.exe
Запускаем gpedit.msc (Редактор локальной групповой политики) и переходим, как показано на картинке
Жмем правой кнопкой мыши на выделенном элементе, выбираем «Создать новую политику». Вносим изменения как на картинке, жмем далее и проходим мастер до конца.
В данном примере мы урезали скорость для данной программы до 1Мбит/с и как мы знаем - это ограничение распространяется только на отдачу.
Проверяем
Как мы видим ничего у нас не работает, скорость не была ограничена
Запускаем оснастку PowerShell и видим, что политика у нас есть, но NetworkProfile нас имеет значение Domain.
Теперь мы создадим такую же политику, но и с использованием PowerShell.
Запускаем оснастку PowerShell с правами администратора
New-NetQosPolicy -Name "iperf3 new" -AppPathNameMatchCondition "iperf3.exe" -ThrottleRateActionBitsPerSecond 1MB
Смотрим, что у нас есть.
Т.к. мы не указывали NetworkProfile , то по умолчанию политика применяется теперь на все сетевые профиля.
ТестируемКак видим, теперь все работает, но все же не так как нам хотелось т.к. скорость на прием у нас упала в разы.
Удаляем все что создали. И создаем политику заново но уже скорость урежем до 10Мбит/с
И теперь у нас все нормально. А в чем тут подвох догадайтесь сами.
А сейчас мы попробуем промаркировать (DSCP/TOS) наш трафик.
Создаем правило
New-NetQosPolicy -Name "iperf3 DSC" -AppPathNameMatchCondition "iperf3.exe" -DSCPAction 46
Как видим и тут все у нас работает. А вот так же промаркировать icmp пакеты ping.exe у нас не получиться, а почему, вопрос остается открытым. И да у ping.exe есть ключ -v, но нужны танцы с бубном.
В данных статье мы рассмотрели лишь малую часть применения QoS т.к. тема очень обширна. Для желающих более детально ознакомиться о QoS рекомендую к прочтению