Задать вопрос
  • Как направить траффик разных приложений по разным шлюзам?

    @Belkogoth
    Есть еще способ через QoS, но чутка костыльный.
    Предисловие: у меня дома и на работе стоят микротики. Для доступа на забугорные закрытые сайты у меня поднят Mikrotik CHR на виртуальном сервере (VPS) в другой стране, а микроты дома и на работе подключены к нему по SSTP и гоняют туда траффик на списки адресов, указываемые вручную, я это сделал чтобы не ковыряться с VPN на каждом личном устройстве, то есть подключаюсь дома\на работе по вайфаю\проводу к роутеру, а если я вне дома - по мобильному интернету, к примеру, по Wireguard до самого VPN, и все нужные сайты прозрачно работают.
    Потребовалось гонять весь траффик через VPN для отдельного приложения. На андроиде это делается просто, Wireguard, да и многие другие VPN-программы позволяют заворачивать траффик отдельных программ, но не в винде, там такого попросту нету (хотя может и есть, но скрыто или через цепочку приемов, я не разбирался еще).
    И вот для этого можно использовать костыль - маркировать DSCP метками пакеты, которые отправляет приложение, это позволяет делать групповая политика QoS. Причем как отдельное приложение по указанному пути, так и любое с указанным именем. Но для реализации, сразу отмечу, снаружи должен быть роутер, который позволяет настраивать правила обработки таких пакетов, к примеру, Mikrotik, Openwrt-роутер, Zyxel, они тоже умеют. и т.п.
    1. Включаем всю эту бадягу в реестре:<br />
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters, меняем (если нет - создаем) параметр DWORD с именем DisableUserTOSSetting и значением 0.
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Qos. Если нет раздела QoS - создаем его,
    внутри создаем строковый параметр с именем Do not use NLA и значением 1. перезагружаемся. Разумеется, должны быть включены в свойствах сетевого адаптера службы типа QoS и т.п., на современных машинах и на современной винде обычно там все стоит по умолчанию.

    2. Создаем групповую политику на основе QoS
    Открываем gpedit.msc (или ищем в пуске изменение групповой политики), там открываем Политика "Локальный компьютер"---Конфигурация компьютера---Конфигурация Windows, нажимаем правой кнопкой на пункт "QoS на основе политики.", выбираем создание новой политики. В окне заполняем поле "Имя политики" (как удобно, например, по имени программы и задаваемому DSCР), указываем значение DSCP. Лучше начинать "с конца" - 63.
    Жмем "Далее", в след окне выбираем "только приложениям с именем исполняемого файла". Можно указать конкретный путь к программе, можно просто указать имя приложения, например, opera.exe. В случае имени винда будет назначать DSCP метку всем процессам с этим именем, то есть обновления программы не повлияют.
    В следующих окнах можно оставлять как есть, но в последнем окне в пункте "Выберите протокол, в которм применяется политика QoS" выбираем TCP и UDP. Все, жмем "готово".

    Теперь самая соль. В десятке и 11-й (как в других хз) это правило обычно не работает (проверено Wireshark и Torch на микротике), потому что система по какой-то балде решает по умолчанию применять правило к доменному сетевому профилю. Ща исправим.
    Правим политику через Powershell
    Открываем Powershell от имени администратора, набираем
    NetQosPolicy.
    Должно выдать наше правило с его именем и параметрами, что-то вроде такого:
    Name : Opera DSCP
    Owner : Group Policy (Machine)
    NetworkProfile : domain
    Precedence : 127
    AppPathName : opera.exe
    JobObject :
    IPProtocol : Both
    DSCPValue : 63
    Запоминаем имя в строке "Name"Теперь вводим:
    set-NetQosPolicy "Opera DSCP" -NetworkProfile "All". Если не выдал ничего красным, а просто молча проглотил команду - все хорошо, теперь IP-пакеты приложения будут отправляться в маршрут по умолчанию на роутер с DSCP-меткой.

    Собсно, всё, теперь траффик приложения будет метиться DSCP-меткой, можно создать несколько правил, которые будут разные приложения метить одной, либо разными метками. На роутере, или через что там ПК выходит в интернет, можно создать правило, отправляющее все пакеты с этими метками по нужному маршруту. Лично у меня на микротике просто в Mangle создано правило:
    /ip/firewall/mangle/ add chain=prerouting in-interface=(порт, куда воткнут ПК, либо вместо этого src-address=адрес пк\ноутбука с Windows в сети) dscp=63 action=route dst-address=(внутренний адрес VPN сервера в той подсети, которую сервер выдал роутеру) comment="комментарий"

    Я вот хз, может в самом Windows через политики как-то можно этот траффик отправлять по какому-либо маршруту так же?*) Если знает кто - поделитесь.
    Ответ написан
    Комментировать