VPN у Windows забирає весь трафік? Видаліть його маршрут за замовчуванням
Зніміть прапорець «Використовувати шлюз за замовчуванням у віддаленій мережі», видаліть нав'язаний маршрут за замовчуванням, поверніть префікси офісу, а потім перевірте DNS та IPv6.
Ви підключаєтеся до офісного VPN, і кожна сторінка в браузері починає йти через цю мережу: файловий сервер швидкий, усе інше повільне, відфільтроване або зникло. Клієнт не поводиться неправильно; профіль попросив повний тунель. Перемикач, який це зупиняє, — один прапорець у діалозі, який сучасна програма «Параметри» не показує, і шлюз знову має слово при кожному підключенні. Цей посібник іде в тому порядку, який інтерфейс Windows справді пропонує, а потім розбирає перевірки, які все ще не проходять, коли таблиця маршрутів виглядає правильною.
Почніть із властивостей адаптера, а не з «Параметрів»
Програма «Параметри» перелічує профіль у розділі «Мережа та Інтернет», потім VPN, але показує лише загальні параметри. Рішення про шлюз за замовчуванням живе на адаптері. Відкрийте класичний список адаптерів за допомогою Win+R і ncpa.cpl, клацніть правою кнопкою на підключенні VPN, виберіть «Властивості», виберіть «Протокол Інтернету версії 4», знову «Властивості», а потім «Додатково». Зніміть прапорець Використовувати шлюз за замовчуванням у віддаленій мережі і підтвердьте вихід з усіх трьох діалогів.
Перепідключіться перед перевіркою, бо прапорець застосовується під час встановлення тунелю, а наявний сеанс зберігає побудовану таблицю. Якщо адаптер відсутній, поки клієнт від'єднаний, підключіться один раз і знову відкрийте вікно. Клієнт постачальника, який встановлює адаптер TAP або Wintun без сторінки властивостей IPv4, взагалі не має цього діалогу; для них те саме рішення — параметр роздільного тунелювання у власних налаштуваннях клієнта, а прапорець адаптера — неправильне місце для пошуку.
Та сама зміна з PowerShell
Для профілю, створеного в сховищі VPN Windows, параметр можна задати скриптом, що і потрібно, якщо машину часто перезбирають:
Set-VpnConnection -Name "Office" -SplitTunneling $true
Get-VpnConnection -Name "Office" | Select-Object Name,SplitTunneling
Цей командлет досягає лише профілів у цьому сховищі. Підключення, додане стороннім клієнтом, не з'явиться, і команда завершується помилкою імені, яка читається як друкарська помилка. Зверніть увагу і на те, чого перемикач не робить: він не дає клієнту встановити маршрут за замовчуванням, але не видаляє маршрути, які шлюз нав'язує під час підключення, тому наступний розділ у багатьох мережах усе ще потрібен.
Коли шлюз знову нав'язує маршрут за замовчуванням
Спочатку прочитайте таблицю. Два записи за замовчуванням із різними метриками означають, що зміна профілю спрацювала і нав'язаний маршрут усе одно її замінив:
route print -4
Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Sort-Object RouteMetric
Get-NetAdapter | Select-Object Name,ifIndex
Видаліть маршрут за замовчуванням, що належить тунелю, і залиште фізичний. Використовуйте індекс інтерфейсу з третьої команди, а не псевдонім адаптера, бо скрипти, які передають псевдонім, ламаються, щойно змінюється відображуване ім'я:
Remove-NetRoute -DestinationPrefix 0.0.0.0/0 -InterfaceIndex 21 -Confirm:$false
route delete 0.0.0.0 10.8.0.1
Видалення забирає із собою й офіс, тому поверніть корпоративні префікси через шлюз тунелю. Це той рядок, який люди пропускають, і саме тому після успішної зміни роздільного тунелювання лунає «VPN перестав працювати»:
route add 10.0.0.0 mask 255.0.0.0 10.8.0.1 metric 5 if 21
Ніщо з цього не переживає перепідключення, і це чесна поведінка, а не помилка: адаптер перестворюється, і клієнт знову застосовує те, про що домовилися профіль і шлюз. Якщо маршрут за замовчуванням повертається щоразу, шлюз налаштований відмовляти роздільному тунелюванню і продовжуватиме його нав'язувати або скине сеанс. Це політика оператора мережі, і запит належить туди, а не локальному скрипту, який бореться з цим один раз за підключення.
Перевірте DNS, IPv6 і метрики ще раз після одного перепідключення
Видалення маршруту за замовчуванням IPv4 нічого не доводить про іншу родину або про розв'язання імен. Тунель може нести IPv6, поки маршрут за замовчуванням IPv4 залишається локальним, а нав'язаний список резолверів може підтримувати внутрішні імена в роботі, поки запити, які його використовують, ідуть іншим шляхом. Перевірте всі три, перш ніж вважати справу зробленою:
Get-NetRoute -DestinationPrefix ::/0
Get-DnsClientServerAddress -InterfaceAlias "Office"
Get-DnsClientNrptPolicy
Якщо стан повертається при кожному підключенні, перенесіть команди в дію під час підключення замість ручного редагування таблиці: заплановане завдання, що запускається подією підключення, або власне налаштування роздільного тунелювання клієнта, якщо воно є. Тримайте індекс інтерфейсу в змінній і шукайте його під час виконання, бо він може змінитися, коли адаптери додають або вилучають.
Вирішіть, від чого ви відмовилися
Локальний інтернет-трафік більше не перевіряють і не фільтрують в офісі, і все, що публікується лише через тунель, тепер потребує власного маршруту. Деякі організації вважають роздільне тунелювання порушенням політики, тож підтвердьте це перед зміною керованого пристрою; нав'язаний маршрут за замовчуванням іноді є механізмом примусу, а не випадковістю. Документація Set-VpnConnection перелічує параметр роздільного тунелювання і типи профілів, до яких він застосовується.
Потім перевірте у фіксованому порядку: кому належить маршрут за замовчуванням, звичайний перегляд, один корпоративний хост за адресою, одне внутрішнє ім'я і ті самі чотири після одного перепідключення. Якщо перегляд працює, а корпоративний хост не відкривається, бракує маршруту префікса, а не видаленого маршруту за замовчуванням, і це значно дешевше виправити, ніж перезбирати профіль.