TAP передаёт кадры Ethernet операционной системе, что даёт больше возможностей, чем нужно большинству проектов удалённого доступа, и меньше, чем мост. Ядро может адресовать его, маршрутизировать через него и защищать межсетевым экраном, не присоединяя его ни к одному физическому сегменту. Эту схему стоит понять в первую очередь: изолированный виртуальный сегмент Ethernet, сервер которого действует как маршрутизатор в сторону настоящей локальной сети. Он даёт поведение второго уровня внутри туннеля и обычную IP-пересылку снаружи, а это два разных обещания. Остальное — сборка, маршрут, обратный путь и откат.

Постройте изолированный сегмент

В Linux интерфейс принимает три команды: создайте его, поднимите его, дайте ему адрес внутри задуманного сегмента. Выберите префикс, который не пересекается с офисной локальной сетью, и запишите его, потому что пересечение незаметно, пока не ответит хост, которого не должно быть.

ip tuntap add dev tap0 mode tap
ip link set tap0 up
ip addr add 10.77.0.1/24 dev tap0

Ничто здесь не требует моста, и ничто не мешает добавить его позже. Документация ядра по TUN/TAP описывает сам интерфейс; принадлежность к мосту и политика пересылки — это отдельные решения, которые вы принимаете потом.

Маршрутизируйте через границу

Включите пересылку, разрешите два префикса в цепочке пересылки и добавьте маршрут к офисному префиксу, указав маршрутизатор локальной сети следующим переходом. Затем сторона VPN отправляет офисный трафик серверу как своему шлюзу, а сервер пересылает эти пакеты как он сам, а не как мост. Интерфейс TAP с отключённой пересылкой — это сегмент, который отвечает локально и ничего за собой не достигает, что и есть обычное незавершённое состояние. Затем проверьте счётчики интерфейса с обеих сторон, потому что растущий счётчик приёма при неизменном счётчике отправки на стороне локальной сети означает потерю в цепочке пересылки, а не плохой маршрут.

Запишите маршрут и правило межсетевого экрана как одно изменение, потому что каждое по отдельности создаёт состояние, которое со стороны клиента выглядит как сбой маршрутизации.

Определите обратный путь

Либо маршрутизатор локальной сети выучивает обратный маршрут к префиксу VPN, либо сервер транслирует адреса источника на выходе. Трансляция делает обратный путь тривиальным и уничтожает идентичность источника, поэтому журналы назначения будут показывать адрес сервера для каждого клиента за ним. Маршрутизируемый префикс сохраняет идентичность и требует изменения на оборудовании, которым вы, возможно, не управляете.

Выбирайте осознанно, а не по тому, что быстрее набрать. Один маршрутизируемый префикс обычно чище трансляции, а трансляция обычно лучше, чем обучать неуправляемый маршрутизатор новому префиксу ради одной лаборатории.

Сохраняйте область широковещания осознанной

Внутри виртуального сегмента DHCP, обнаружение и объявление соседей ведут себя как на коммутаторе, потому что это одно звено. За маршрутизируемой границей они так не делают, поэтому офисному DHCP и обнаружению служб нужен явный проект, а не предположение, что TAP их подразумевает. Тип интерфейса не является ретранслятором для служб, которые живут в другом месте.

Вот честная причина вообще выбирать TAP: чему-то в виртуальном сегменте нужно локальное для звена поведение. Если ничего в нём не нуждается, устройство TUN с маршрутизируемым префиксом меньше, и объяснять при поломке меньше.

Проверьте, затем напишите откат

С клиента VPN пропингуйте маршрутизатор локальной сети, пропингуйте хост и откройте одну важную службу по TCP. Затем проверьте счётчики и цепочку пересылки, потому что потеря по политике издалека выглядит точно как отсутствующий маршрут. Откат — это обратное сборке, и он должен быть в записи об изменениях до начала: удалите маршрут, удалите адрес, удалите интерфейс.

Если требование действительно состоит в одном сегменте Ethernet на две площадки, мост — честный ответ и другой проект с другим радиусом последствий. Если требование — доступность, изолированный сегмент с маршрутизируемым внешним каналом справляется с меньшим числом пояснений позже.

Похожие статьи