Метрика маршруту VPN змінилася після підключення: що це означає
Менша метрика лише розв'язує нічию між однаково конкретними маршрутами. Прочитайте правило політики, префікс і host-маршрут кінцевої точки, перш ніж змінювати будь-який номер маршруту VPN.
Ви підключаєте VPN, запускаєте route print, і маршрут за замовчуванням тепер несе значно меншу метрику, ніж раніше. Природний висновок — VPN зайняв маршрут за замовчуванням, бо його номер менший. Іноді так і сталося. Часто метрика зовсім не вирішальний чинник, і її правка нічого не змінює, бо вибір було зроблено раніше — довжиною префікса або правилом політики.
Симптом реальний: трафік, який раніше виходив через адаптер Wi-Fi, тепер виходить через тунель, або навпаки. Метрика — один вхід у пошук, що виконується у фіксованому порядку, і саме цей порядок треба прочитати, перш ніж чіпати число.
З чим насправді змагається число
Перше порівняння — конкретність, а не перевага. Маршрут для 10.20.0.0/16 перемагає 10.0.0.0/8, і обидва перемагають 0.0.0.0/0, що б не казали їхні метрики. VPN, який встановлює маршрут за замовчуванням із найнижчою метрикою на машині, все одно програє будь-якому конкретнішому маршруту, що відповідає призначенню, включно з host-маршрутом, який клієнт ставить для свого сервера.
Тому зниження метрики маршруту за замовчуванням не може загнати безпосередньо підключену підмережу в тунель. Якщо ви хочете цю підмережу всередині VPN, додайте маршрут для префікса або виберіть таблицю тунелю правилом політики. Метрика — не той важіль для цього завдання.
| Check in this order | Question | Where you read it |
|---|---|---|
| 1. Policy and table | Which routing table does this traffic use? | ip rule, client profile |
| 2. Prefix length | Which matching route is most specific? | route print, ip route |
| 3. Metric | Which of the equally specific routes is preferred? | route print, ip route |
| 4. Interface state | Is the chosen next hop reachable? | adapter status, link state |
Linux вибирає таблицю раніше за метрику
У Linux ядро спершу звертається до бази політик. ip rule перелічує правила й таблиці, які вони вибирають, а ip route get 203.0.113.10 повідомляє таблицю, маршрут і адресу джерела, які ядро реально використало б для цього призначення. Метрика всередині таблиці 100 ніколи не змагається з маршрутом у головній таблиці, бо правило вибрало таблицю раніше, ніж порівнювалася хоч одна метрика.
Тому маршрут може виглядати правильним у ip route show table all і все одно не нести трафік. Прочитайте правило, що збіглося, потім таблицю, яку воно вибрало, потім порівняйте маршрути в ній. Якщо вибрано не ту таблицю, жодна правка метрики в іншій таблиці не допоможе.
Windows поєднує дві метрики
У Windows немає бази політик за замовчуванням, але він поєднує метрику маршруту з метрикою інтерфейсу, а автоматична метрика інтерфейсу може змінюватися зі швидкістю каналу та станом адаптера. Тому той самий маршрут може поводитися інакше після появи док-станції або віртуального адаптера. Find-NetRoute -RemoteIPAddress 203.0.113.10 повідомляє вибрану адресу джерела, наступний перехід і інтерфейс, що ближче до реального рішення, ніж сира таблиця.
Читайте значення маршруту й інтерфейсу разом. Підвищення метрики інтерфейсу може зсунути трафік без зміни жодного запису маршруту, а клієнт VPN, який володіє своїми маршрутами, перевстановить їх під час повторного підключення і відкине вашу правку.
Тримайте кінцеву точку тунелю поза тунелем
Кожному тунелю потрібен шлях до свого сервера, який не йде через тунель. Клієнти встановлюють host-маршрут для кінцевої точки через фізичний шлюз, і цей маршрут має залишатися конкретнішим за маршрут за замовчуванням, який додає клієнт. Видаліть його або дозвольте тунелю виграти пошук для цієї адреси, і інкапсульовані пакети спробують увійти в тунель, який мають побудувати. З'єднання падає або зациклюється.
Перевіряйте цей host-маршрут до і після будь-якої правки метрики: він має вказувати на фізичний наступний перехід і пережити повторне підключення. Якщо клієнт ним володіє, змінюйте профіль або керовану конфігурацію, а не значення часу виконання, яке буде перезаписано.
Перевірте обидві родини адрес і контекст застосунку
IPv4 і IPv6 — окремі рішення з окремими таблицями. VPN може нести IPv4, поки IPv6 продовжує використовувати локальний маршрутизатор, і правка метрики в одній родині нічого не каже про іншу. Перевірте обидві, потім перевірте контекст застосунку. Процес, прив'язаний до інтерфейсу, простір імен контейнера або VPN для окремого застосунку можуть бачити іншу таблицю, ніж ваша оболонка.
Перевіряйте інструментом, який повідомляє рішення для реального призначення, а не повним списком таблиці. Якщо вибраний маршрут — той, що задуманий дизайном, зупиніться. Метрика, яка не є найменшим числом на екрані, не є дефектом, і примушування зробити її найменшою може зламати шлях кінцевої точки, від якого залежить тунель.