Корпоративний VPN усередині WireGuard: який рівень іде першим?
Два клієнти на одній машині працюють лише тоді, коли зовнішній тунель несе власне з'єднання внутрішнього клієнта, а метрики обирають правильний інтерфейс для кожного префікса.
Є дві обґрунтовані причини вкладати тунелі один в одний на ноутбуці розробника. Або корпоративний клієнт має виглядати так, ніби приходить з певної країни, або дві приватні мережі мають бути доступними одночасно. В обох випадках зовнішній тунель має нести власне з'єднання внутрішнього клієнта.
Запуск двох клієнтів у будь-якому порядку цього не дає. Це робить маршрутизація.
Порівняйте два можливі порядки
Виберіть зовнішнім рівнем той тунель, кінцева точка якого доступна з публічного інтернету. Внутрішній рівень — це тунель, сервер якого відповідає лише через цей вихід. У Windows практичний поділ такий: WireGuard ззовні, корпоративний клієнт усередині. Вирішальний фактор — контроль.
Офіційний клієнт WireGuard застосовує повний файл конфігурації, включно з маршрутами та DNS. Комерційні корпоративні клієнти зазвичай приховують і те, і інше. Якщо поставити прихований клієнт ззовні, доведеться здогадуватися про шлях під ним.
Зворотний порядок не неможливий. Просто про нього важче міркувати, бо зовнішній клієнт переписує маршрути за розкладом, якого ви ніколи не бачите.
Нехай AllowedIPs називає лише корпоративний діапазон
AllowedIPs перелічує призначення, які WireGuard спрямовує в тунель. Для вкладення йому потрібні лише адреса внутрішнього сервера й корпоративні префікси. Усе інше залишається в локальній мережі, включно з принтерами та гіпервізором. Це розділений тунель за задумом, і він повністю уникає проблеми виключення.
Зовнішньому рівню з повним тунелем потрібно 0.0.0.0/0 мінус локальні діапазони. Формат не може виразити виключення, тому доповнення доводиться обчислювати й вставляти вручну.
[Interface]
PrivateKey = ...
Address = 10.99.4.2/32
[Peer]
PublicKey = ...
Endpoint = 198.51.100.44:51820
AllowedIPs = 198.51.100.44/32, 10.20.0.0/16, 10.21.0.0/16
Коли внутрішній клієнт не встановлює власні маршрути, перелічіть корпоративні префікси самі. Префікс, пропущений у цьому рядку, — це призначення, яке зовнішній тунель ніколи не несе. Застаріла копія списку гірша за її відсутність, бо вона все ще виглядає правильною.
Порядок, метрики й другий адаптер
Спочатку підключіть зовнішній тунель, потім запустіть корпоративний клієнт. Тоді його з'єднання з кінцевою точкою виходить через WireGuard, а не через локальний шлюз. Дайте корпоративному інтерфейсу меншу метрику, щоб його префікси перемагали для адрес, якими він володіє.
# which interface currently claims the corporate prefix?
Find-NetRoute -RemoteIPAddress 10.20.10.5 | Select-Object -First 1
# prefer the corporate interface for its own prefixes
Set-NetIPInterface -InterfaceAlias 'Corp VPN' -InterfaceMetric 3
Set-NetIPInterface -InterfaceAlias 'wg-personal' -InterfaceMetric 40
wg show interfaces
Метрики — це крок, який люди пропускають. Без порядку для перекриваного префікса перемагає маршрут, встановлений останнім. Це змінюється між завантаженнями, тому проблема виглядає періодичною.
Клієнти на базі OpenVPN 2.6 додають власну пастку. Коли адаптер розвантаження каналу даних уже зайнятий, другий екземпляр просто відмовляється запускатися. Додавання disable-dco у профіль повертає до старішого шляху TAP, і тоді обидва працюють пліч-о-пліч.
Де ламається вкладений шлях
Відключення зовнішнього тунелю вбиває внутрішній. Повторне підключення лише внутрішнього клієнта часто відправляє його прямо в інтернет і тихо знімає вкладення. Перевіряйте послідовність з нуля щоразу, починаючи з зупинених обох тунелів.
Очікуйте менший корисний MTU. Кожен рівень додає накладні витрати, тому початкова пара близько 1420 і 1400 — гарна відправна точка. Передача, яка зависає на великих пакетах, поки малі запити проходять, — звичайна ознака. Корпоративна політика — інша межа, бо клієнт, який вимагає керованого пристрою, може вважати вкладений шлях порушенням.
Коли обидва кінці — фіксовані мережі, тунель сайт-сайт між шлюзами усуває проблему порядку, а не керує нею. На одному ноутбуці два тунелі співіснують лише тоді, коли кожен має свій інтерфейс і правило, що вибирає призначення за префіксом.