VPN-шлюз Windows: три задачи, три владельца
Завершение туннелей, передача между сетями и перезапись адресов — это отдельные решения. Назначьте владельца каждому, прежде чем добавлять ещё один уровень NAT.
Три функции объединяются всякий раз, когда кто-то говорит «сервер VPN»: завершение шифрованного туннеля, перемещение пакетов между сетями и, при необходимости, перезапись адресов. В Windows они живут в разных частях стека, даже если одна машина выполняет все три. У каждой свои входные данные и свой режим отказа, и каждую можно передать другому продукту. Разделить их на бумаге — самый дешёвый способ сохранить понятность небольшого развёртывания.
Читаемый проект называет владельца каждого потока, а не описывает машину как роль.
Завершить, передать, преобразовать
RRAS обслуживает туннель в нативном случае Windows: аутентифицирует пользователя, выдаёт адрес из пула и решает, какие назначения разрешены. Другой продукт VPN может вместо этого владеть слушателем и виртуальным адаптером, оставив Windows передачу расшифрованных пакетов. Документация Microsoft по Remote Access разделяет роли VPN, «сеть — сеть» и маршрутизации, и установка роли маршрутизации не создаёт второй идентичности VPN. Добавление ещё одного VPN-приложения тоже не передаёт его адаптер всем существующим функциям шлюза.
Преобразование адресов — третья и самая необязательная задача. Она идёт после передачи и меняет адрес источника, который видит удалённая сеть. Нужна ли она вам, зависит от того, что сеть назначения примет в качестве источника, а не от того, что машину называют VPN-шлюзом.
Кому принадлежат адаптер и пул
Когда несколько продуктов делят хост, четырём вещам нужен по одному владельцу: порты прослушивания, время жизни адаптера, пул клиентских адресов и маршруты. Адаптер — самый неудобный случай, потому что служба VPN может создавать его динамически и уничтожать при отключении. Отношение к этому интерфейсу как к постоянно именованной сетевой карте и правила, написанные против его имени, работают до следующего переподключения. Используйте поддерживаемую продуктом точку интеграции, а не жёстко задавайте имя интерфейса.
Пул адресов — второе столкновение. Два продукта, выдающие перекрывающиеся диапазоны, создают маршрутизацию, которая выглядит правильной и ничего не доставляет. Держите пулы в том же документе, что и маршруты, чтобы изменение в одном было видно относительно другого.
Сохранить источник или перезаписать его
Сохранение адреса источника клиента поддерживает видимость по пользователям: журналы, квоты и правила брандмауэра могут отличать одного пользователя от другого. Цена — целевой локальной сети нужен обратный маршрут к шлюзу, и кто-то должен его поддерживать. Перезапись источника с помощью NAT убирает это требование и убирает вместе с ним видимость. Выбирайте осознанно и запишите, какую информацию скрывает перезапись.
Доступ к частной сети, выход в интернет и соединения, завершающиеся на самом шлюзе, — это три разных пути. Им не всем нужен одинаковый подход.
Опишите поток одним предложением
Одно предложение должно описывать проект: каких клиентов допускает эта служба, какие ресурсы даёт эта политика передачи и как обратный путь завершает поток. Если предложению для правдивости нужен второй уровень NAT, это обычно признак того, что предыдущие части не были решены. Хост также является общей границей отказа и доверия, поэтому изменение маршрутизации может затронуть и доступ пользователей, и администрирование. Для последнего сохраните независимый путь восстановления.
Держите перечень ролей рядом с конфигурацией: какой продукт завершает, какой передаёт, какой преобразует и кто может менять каждый из них. Именно этот список делает следующее изменение проверяемым.
Когда предложение становится неясным, добавление ещё одного уровня преобразования редко его проясняет. Удаление одного обычно проясняет.