Ограничиваем скорость сетевой карты на Windows


Опубликовано 10.04.2019 19:05 | Автор: Admin

В данной статье рассматривается:
В данной статье рассмотрим один из вариантов по ограничению скорости (пропускную способность) сетевой карты в ОС Windows на основе неких условий.



Для реализации нашей задумки нам поможет QoS Packet Scheduler. Работы будем проводить на Windows Server 2012 R2

Кратко, что такое QoS (англ. quality of service «качество обслуживания») — технология предоставления различным классам трафика различных приоритетов в обслуживании, также этим термином в области компьютерных сетей называют вероятность того, что сеть связи соответствует заданному соглашению о трафике, или же, в ряде случаев, неформальное обозначение вероятности прохождения пакета между двумя точками сети.

В работе мы будем использовать PowerShell для настройки политики QoS. Более подробно об используемых командлетах и их параметрах можно ознакомиться Читать

Пройдемся коротко по командлетам PowerShell:

  • Создание новой политики QoS: New-NetQosPolicy -Name "WSUS" ...
  • Удаление созданной политики QoS: Remove-NetQosPolicy -Name "WSUS"
  • Изменение созданной политики QoS: Set-NetQosPolicy -Name "WSUS" …
  • Просмотр имеющихся политик QoS: 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 
Где:
  • Name "WSUS" - задает имя политики
  • IPDstPrefixMatchCondition "10.1.1.0/24" - указываем сеть клиентов (сеть получатель)
  • NetworkProfile Domain - для какого профиля сетевого окружения применяем. Если мы не укажем профиль, то политика будет распространяться на все профиля. Об этом я еще упомяну ниже
  • ThrottleRateActionBitsPerSecond 1MB - устанавливаем ограничения по скорости


Если ролей много, то мы можем расширить условия добавив, например, порт:


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
Где:
  • Name "WSUS 2" - задает имя политики
  • IPProtocolMatchCondition TCP" - указываем протокол
  • IPSrcPortMatchCondition 8530 - указываем порт источника трафика
  • IPDstPrefixMatchCondition "10.1.1.0/24" - указываем сеть клиентов (сеть получатель)
  • ThrottleRateActionBitsPerSecond 1MB - устанавливаем ограниченя по скорости

Еще примеры:

Ограничим скорость скачки файлов с шары сервера

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

А теперь посмотрим настройки в картинках и поэкспериментируем на Windows 10.

В качестве подопытного будем использовать программу iperf3.exe

Настройка через графический интерфейс.
Внимание! Создаваемые политики через графический интерфейс имею по умолчанию сетевой профиль Domain и не предоставляют нам возможности изменить это т.е. работать будет только если машина у нас в домене, а тестирование на этот раз мы проводим на домашнем компьютере.

Запускаем gpedit.msc (Редактор локальной групповой политики) и переходим, как показано на картинке

Редактор локальной групповой политики

Жмем правой кнопкой мыши на выделенном элементе, выбираем «Создать новую политику». Вносим изменения как на картинке, жмем далее и проходим мастер до конца.

Редактор локальной групповой политики Редактор локальной групповой политики Редактор локальной групповой политики Редактор локальной групповой политики Редактор локальной групповой политики

В данном примере мы урезали скорость для данной программы до 1Мбит/с и как мы знаем - это ограничение распространяется только на отдачу.

Проверяем

iperf3 проверка скорости

Как мы видим ничего у нас не работает, скорость не была ограничена

Запускаем оснастку PowerShell и видим, что политика у нас есть, но NetworkProfile нас имеет значение Domain.

PowerShell Qos

Теперь мы создадим такую же политику, но и с использованием PowerShell.

Запускаем оснастку PowerShell с правами администратора


New-NetQosPolicy -Name "iperf3 new" -AppPathNameMatchCondition "iperf3.exe" -ThrottleRateActionBitsPerSecond 1MB
PowerShell New-NetQosPolicy

Смотрим, что у нас есть.

PowerShell Get-NetQosPolicy

Т.к. мы не указывали NetworkProfile , то по умолчанию политика применяется теперь на все сетевые профиля.

Тестируем iperf3 QoS

Как видим, теперь все работает, но все же не так как нам хотелось т.к. скорость на прием у нас упала в разы.

Удаляем все что создали. И создаем политику заново но уже скорость урежем до 10Мбит/с

PowerShell Remove-NetQosPolicy PowerShell Get-NetQosPolicy
Проверяем iperf3 QoS

И теперь у нас все нормально. А в чем тут подвох догадайтесь сами.

А сейчас мы попробуем промаркировать (DSCP/TOS) наш трафик.

Создаем правило


New-NetQosPolicy -Name "iperf3 DSC" -AppPathNameMatchCondition "iperf3.exe" -DSCPAction 46
WiresharkPortable iperf3 QoS

Как видим и тут все у нас работает. А вот так же промаркировать icmp пакеты ping.exe у нас не получиться, а почему, вопрос остается открытым. И да у ping.exe есть ключ -v, но нужны танцы с бубном.


В данных статье мы рассмотрели лишь малую часть применения QoS т.к. тема очень обширна. Для желающих более детально ознакомиться о QoS рекомендую к прочтению


Метки
Windows PowerShell Сети QoS

Комментариев: 0

 126 |


Добавить комментарий:
Отправить