Назад | Перейти на главную страницу

Windows 10 pro как NAT между двумя интерфейсами (для маршрутизации трафика виртуальной машины через VPN-соединение на хосте)

У меня есть хост Windows 10 pro с виртуальными машинами, работающими в Hyper-V. Виртуальные машины находятся в частной локальной сети с хостом. Я хотел бы обеспечить подключение виртуальных машин к Интернету, и пусть трафик виртуальной машины проходит через VPN-соединение, настроенное на хосте. Конкретная программная VPN (импульсная безопасность) не создает интерфейс, который может быть "мостом" с vswitch.

Мои виртуальные машины Hyper-V находятся на 192.168.4.0/24, а мой хост Windows 10 имеет виртуальный интерфейс на 192.168.4.215/24, который я хотел бы использовать в качестве шлюза для трафика виртуальных машин. Я хотел бы использовать таблицы маршрутизации на хосте Windows для маршрутизации трафика от виртуальных машин на 192.168.4.0/24 для прохождения через интерфейс VPN, настроенный на хосте.

Обычно я обеспечиваю подключение виртуальных машин к Интернету, помещая их в локальную сеть, создавая виртуальный интерфейс для хоста в той же локальной сети, а затем соединяя виртуальный интерфейс с физическим интерфейсом (физическим или беспроводным). Однако в этом случае трафик виртуальной машины будет обходить программную VPN, настроенную на хосте Windows - я бы хотел, чтобы трафик виртуальной машины направлялся через VPN, так же, как маршрутизируется трафик от хост-приложений.

Когда я активирую VPN-соединение (импульсная защита), на хосте появляется новый виртуальный интерфейс по адресу 10.0.0.100/32, и маршрут по умолчанию автоматически добавляется в таблицу маршрутизации хоста, чтобы указать на 10.0.0.100 в качестве шлюза по умолчанию. . Это фактически заставляет весь внешний трафик, генерируемый хостом Windows и его настольными приложениями, проходить через интерфейс vpn.

Я хотел бы настроить хост для перенаправления / переадресации всего входящего IP-трафика с 192.168.4.0/24 на интерфейс VPN, возможно, через NAT. Обычно я соединяю интерфейсы, которые хочу соединить вместе, но этот конкретный адаптер vpn отказывается подключаться к чему-либо.

Есть ли способ добиться этого в win10 pro или мне нужен сервер Windows? Это раздражает еще и потому, что это конкретное программное обеспечение vpn плохо поддерживается в Linux.

Мне удалось заставить что-то работать в Windows 10, создав интерфейс HyperV NAT. Я считаю, что для этого вам понадобится windows 10 pro. Домашняя Win10 не имеет Hyper-V (пока).

Это сработало довольно хорошо:

https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/setup-nat-network

  1. Создайте интерфейс NAT с помощью PowerShell, следуя инструкциям по ссылке выше. По-видимому, существует ограничение в 1 такой интерфейс согласно документации, но на моем компьютере в настоящее время есть 2 активных интерфейса vNAT: один, который я создал сам, и один под названием DockerNAT, созданный Docker для Windows. На этом шаге вы получите новый vSwitch и назначите ему IP-адрес на хосте.
  2. В Hyper-V отредактируйте настройки виртуальной машины, чтобы добавить новый сетевой интерфейс, подключенный к интерфейсу коммутатора NAT, созданному на шаге 1.
  3. На виртуальной машине назначьте новому nic статический IP-адрес в этой подсети NAT (например, ip addr add dev ethX 192.168.0.100/24) и настройте шлюз по умолчанию как IP vSwitch, например (route add default gw 192.168.0.1 ethX)
  4. Добавьте любой сервер имен в /etc/resolv.conf (e.g. echo "nameserver 8.8.8.8" >> /etc/network/interfaces)

Эффект от использования интерфейса NAT заключается в том, что трафик, исходящий из любой виртуальной машины, использующей NAT vSwitch, будет замаскирован за IP-адресом шлюза (192.168.0.1 в моем примере) и будет перенаправлен внутри с использованием таблицы маршрутизации хоста Windows. Итак, когда я включаю VPN, это также перенаправит весь трафик Natted в VPN.

Есть много случаев, когда я хочу получить доступ к виртуальной машине напрямую с хоста, что затрудняет NAT (все будет позади 192.168.0.1). Вместо того, чтобы выполнять кучу динамической переадресации портов (что также возможно с помощью PowerShell), я просто создал другую внутреннюю сеть между хостом и виртуальной машиной, которая не является NAtted (например, 192.168.5.0/24).