От переводчика: Когда-нибудь я подключу к одной сети VPN свою нынешнюю машину в Беларуси и машину в России. Пробовал на зуб ZeroTier, чтобы соединить их вообще, но сервис мне не зашёл, тем более, тогда речь не шла о том, чтобы легко подружить подсистему Linux внутри Windows с любой другой машиной извне. Здесь речь именно об этом. Поэтому, думаю, этот перевод окажется полезным не только мне. Tailscale – это сеть VPN, которая не нуждается в конфигурировании. Она работает поверх других сетей, «выравнивает» сети и позволяет пользователям и сервисам упростить коммуникацию и сделать её безопаснее. Я подробно писал о том, как подключиться к WSL2 внутри Windows 10 по SSH, с другого компьютера. В инструкции по ссылке не только множество шагов, но и несколько способов подключения. Кроме того, повторю то, что я говорил в статье об SSH: если вы активный разработчик и хотите поделиться сервисами и сайтами, над которыми работаете, со своими коллегами и соавторами, то придётся разобраться с нетривиально большим объёмом настроек, управления и обслуживания. Другими словами: Не было бы проще, если бы все были в одной сети и одной подсети? Поясню. WSL первой версии делит сетевой стек с Windows 10, поэтому «машина» WSL и Windows рассматривается как одна и та же. Выполняемый на порте 5000 сервис, – сервис Windows или работающее в Linux под WSL1 приложение  – выполняется на одной и той же машине. Однако в WSL2 Linux находится за хостом Windows. Хотя WSL2 упрощает доступ к http://localhost:5000 через прозрачную переадресацию портов, ваш Linux на WSL на самом деле не является одноранговым узлом в той же сети, что и другие ваши устройства. Инструмент вроде Tailscale решает проблему, то есть как будто выравнивает сеть. Надо сказать, что из-за некоторых особенностей WSL2 при работе с ней можно допустить несколько ошибок. Я расскажу, что делал, чтобы всё заработало у меня. Установите WSL2 – следуйте этой инструкции. Установите дистрибутив Linux. Я работал с Ubuntu 20.04. Погрузитесь в процесс, создайте пользователя и т.д. Установите Windows Terminal – работа с командной строкой станет приятнее. Установите Tailscale – я руководствовался инструкцией для Ubuntu 20.04.  Сейчас нельзя запустить Tailscale на WSL2 через IPv6, поэтому я отключил протокол: Здесь мы запускаем демон. На WSL2 пока нет systemd, но если ваша версия сборки Windows 10 выше 21286, можно выполнять команды при запуске WSL. Лично я прописал всё в bash. Также у нас нет возможности выполнять интерактивный вход в систему WSL, поэтому, чтобы поднять Tailscale внутри WSL, вам нужно сгенерировать ключ предварительной аутентификации и аутентифицировать одну машину. Пропишите сгенерированный ключ с команде запуска, как это сделал я: Мне нравится держать Tailscale открытым в другой вкладке терминала или в другой панели вкладок, так, чтобы смотреть логи. Это интересно и информативно! В панели администрирования машин Tailscale вы увидите все машины в сети, как показано ниже. Обратите внимание: scottha-proto в списке – это Windows, а scottha-proto-1 – это Linux. Первая машина – это мой хост, вторая – экземпляр Linux WSL2, они теперь в одной сети! У меня получилось пригласить пользователя вне своей сети при помощи новой функции совместного использования узлов. Мой друг Гленн не работает в моей организации, но так же, как и я, пользуется OneDrive или DropBox, чтобы создать ссылку или по созданной ссылке получить доступ к одной сущности системы, а не ко всей системе. Я могу сделать то же самое в смысле Tailscale: Можно пригласить Гленна, чтобы он подключился к работающему в WSL2 сервису прямо из дома. Я установил .NET 5 в Ubuntu на WSL2, создал папку и запустил команду dotnet new web, чтобы сгенерировать микросервисный Hello World. Когда я запускаю сервис – .NET, Node, или какой-то ещё, – важно, чтобы он прослушивался в сети Tailscale. Linux в WSL2 подключена к нескольким сетям. По умолчанию мои системы разработчика прослушиваются только локальным хостом; прослушивать сервисы во всех сетях (включая Tailscale) средствами .NET можно по-разному, я запустил прослушивание так: Итак, я подключился к IP-адресу в Tailscale, который связан с моим экземпляром WSL2, и постучался к моему сервису внутри Linux: Что теперь можно сделать? Мы с Гленном находимся в сети Tailscale, кроме того, вся сеть единообразная, а значит, Гленн может легко достучаться до моего сервиса! На скрине ниже я нахожусь в Teams: мой рабочий показывается внизу, а рабочий стол Гленна – наверху. Окей, у нас есть безопасная, единообразная сеть и полная свобода! Могу ли я превратить мой экземпляр WSL2 в систему удалённой разработки для Гленна? Конечно, почему бы и нет? Для ясности: это просто разговоры, эксперимент, но в нём что-то есть. Например, кроссплатформенность: можно работать с Mac, Windows, WSL2 и так далее. Этим разделом можно руководствоваться, чтобы поднять виртуальную машину на любом облачном или обычном хостере, установить Tailscale и больше не думать о перенаправлении портов, пользуясь поднятой машиной как песочницей. Да, можно работать с WSL локально, но установка на хосте – это весело, так появляется много классных вариантов. Начнём. В WSL2 я запускаю сервис ssh. Можно было поделиться открытыми ключами и войти в систему с их помощью, но здесь залогинюсь по имени пользователя и отредактирую /etc/ssh/sshd_config, установлю порт, ListenAddressи PasswordAuthenticationв Yes: glenn – локальный суперпользователь только в моём инстансе WSL2: Теперь Гленн устанавливает пакет VS Code Remote Development и при помощи Remote via SSH подключается к моему IP в сети Tailscale. Ниже вы видите VS Code на машине Гленна, где ставится VS Code Server [не перепутайте с code-server для развёртывания VSC в вебе] и удалённую разработку вообще.  С точки зрения архитектуры Гленн и код в VS Code поделены пополам между клиентом на его машине Windows и сервером на моём экземпляре WSL2. Обратите внимание: в левом нижнем углу видно, что его VSCode подключён к IP моей WSL2 в сети Tailscale! Что вы думаете об этом? Можно сравнить Tailscale с инструментами типа ориентированного на разработчиков типа NGrok, который прокладывает туннели к localhost, но есть кое-какие существенные отличия. Проведите расследование! Я никак не отношусь к компании NGrok, разве что я её фанат. А спонсор этой недели… я! Этот блог и мой подкаст были любимым делом на протяжении девятнадцати лет. Ваше спонсорство оплачивает мой хостинг, благодаря ему я покупаю гаджеты для обзоров, а иногда – тако. Присоединяйтесь! Редактор-переводчик