Kill switch у Windows без додаткового програмного забезпечення: профілі чи маршрути?
Профілі брандмауера йдуть за категорією мережі, маршрути — за адаптером. Порівняйте обидва підходи, а потім перевірте аварійний випадок, коли тунель зник, а значок бреше.
Клієнт помирає посеред завантаження, і значок у лотку зникає. Передача продовжується через домашнє з'єднання. Саме ця послідовність є причиною існування kill switch, і Windows може наблизитися до нього без другого продукту.
Варто знати два методи. Вони відмовляють у різних місцях, і жоден не є повною відповіддю.
Метод перший: дозволити програмі лише в одному профілі
Брандмауер Windows обмежує правила профілями Domain, Private і Public. Хитрість у тому, щоб дати тунельному адаптеру одну категорію, а фізичному — іншу. Потім ви пишете вихідне правило, яке дозволяє захищену програму в профілі тунелю й блокує її будь-де інде. Брандмауер читає категорію, а не ім'я адаптера.
Спочатку задайте VPN-з'єднанню профіль Private, а фізичній мережі — Public. Потім додайте правило блокування для програми, яке діє для небажаних профілів. Після цього підтвердьте призначення за допомогою Get-NetConnectionProfile, бо правило йде саме за цим призначенням.
Get-NetConnectionProfile | Select-Object Name, InterfaceAlias, NetworkCategory
New-NetFirewallRule -DisplayName 'Block browser off VPN' -Direction Outbound `
-Program 'C:\Program Files\Mozilla Firefox\firefox.exe' -Action Block -Profile Public
New-NetFirewallRule -DisplayName 'Allow browser on VPN' -Direction Outbound `
-Program 'C:\Program Files\Mozilla Firefox\firefox.exe' -Action Allow -Profile Private
Слабкість структурна. Правило профілю йде за категорією, тому коли Windows перекласифікує готельну мережу, блокування може перестати діяти. У списку правил при цьому нічого не змінюється.
Метод другий: видалити фізичний маршрут за замовчуванням
Підхід через маршрути грубіший і набагато простіший для аудиту. Запишіть фізичний шлюз, дайте VPN встановити власний маршрут за замовчуванням із меншою метрикою, а потім видаліть фізичний маршрут за замовчуванням. Після цього ніщо інше не зможе нести трафік.
route print -4
route delete 0.0.0.0 mask 0.0.0.0 192.168.50.1
route print -4 | findstr /c:"0.0.0.0"
Коли клієнт помирає, маршрут VPN зникає разом зі своїм адаптером. Машина йде в офлайн замість витоку, і саме це має виробляти kill switch.
Дві деталі вирішують, чи проживе це тиждень. DHCP повертає шлюз щоразу, коли зв'язок тремтить. Фізичний адаптер зі статичною адресою уникає цього сюрпризу. Адреса самого сервера VPN теж має залишатися доступною. Без цього шляху до хоста клієнт ніколи не зможе підключитися знову після обриву, що запустив блокування.
Метод третій: без шлюзу, один постійний маршрут до хоста
Третій варіант починається з очищення шлюзу в налаштуваннях адаптера. Потім його замінює єдиний постійний маршрут до кінцевої точки VPN. Після цього машина може говорити із сервером і більше ні з чим, доки тунель не підніметься.
route -p add 198.51.100.44 mask 255.255.255.255 192.168.50.1 metric 1
route print -4 | findstr 198.51.100.44
Відновлення шлюзу повертає звичайний інтернет, що робить це чистим вимикачем. Він не залежить від скрипту, який стежить за подіями інтерфейсу. Йому також байдуже, як класифікується мережа.
Ціна — повна ізоляція, доки тунель не працює. Оновлення зупиняються, а разом із ними і те саме завантаження, яке спричинило цю вправу. На робочому ноутбуці це часто правильно, а на особистій машині це рішення, яке треба ухвалювати свідомо.
Чому значок глобуса нічого не доводить
Windows повідомляє про доступність через перевірку проти кінцевої точки Microsoft. Ця перевірка нічого не каже про ваш тунель. Підключений тунель може сидіти за глобусом, який повідомляє про відсутність інтернету, а мертвий може показувати здорове з'єднання.
Перевірте, убивши процес клієнта, а потім спробуйте досягти публічної адреси за номером. Запит імені може бути відповідений із кешу, тому ні значок, ні відповідь DNS не є доказом.
Що записати після справжнього обриву
Проведіть тест як послідовність, а не як одну перевірку. Убийте процес замість від'єднання, потім спробуйте числову адресу в обох родинах. Після цього відновіть клієнт і підтвердьте, що він досі досягає свого сервера через збережений маршрут.
taskkill /IM openvpn-gui.exe /F
ping -4 198.51.100.44
ping -6 2606:4700:4700::1111
route print -4 | findstr /c:"0.0.0.0"
Повторіть послідовність після сну, після зміни Wi-Fi і після переходу з кабелю на бездротове з'єднання. Саме на цих переходах відмовляють і метод профілю, і поведінка DHCP. Правило, яке тримається на столі, не обов'язково тримається в готелі.
Запишіть крок скасування поруч із кожним правилом і маршрутом. Microsoft документує створення вихідних правил у своєму довіднику з правил брандмауера Windows, і це краще джерело, ніж посібник лише зі скриншотами.