После обновления до 24H2 на основной машине и переустановки системы на рабочем ноутбуке обнаружилась неприятная особенность, что программы для обхода замедления общеизвестного списка ресурсов, в которых используется режим системного прокси, отказываются работать. В логах по нулям (буквально). Гуглить проблему сложно, поэтому решил написать дополнительный пост здесь.
Симптомы:
- NekoRay/NekoBox — нет подключения, почти сразу появляется всплывающее окно в духе «This action is taking a long time, try reconnecting», соединение не устанавливается
- v2RayN — подключение якобы устанавливается, соединение не работает. В статус-баре снизу «The delay: -1 ms, none», трафик не гоняется
- Hiddify — подключение якобы работает (статус «Connected»), фактически соединение не установлено, трафик никуда не идёт.
TUN во всех случаях продолжает работать, условные WARP или Amnezia WG функционируют. На Reddit пишут, что этим, в числе прочего, могут быть обусловлены рандомные ошибки NS_BINDING_ABORTED
в Firefox, которым так и не нашли объяснения в соседних темах на форуме.
В процессе диагностики перепробовал буквально всё — сброс сетевых настроек (тут я был близко), манипуляции с DNS, отключение Zapret, изменение настроек внутри самих программ и много чего ещё. Ничего из вышеперечисленного не дало результата, так как виноватым, внезапно, оказался алгоритм контроля перегрузки TCP (TCP Congestion Control Provider). Issue на Гитхабе v2RayN.
При каждой переустановке системы я всегда менял его на BBR2, так как он объективно лучше стандартного CUBIC в условиях высокой нагруженности сети. Каких-либо несовместимостей это не вызывало, поэтому на первый взгляд взаимосвязь с неработоспособностью системных прокси была неочевидна. Например, на 23H2 такое поведение не наблюдается.
Поменять алгоритм можно так:
- Открываем PowerShell от админа.
- Вводим:
netsh int tcp set supplemental template=internet congestionprovider=CUBIC
netsh int tcp set supplemental template=internetcustom congestionprovider=CUBIC
netsh int tcp set supplemental template=Compat congestionprovider=NewReno
netsh int tcp set supplemental template=Datacenter congestionprovider=CUBIC
netsh int tcp set supplemental template=Datacentercustom congestionprovider=CUBIC
- Проверяем настройки:
Get-NetTCPSetting | Select SettingName, CongestionProvider
При желании CUBIC можно заменить на CTCP. Он, насколько известно, чуть лучше показывает себя в процессах, чувствительных к задержкам.
UPD1: незначительное изменение формулировок, удаление фактически неверной информации.