Чому маршрут до вузла /32 зберігає доступність кінцевої точки VPN
Маршрут до вузла вибирає одну адресу, а не підмережу. Він може підтримувати доступність кінцевої точки тунелю або закріпити один ресурс, але застаріває зі зміною адрес.
Після підключення ви відкриваєте таблицю маршрутизації і бачите єдину адресу, спрямовану через тунель, тоді як підмережа навколо неї йде далі на локальний шлюз. Цей запис — маршрут до вузла: одна адреса, що збігається з префіксом із самих одиниць. Це важливо, бо рішення маршрутизації використовують найдовший збіжний префікс, тому /32 може перекрити /24 або маршрут за замовчуванням, не змінюючи жодного з них. Чи це ретельний виняток, чи майбутній збій, залежить від того, яку адресу він називає і хто його підтримує.
Одна адреса, один запис у таблиці
Маршрут до вузла IPv4 несе префікс /32, а маршрут до вузла IPv6 — /128, тобто запис може збігтися рівно з однією адресою призначення. Більше нічого в таблиці не рухається: покривна підмережа і маршрут за замовчуванням залишаються там, де були. Вузький запис виграє для цієї адреси тому, що його префікс довший, а не тому, що його додали пізніше.
Ця властивість робить маршрут до вузла добрим винятком і поганою звичкою. Два записи /32, що називають вхідні двері сервісу, не покривають його другої адреси, його адреси IPv6 чи адреси, на яку він переїде наступного місяця. Таблиця, повна непояснених записів з однією адресою, зазвичай означає, що хтось постійно латав навколо рішення про підмережу замість того, щоб його ухвалити. Спершу прочитайте довжину префікса, а потім запитайте, від чого запис має захищати.
Читайте запис від клієнта назовні
Почніть із машини, де є проблема, бо та сама адреса може маршрутизуватися по-різному на ноутбуці й на шлюзі перед ним. Запитайте ядро, який шлях воно вибере для точної адреси, яку використовує застосунок, замість того щоб читати таблицю згори. Відповідь включає інтерфейс і наступний крок, які разом і є рішенням.
ip route get 203.0.113.25
ip -6 route get 2001:db8:4::25
ip route show | grep -F 203.0.113.25
Find-NetRoute -RemoteIPAddress 203.0.113.25
Повторіть запит для родини адрес, яку застосунок справді вибирає, адже клієнт може віддавати перевагу IPv6 і тихо обходити виняток IPv4. Порівняйте результат до і після підняття тунелю та збережіть обидва виводи. Це порівняння показує, чи клієнт додав запис під час підключення, чи він уже був там.
Постійний запис і запис часу виконання збоять по-різному. Запис часу виконання зникає разом із сеансом, а постійний переживає перезавантаження і далі надсилає трафік на шлюз, якого більше немає.
Виняток кінцевої точки і пастка рекурсії
Клієнти VPN зазвичай встановлюють маршрут до вузла на зовнішню адресу сервера через початковий шлюз, перш ніж перенаправити маршрут за замовчуванням. Без цього запису зашифровані пакети надсилалися б у тунель, який вони намагаються побудувати, і з'єднання зациклювалося б до вичерпання часу.
Пастка з'являється, коли прийняті підмережі тунелю випадково містять цю адресу кінцевої точки, або коли другий профіль пізніше додає ширший маршрут. Тоді запис кінцевої точки програє довшому префіксу, і сеанс руйнується щойно починає пропускати трафік. Записати адресу кінцевої точки поряд із прийнятими підмережами — найдешевший спосіб помітити конфлікт раніше за користувачів. Це також пояснює, чому той самий профіль працює з однієї мережі й не працює з іншої.
Перевірте шлях, який застосунок справді використовує
Успішний ping на ім'я вузла — слабкий доказ, коли застосунок підключається до іншої адреси або іншої родини. Перевірте точне поєднання адреси, родини, порту й інтерфейсу з машини, яка запускає клієнт.
ip route get 203.0.113.25
sudo nft list ruleset | grep -A 4 'chain output'
curl -sS --max-time 8 -o /dev/null -w '%{remote_ip}
' https://app.example.net
Якщо шлях неправильний, вирішіть, чи потрібна мережа, чи одна адреса, перш ніж щось редагувати. Вимога однієї адреси виправдовує маршрут до вузла з коментарем і власником; сервісу зі змінними адресами потрібна маршрутизація на основі домену або чесне рішення про підмережу.
Видаляйте записи, що більше не відповідають реальному призначенню, і позначайте ті, які залишаєте. Непояснений /32 через три місяці не відрізнити від помилки, і наступна людина видалить його, не знаючи, що від нього залежало.