Вопрос или проблема
У меня есть хост-машина на Windows, к которой я могу подключить два Ethernet-адаптера. В настоящее время я использую один для хоста и один для гостя (Ubuntu) в Virtualbox. На госте у меня работает клиент Fortinet VPN без каких-либо проблем (через режим Bridge Adapter), а на хосте работает соединение с клиентом OpenVPN.
Оба VPN функционируют независимо на отдельных сетевых картах. Но теперь я хотел бы подключиться по ssh с хост-машины (Windows) к сети VPN гостевой машины (Ubuntu).
Существует ли способ маршрутизировать трафик ssh с хост-машины Windows в сеть VPN гостевой Linux?
Самый простой метод — воспользоваться функцией “прыжкового хоста” в OpenSSH:
ssh -J virtualbox_address real_address
Если вы определите прыжковый хост через файл ssh_config
(та же локация как для Windows, так и для Linux), он автоматически будет работать с VSCode, Git и другим программным обеспечением, использующим ssh
внутренне.
~/.ssh/config ($env:USERPROFILE\.ssh\config)
Host real_address ProxyJump virtualbox_address
Пока вы находитесь в этом файле, вы также можете использовать тот же файл ssh_config, чтобы задать имя пользователя по умолчанию для SSH и другие параметры, если хотите.
~/.ssh/config (%USERPROFILE%\.ssh\config)
Host webserver ProxyJump vbox HostName myserv123.blah.example.com Port 22222 User root Host vbox # Переадресация портов "NAT network" HostName 127.0.0.1 Port 23456
…тогда команда ssh webserver
автоматически будет использовать правильное имя узла и все остальное.
У Windows на самом деле нет гибкой “политики маршрутизации”, чтобы маршрутизировать только SSH-трафик на уровне системы (возможно, это возможно через WFP, но ничего подобного не так просто доступно), и в то же время я предполагаю, что различные клиентские приложения ‘корпоративных’ VPN также используют WFP для предотвращения бокового трафика, так что, если вы сможете настроить сам OpenSSH для проксирования, это будет, на мой взгляд, самый легкий вариант.
Ответ или решение
Настройка SSH для доступа к VPN на Ubuntu внутри VirtualBox с Windows как хоста
В данной статье мы обсудим, как организовать совместное использование соединения VPN для вашего гостевого виртуального устройства Ubuntu в VirtualBox так, чтобы вы могли свободно подключаться к нему с хостовой машины Windows по протоколу SSH. Особенно это актуально, учитывая, что у вас уже настраиваются два разных соединения VPN: один для Windows, а другой для Ubuntu.
1. Зачем это нужно?
Использование виртуальных машин и VPN может создавать определенные сложности при настройке сетевых соединений. Вы не единственные, кто сталкивается с этой проблемой, так как многие профессионалы в ИТ-сфере хотят оптимизировать свои рабочие процессы и избегать задержек при доступе к виртуальным серверам. Ваш требуемый сценарий — подключение от хоста к гостю для проведения различных операций разработки, например, через Visual Studio Code.
2. Описание конфигурации
Вы работаете на хост-машине с Windows и используете VirtualBox для запуска Ubuntu как гостя. Вы применяете сетевые адаптеры в режиме Bridge, что позволяет вашему гостю и хосту иметь свои собственные IP-адреса в одной сети. При этом у каждого устройства есть свой собственный VPN, работающий на отдельных сетевых адаптерах — Fortinet на Ubuntu и OpenVPN на Windows.
3. Установка SSH-туннелирования
Для реализации возможности SSH-доступа к VPN вашей гостевой машины, используйте функциональность "jump host" OpenSSH. Это позволит проксировать SSH-трафик через вашу хост-машину Windows к Ubuntu. Настройка будет выглядеть следующим образом:
-
Настройка файла
ssh_config
.Вам нужно создать или отредактировать файл конфигурации SSH, который по умолчанию находится по следующему пути:
- Для Windows —
%USERPROFILE%\.ssh\config
- Для Linux —
~/.ssh/config
Добавьте туда следующие строки:
Host real_address ProxyJump vbox Host vbox HostName 127.0.0.1 Port 23456
В этом примере
real_address
— это реальный адрес удаленного сервера, к которому требуется подключение, а23456
— это локальный порт, на который вы перенаправите SSH-трафик. Убедитесь, что соответствующие порты открыты и доступны на вашей машине. - Для Windows —
-
Применение настроек.
После того как вы настроите конфигурацию SSH, проведите тестовое подключение из командной строки Windows:
ssh real_address
Это должно успешно осуществить подключение через прокси.
4. Интеграция с VSCode
Visual Studio Code предоставляет встроенную поддержку SSH, что позволяет вам легко разворачивать и управлять удаленными проектами. После того как вы правильно настроите файл конфигурации SSH, вы сможете использовать VSCode для подключения к вашему Ubuntu с логином, просто выбрав подключение:
- Откройте "Remote – SSH" в меню VSCode.
- В списке подключений выберите
real_address
.
5. Заключение
В результате настройки jump host в SSH вы сможете seamlessly подключаться к вашему VPN на Ubuntu из Windows. Это решение позволит значительно упростить рабочие процессы и устранить сложности, возникающие при работе с несколькими VPN. Надеюсь, эти инструкции направят вас на верный путь к эффективному использованию вашей рабочей среды.
Если у вас возникли дополнительные вопросы, не стесняйтесь задавать их!