Задать вопрос
  • Как заблокировать домен/программу так, что б запуск ВПН отменял эту блокировку?

    @mrAsh4r
    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*" чтобы увидеть правила.
    Написано
  • Как заблокировать домен/программу так, что б запуск ВПН отменял эту блокировку?

    @mrAsh4r
    И кстати уже отвечали, тебе реально нужен KillSwitch. Типа "механизм для супер анонимусов, чтоб не палить реальный айпи адрес, если вдруг ВПН/прокси ляжет. Чисто фича для хакеров". Реализуется где угодно и как угодно.
    Ещё из вариантов с оверинжиниргом поднять виртуалку/контейнер на котором будет висеть условный OpenWrt, pfSense, opnsense и прочие роутеры, настроить в нём подключение через твой прокси/ВПН с правилами, таблицей маршрутизации и бла бла бла (гпт поможет).
    А есть ещё более жёсткий вариант, покупка либо отдельного роутера с гибкой настройкой (mikrotik, keenetic + кастомные прошивки), либо orangepi с двумя ethernet. Один на вход твой интернет, второй на выход твой комп. Тогда это будет миникоробка, выступающая хардверным прокси/ВПН/туннелем с встроенным killswitch, тогда не нужно будет париться с настройками винды, с её приколом по автоматическому поиску шлюза (чем она жёстко грешит и у меня раз в месяц полностью отваливается интернет на компе).

    Есть ещё бомж вариант, насколько он рабочий не знаю, но это правка hosts на компе, где ты к доменам прописываешь свой прокси. Плюс его в том что не нужно городить свой днс в виде условного pi-hole (который я встречаю в каждом вопросе на Хабре)
    имхо
    (люди забудьте вы про этот pi-hole, есть способы проще и лучше чем этот кал)

    Насчёт hosts возможно нужно будет поднять какой нибудь прокси роутер в виде squid, nginx, haproxy (честно не уверен, но так обходят блокировки чатагпт через dns, аля comss; правда не знаю как оно работает)
    Написано