VPN каже «підключено», але нічого не маршрутизується: два місця, де шукати
Вибір маршруту й реєстрація в резолвері старіють по-різному. Спершу запитайте ядро, потім резолвер за кожним інтерфейсом, а потім перевірте батьківське з'єднання.
Тунель може повідомляти про підключення, хоча до нього нічого не доходить, і ці два факти живуть у різних місцях. Перше — таблиця маршрутів, яка все ще може надсилати пакети на пристрій, яким ніхто не володіє. Друге — резолвер, який усе ще може вказувати сервер на інтерфейсі, якого вже немає. Мережева зміна не пошкодила профіль, вона осиротила стан, що належав попередньому з'єднанню, і виправлення залежить від того, на що саме з двох ви дивитеся.
Спершу запитайте ядро, який пристрій воно вибере
Список маршрутів показує, що існує; пошук маршруту показує, що станеться. Запитайте про публічну адресу й прочитайте ім'я пристрою у відповіді, бо саме це поле вирішує, чи потрапить пакет кудись корисне. Коли відповідь називає тунельний пристрій, ядро передасть йому пакети, навіть якщо за цим інтерфейсом уже не працює клієнтський процес. Коли відповідь називає фізичний адаптер, а клієнт твердить, що підключений, тунель піднятий і просто не є вибраним шляхом.
Другий випадок звичайний після того, як кабель замінив бездротову мережу, і він виглядає як зламаний VPN.
ip route show default
ip route get 203.0.113.9Тепер прочитайте записи за замовчуванням, бо маршрут, доданий попереднім базовим з'єднанням, може пережити зміну інтерфейсу й стояти перед новим. Маршрут за замовчуванням через вимкнений пристрій гірший за відсутність маршруту за замовчуванням, бо ядро все одно віддає йому перевагу. Зверніть увагу на метрику поруч із кожним записом: цей порядок пояснює перевагу швидше, ніж імена інтерфейсів.
Потім читайте резолвер за інтерфейсами, а не за файлом
Розв'язання імен несе власний стан і власну застарілість. Резолвер, що перелічує DNS-сервери за інтерфейсами, зберігає сервери тунельного інтерфейсу, який вимкнено, але ще зареєстровано, і кожен запит потім чекає на сервер, який не відповість. Симптом — мережа, що здається мертвою, тоді як таблиця маршрутів виглядає бездоганно.
Дивіться на стан за інтерфейсами, а не на файл, бо в багатьох дистрибутивах цей файл є символічним посиланням у резолвер, і його правка або нічого не робить, або швидко перезаписується. Подивіться, який інтерфейс володіє якими серверами і яким доменом пошуку, а потім запитайте, чи тунельний інтерфейс узагалі ще має бути зареєстрований. Якщо не має, вимкніть з'єднання, якому він належить, замість того щоб правити згенерований стан руками. Ім'я, що розв'язується, тоді як пошук маршруту надсилає пакети в інше місце, — це третя й окрема несправність.
resolvectl status
resolvectl query app.internal.exampleЯкщо адреси розв'язуються, а з'єднання не працюють, резолвер гаразд, а маршрут ні. Якщо адреси не розв'язуються зовсім, починати треба тут.
Як застарілий маршрут переживає зміну
Клієнт не володіє мережею сам. На хості з NetworkManager профіль VPN активується поверх базового з'єднання, і параметри з'єднання дозволяють цій базі назвати VPN, який має за нею йти. Коли база змінюється, бо інший профіль стає кращим, тунель переходить на нову базу або залишається без неї.
Профіль VPN сам себе не піднімає, тому зв'язка важить значно більше, ніж власне налаштування автопідключення профілю.
Прочитайте список активних і позначте, яка база піднята, перш ніж торкатися тунелю. Якщо база в списку, а тунелю немає, маршрут відсутній, а не застарілий, і виправлення — активація. Якщо активація тунелю скаржиться, що джерельного з'єднання немає, база, з якою він був пов'язаний, зникла, тож спершу підніміть її або полагодьте зв'язку, а не повторюйте спробу з тунелем. Повторна спроба з профілем, у якого немає батька, щоразу дає ту саму помилку, і це корисний сигнал, а не завада.
nmcli device status
nmcli connection show --active
nmcli connection up office-vpnВідрізніть застарілий стан від відсутнього батька
Три стани пояснюють майже кожен звіт, і кожному потрібне своє виправлення. Маршрут за замовчуванням через пристрій, що ще існує, але більше не несе тунель, — це застарілий стан; його знімають видаленням запису або перезапуском відповідального профілю. Тунельний пристрій, чий клієнтський процес зник, — це збій очищення, тому уваги заслуговує шлях відключення, а не таблиця маршрутів. Повна відсутність тунельного пристрою означає, що немає батька або зв'язки, і таблиця маршрутів тут ні до чого.
Перезавантаження приховує, який із трьох станів у вас був, і саме тому воно здається виправленням.
Після виправлення запитайте в ядра одну публічну й одну внутрішню адресу, а потім запитайте внутрішнє ім'я. Якщо адреса працює, а ім'я ні, ви знайшли проблему області домену в резолвері, а не проблему маршрутизації. Запишіть, який стан ви знайшли, бо наступна мережева зміна відтворить той, який ви залишили в спокої.