Привет, всех с Новым Годом! Праздники праздниками, но пора уже входить в рабочий поток и разгрести локальный техдолг. На этот раз решаем задачку с тремя известными: Windows + WSL + VirtualBox.



Суть такая. Понадобилось мне вхреначить на локальную машину VirtualBox с убунтой, для тестирования фичи, которую писал в этом посте. Фича не хотела заводиться на виртуальных серверах Селектела, хотя и должна была. Потребовалось убедиться, что дело не в моих кривых руках. Ладно, лирика…



Короче цепануться к убунте из wsl по ssh к VirtualBox из коробки не получилось. Да и понятно, подсети разные. Пришлось временно воспользоваться powershell и через ssh проверить гипотезу с cgroup. Винда видит подсеть виртуалки и с этим проблем нет. Проверил, забыл.



Но вопрос остался открытым: как блять/дь малой кровью из WSL (с ubuntu 22.04) подключиться напрямую к виртуалке c ubuntu 22.04 по ssh? И не задрачиваться с таблицами роутинга? Рассказываю!



Чтобы не лезть в маршрутизацию, пришлось воспользоваться стандартным функционалом проброса портов в самом VirtualBox. Жопа конечно знатно сгорела, но желаемого добился.



В общем, пиздуем в настройки VirtualBox: Сеть, Адаптер1. В нем по умолчанию включен NAT. Открываем пункт - Дополнительно, видим кнопку: Проброс портов. Заходим и начинаем заниматься очередной хуитой магией.



Сначала роутим на виндовую машину:



Имя: ssh_win

Протокол: tcp

Адрес хоста: 127.0.0.1

Порт хоста: 2222

Адрес гостя: пусто

Порт гостя: 22




Так, теперь в powershell я могу цепануться к виртуалке так:



ssh -p2222 [email protected]




Оно и ежу понятно, теперь усложняем задачу:



Имя: ssh_win_host

Протокол: tcp

Адрес хоста: 192.168.31.100

Порт хоста: 22

Адрес гостя: пусто

Порт гостя: 22




Этой хернёй разрешаем подключение из powershell по такому принципу:



ssh [email protected]




Ага, айпишник 192.168.31.100 это адрес, который выдал роутер моей виндовой машине. Как видим уже используется 22 порт. Посмотреть айпишник можно командой ipconfig в терминале powershell. Да простят меня адепты линукса.



Ну и теперь финальный штрих, прикручиваем WSL:



Имя: ssh_wsl

Протокол: tcp

Адрес хоста: 172.21.20.123

Порт хоста: 2222

Адрес гостя: пусто

Порт гостя: 22




Айпишник 172.21.20.123 выдан убунте в WSL, смотрим его через ifconfig. А дальше заходим в сам WSL и подключаемся к VirtualBox как к обычному серверу:



ssh [email protected]




То есть цепляемся в виндовой/хостовой машине на 22 порт, который уже проброшен. Закидываем public ключи, делаем алиасы для быстрого коннекта. Всё! Дело в шляпе! Мы подключились из WSL (ubuntu) по ssh к виртуальной машине в VirtualBox.



Есть нюанс, у меня дополнительно поднят VPN через wireguard, там еще один фактор с подсетью. Поэтому я добавил еще мусора:



Имя: ssh_vpn

Протокол: tcp

Адрес хоста: 10.66.64.55

Порт хоста: 22

Адрес гостя: пусто

Порт гостя: 22




Теперь при активации VPN, подключение к VirtualBox через WSL будет выглядеть так:



ssh [email protected]




Логично, адрес виндовой/хостовой машины меняется с 192.168.31.100 на 10.66.64.55. Но это детали. Еще есть тема, что при включении/выключении VPN вся это тягомотина с пробросом портов подхватывается не сразу. Имей это ввиду.



Я себе сделал 2 алиаса в wsl ~/.zshrc:



alias box1="ssh [email protected]"

alias box2="ssh [email protected]"




Алиасы подключения без ВПН и с ВПН. Ну ты и так про это знаешь. Картинки с настройками залил сюда (открываются нативно в телеграфе), заскриншотил свои поделки. Визуальнее всегда понятнее. Но у меня там дэцл хосты и айпишники по другому обзываются. Не обессудь.



Если знаешь более красивое решение этой задачи с пробросом, сердечно ждем в комментариях.



Ладно, самое время включить режим «День-Тюлень». Еще раз всех с НГ. Увидимся!



tags: #linux #wsl #windows #network



💩 @bashdays