mrAsh4r, есть ещё более грамотное, лаконичное решение через средства винды. Ты там говорил у тебя нет нового адаптера, а потом неожиданно для себя открыл что он есть. Так вот. Решение от нейроночки, сам не проверял, но в теории работает:
PowerShell скрипт
# Запускать с админских прав
# Настрой:
$ifaceNamePart = "Neko" # часть имени интерфейса, который создаёт Nekobox. Поменяй при необходимости
$steamPaths = @(
"C:\Program Files (x86)\Steam\steam.exe",
"C:\Program Files (x86)\Steam\steamservice.exe",
"C:\Program Files (x86)\Steam\steamwebhelper.exe"
)
# Поиск интерфейса
$iface = Get-NetAdapter | Where-Object { $_.Name -match $ifaceNamePart -and $_.Status -eq "Up" } | Select-Object -First 1
if (-not $iface) {
Write-Host "Интерфейс с '$ifaceNamePart' не найден / не поднят. Скрипт всё равно создаст правила, но Allow для интерфейса не будет работать." -ForegroundColor Yellow
$ifaceAlias = $null
} else {
$ifaceAlias = $iface.Name
Write-Host "Найден интерфейс: $ifaceAlias (ifIndex $($iface.ifIndex))" -ForegroundColor Green
}
# Создать Allow-правила только для интерфейса (IPv4+IPv6)
foreach ($p in $steamPaths) {
# Allow через VPN интерфейс (если интерфейс найден)
if ($ifaceAlias) {
# имя правила
$allowName = "Allow $([IO.Path]::GetFileName($p)) via $ifaceAlias"
# удаляем старое если есть
Get-NetFirewallRule -DisplayName $allowName -ErrorAction SilentlyContinue | Remove-NetFirewallRule -Confirm:$false -ErrorAction SilentlyContinue
New-NetFirewallRule -DisplayName $allowName `
-Direction Outbound `
-Program $p `
-Action Allow `
-InterfaceAlias $ifaceAlias `
-Profile Any `
-Enabled True `
-EdgeTraversalPolicy Block `
-AddressFamily Any `
-ErrorAction Stop
Write-Host "Добавлено Allow правило: $allowName"
}
# Block правило глобально (резервный дубль) — сначала удаляем старое, потом создаём
$blockName = "Block $([IO.Path]::GetFileName($p)) Everywhere"
Get-NetFirewallRule -DisplayName $blockName -ErrorAction SilentlyContinue | Remove-NetFirewallRule -Confirm:$false -ErrorAction SilentlyContinue
New-NetFirewallRule -DisplayName $blockName `
-Direction Outbound `
-Program $p `
-Action Block `
-Profile Any `
-Enabled True `
-EdgeTraversalPolicy Block `
-AddressFamily Any `
-ErrorAction Stop
Write-Host "Добавлено Block правило: $blockName"
}
Write-Host "`nГотово. Проверь порядок правил и протестируй при выключенном/включенном TUN." -ForegroundColor Cyan
Важные нюансы и подводные камни — читай и не матерись потом
Имя процесса/путь. Windows Firewall привязывается к полному пути к exe. Если Steam обновит путь или запускается из другого места — правило не сработает. Проверь точные пути.
Сервисы и системные процессы. steamservice.exe часто запускается как сервис от SYSTEM — правило по Program всё равно работает, но можно дополнительно создать правило по -Service если нужно.
Дочерние процессы. Некоторые компоненты могут запускаться другим exe (например helper/renderer). Добавь их в список. Иначе они уйдут в обход.
Права администратора. Пользователь с правами администратора может удалить правила и обойти систему. Для стопроцентной защиты нужен контроль прав доступа пользователя.
Защита от DNS / IPv6 утечек. Правило по процессу перекрывает трафик на любом интерфейсе, поэтому утекать по IPv6 не должно — если ты добавил AddressFamily Any. Но лучше проверить отдельно (IPv6-адреса у Steam).
VPN-клиент не использует интерфейс? Некоторые «прокси» не создают видимый интерфейс и проксируют через локальный socks — в таком случае InterfaceAlias не поможет. Тогда Proxifier/SocksCap — проще.
Порядок правил. Allow на интерфейсе + Block глобально — логика: если трафик проходит через интерфейс, Allow даёт доступ; если интерфейса нет — Allow не применяется и Block режет трафик. Это нормально.
Тестирование. После применения: выключи TUN и проверь, что Steam не выходит в сеть. Включи TUN — проверь, что Steam подключается. Делай Get-NetFirewallRule | Where-Object DisplayName -like "*Steam*" чтобы увидеть правила.
И кстати уже отвечали, тебе реально нужен KillSwitch. Типа "механизм для супер анонимусов, чтоб не палить реальный айпи адрес, если вдруг ВПН/прокси ляжет. Чисто фича для хакеров". Реализуется где угодно и как угодно.
Ещё из вариантов с оверинжиниргом поднять виртуалку/контейнер на котором будет висеть условный OpenWrt, pfSense, opnsense и прочие роутеры, настроить в нём подключение через твой прокси/ВПН с правилами, таблицей маршрутизации и бла бла бла (гпт поможет).
А есть ещё более жёсткий вариант, покупка либо отдельного роутера с гибкой настройкой (mikrotik, keenetic + кастомные прошивки), либо orangepi с двумя ethernet. Один на вход твой интернет, второй на выход твой комп. Тогда это будет миникоробка, выступающая хардверным прокси/ВПН/туннелем с встроенным killswitch, тогда не нужно будет париться с настройками винды, с её приколом по автоматическому поиску шлюза (чем она жёстко грешит и у меня раз в месяц полностью отваливается интернет на компе).
Есть ещё бомж вариант, насколько он рабочий не знаю, но это правка hosts на компе, где ты к доменам прописываешь свой прокси. Плюс его в том что не нужно городить свой днс в виде условного pi-hole (который я встречаю в каждом вопросе на Хабре)
имхо
(люди забудьте вы про этот pi-hole, есть способы проще и лучше чем этот кал)
Насчёт hosts возможно нужно будет поднять какой нибудь прокси роутер в виде squid, nginx, haproxy (честно не уверен, но так обходят блокировки чатагпт через dns, аля comss; правда не знаю как оно работает)
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
PowerShell скрипт
Важные нюансы и подводные камни — читай и не матерись потом