Цель. Настроить WSL2[1] с Debian 12[2] на ПК Windows с LAN 192.168.2.0/24 (IP Windows — 192.168.2.100), чтобы сервисы Linux были доступны из интернета на портах 22/80/443/3306 и графический вход по RDP — порт 3389 пепеопределенный в 3333. При перезагрузке Windows Debian должен подниматься автоматически, а все сервисы — работать без ручных действий.
Что внутри. Два сетевых подхода — NAT/порт‑прокси Windows и мост (Hyper‑V External vSwitch) — с плюсами/минусами. Пошаговые инструкции по установке и запуску OpenSSH, Nginx или Apache, Percona Server for MySQL, xrdp (RDP), настройка брандмауэра Windows и правил на MikroTik[3]. Автозапуск описан двумя способами: через systemd[13] и через средства Windows (Task Scheduler/schtasks).
Оглавление
- Обычный пользователь
- 1.1 Установка WSL2 и Debian 12
- 1.2 Почему «постоянный IP» в WSL2 — это про схему сети
- 1.3 Проброс портов через Windows (portproxy)
- 1.4 Брандмауэр Windows: открыть 22/80/443/3306/33333
- 1.5 Установка служб: SSH, Nginx/Apache, Percona MySQL, XFCE+xrdp
- 1.6 Автозапуск WSL и служб (systemd + Планировщик)
- 1.7 Тестирование публичного доступа
- Разработчик
- Администратор
- 3.1 Архитектура сети WSL2/Windows
- 3.2 Вариант A: NAT + portproxy (Windows)
- 3.3 Вариант B: Мост (Hyper‑V External vSwitch)
- 3.4 Автозапуск WSL и служб: сравнение вариантов
- 3.5 Безопасность, обслуживание, резервирование
- 3.6 Матрица портов и адресов (шпаргалка)
- 3.7 Траблшутинг: частые проблемы и проверки
- Глоссарий с терминами и сносками
1. Обычный пользователь
1.1 Установка WSL2 и Debian 12
1) Включите компонент «Подсистема Windows для Linux» и «Платформа виртуальной машины». Самый быстрый способ — запустите PowerShell от администратора:
wsl --install
wsl --set-default-version 2
wsl --update
2) Установите Debian 12 из Microsoft Store и запустите его из меню «Пуск». Создайте пользователя, задайте пароль.
3) Проверьте версию: wsl -l -v — у вашего дистрибутива должен быть статус «WSL 2». Если нет — выполните wsl --set-version Debian 2.
1.2 Почему «постоянный IP» в WSL2 — это про схему сети
По умолчанию WSL2 получает динамический адрес во внутренней подсети Windows через виртуальный коммутатор[10]. Это удобно для разработки, но адрес может меняться при перезапусках. Есть два пути сделать сервисы «постоянно доступными»:
- Вариант A (проще): оставить схему по умолчанию и пробрасывать порты с Windows на WSL через portproxy + открыть их в брандмауэре[12]. Снаружи обращаемся к адресу Windows (192.168.2.100). Автоскрипт обновляет привязку при смене IP WSL. См. §3.2.
- Вариант B (чуть сложнее): перевести vSwitch WSL в режим External (мост)[11] в Hyper‑V[9], выдать WSL адрес из вашей LAN (например, 192.168.2.200) и направлять порты с MikroTik напрямую на этот IP. См. §3.3.
Далее в этом разделе для простоты идём по варианту A (NAT/portproxy). Полный разбор и мост — в разделе для администраторов.
1.3 Проброс портов через Windows (portproxy)
1) Узнайте текущий IP WSL внутри Debian:
hostname -I
Пример: 172.21.47.192.
2) В PowerShell (администратор) создайте правила netsh interface portproxy для портов 22/80/443/3306/33333. Windows будет слушать на 0.0.0.0:<порт> и пересылать в WSL:
# Замените 172.21.47.192 на ваш текущий IP WSL
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=22 connectaddress=172.21.47.192 connectport=22
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=172.21.47.192 connectport=80
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=443 connectaddress=172.21.47.192 connectport=443
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3306 connectaddress=172.21.47.192 connectport=3306
# RDP: внешний порт 33333 на Windows — во внутренний 3389 (xrdp) в WSL
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=33333 connectaddress=172.21.47.192 connectport=3389
# Проверка:
netsh interface portproxy show all
Важно. Если IP WSL сменится, эти правила нужно обновить. Автоматизация — в §3.2.2.
1.4 Брандмауэр Windows: открыть 22/80/443/3306/33333
Создайте входящие правила (TCP) для портов: 22, 80, 443, 3306, 33333. Можно через GUI «Брандмауэр Защитника Windows…», либо PowerShell:
New-NetFirewallRule -DisplayName "WSL SSH 22" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow
New-NetFirewallRule -DisplayName "WSL HTTP 80" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "WSL HTTPS 443" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
New-NetFirewallRule -DisplayName "WSL MySQL 3306"-Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow
New-NetFirewallRule -DisplayName "WSL RDP 33333" -Direction Inbound -Protocol TCP -LocalPort 33333 -Action Allow
Убедитесь, что никакие службы Windows не занимают нужные порты (например, IIS на 80/443, Windows RDP на 3389 нам не мешает, т.к. мы используем 33333).
1.5 Установка служб: SSH, Nginx/Apache, Percona MySQL, XFCE + xrdp
Все команды ниже выполняйте в Debian (WSL) под пользователем с sudo[21].
SSH[8]:
sudo apt update && sudo apt install -y openssh-server
sudo systemctl enable ssh && sudo systemctl start ssh
systemctl status ssh
Веб-сервер (пример — Nginx):
sudo apt install -y nginx
sudo systemctl enable nginx && sudo systemctl start nginx
# Проверка:
curl -I http://127.0.0.1
HTTPS: позже можно подключить сертификат (Let’s Encrypt) при наличии домена (см. §3.7).
Percona Server for MySQL[18][19] (порт 3306):
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
sudo dpkg -i percona-release_latest.generic_all.deb
sudo percona-release setup ps80
sudo apt update
sudo apt install -y percona-server-server-8.0
# Разрешить удалённые подключения:
sudo sed -i 's/^bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/percona-server.conf.d/mysqld.cnf
sudo systemctl restart mysql
# Базовая защита:
sudo mysql_secure_installation
Рекомендация безопасности: создайте отдельного SQL‑пользователя для удалённых подключений и ограничьте его хост (либо используйте фильтрацию на MikroTik; см. §3.5).
GUI + RDP (XFCE+xrdp[17], внешний порт 33333):
sudo apt install -y xfce4 xfce4-goodies xrdp
sudo adduser $USER ssl-cert
sudo systemctl enable xrdp && sudo systemctl start xrdp
# xrdp по умолчанию слушает 3389 — оставляем так,
# порт 33333 мы используем на Windows/MikroTik и маппим на 3389 WSL
Подключение: «Подключение к удалённому рабочему столу» → <ваш_внешний_IP>:33333 → логин/пароль пользователя Debian.
1.6 Автозапуск WSL и служб (systemd + Планировщик)
Включите systemd в WSL (чтобы службы сами стартовали при запуске дистрибутива):
# /etc/wsl.conf
[boot]
systemd=true
Перезапустите WSL: wsl --shutdown → запустите Debian снова. Убедитесь, что systemctl работает. Проверьте, что службы включены на автозапуск: systemctl enable ssh nginx mysql xrdp.
Автозапуск WSL при старте Windows — создайте задачу Планировщика (Task Scheduler) «At startup» с действием:
# Вариант через schtasks (выполнить в PowerShell/Command Prompt от администратора):
schtasks /Create /TN "Start WSL Debian" /TR "wsl.exe -d Debian -u root /bin/true" /SC ONSTART /RL HIGHEST /F
Задача запустит невидимый процесс WSL при загрузке системы, systemd поднимет службы.
1.7 Тестирование публичного доступа
- SSH:
ssh user@<ваш_внешний_IP> -p 22 - HTTP/HTTPS: открыть в браузере
http://<ваш_внешний_IP>иhttps://<ваш_внешний_IP> - RDP:
<ваш_внешний_IP>:33333(mstsc) - MySQL: из клиента —
host=<ваш_внешний_IP>, port=3306
Если не работает — см. §3.7 «Траблшутинг».
2. Разработчик
2.1 Работа с кодом и файлами (\\wsl$, Remote WSL)
Проекты быстрее хранятся в файловой системе WSL (/home/<user>/projects). Доступ из Windows — по пути \\wsl$\Debian\home\.... Для VS Code используйте расширение Remote — WSL, чтобы сервер редактора работал в Linux‑среде.
2.2 Виртуальные хосты, дополнительные порты, БД
Нужны dev‑порты (напр. 3000/5173)? В варианте A добавляйте для них правила portproxy + брандмауэр Windows. В варианте B достаточно dst‑nat на MikroTik. Для Percona/MySQL создавайте отдельных пользователей и схемы для проектов; для доступа с Windows используйте 127.0.0.1:3306 (при portproxy) или 192.168.2.200:3306 (при мосте).
2.3 RDP и GUI для задач разработки
Подключайтесь по RDP к XFCE (xrdp слушает 3389 внутри WSL; наружу — 33333). Это удобно для Linux‑утилит с GUI. На Windows 11 также можно использовать WSLg для отдельных окон без RDP (для локальной работы).
2.4 Обновления, логи, отладка
# Обновления
sudo apt update && sudo apt upgrade -y
# Логи сервисов (systemd):
sudo journalctl -u nginx --no-pager --since "1 hour ago"
sudo journalctl -u ssh --no-pager
sudo journalctl -u mysql --no-pager
sudo journalctl -u xrdp --no-pager
# Кто слушает порт:
ss -tnlp | grep -E ':22|:80|:443|:3306|:3389'
2.5 Безопасность для дев‑сред
- SSH‑ключи вместо паролей; можно отключить парольный вход (
PermitRootLogin no,PasswordAuthentication noвsshd_config). - Открывайте минимум портов наружу; лучше ограничивайте по IP на MikroTik.
- Для БД избегайте публичного 3306 — используйте VPN/SSH‑туннель, если это не стенд для клиентов.
3. Администратор
3.1 Архитектура сети WSL2/Windows
WSL2 — лёгкая ВМ[24] на Hyper‑V[9]. По умолчанию используется внутренний vSwitch «WSL» (тип Internal): Linux получает адрес из «виртуальной» подсети, Windows — шлюз/NAT[5]. Поэтому из LAN/Интернета WSL не виден напрямую — нужен порт‑прокси на Windows (вариант A) или мост (вариант B).
3.2 Вариант A: NAT + portproxy (Windows)
3.2.1 Создание правил portproxy и firewall (Windows)
См. базовую настройку в §1.3 и §1.4. Убедитесь, что порты свободны на хосте (IIS, VPN‑клиенты и т.п. могут занимать 80/443).
3.2.2 Автообновление portproxy при смене IP WSL
Создайте PowerShell‑скрипт C:\Scripts\wsl-portproxy.ps1 (от имени администратора):
$ports = @(
@{Listen=22; Target=22},
@{Listen=80; Target=80},
@{Listen=443; Target=443},
@{Listen=3306; Target=3306},
@{Listen=33333; Target=3389} # RDP наружу 33333 -> WSL 3389
)
# Получаем текущий IP WSL
$wslIp = (wsl hostname -I).Trim()
if (-not $wslIp) { exit 1 }
# Очистим старые правила для наших портов (опционально):
foreach ($p in $ports) {
try { netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=$($p.Listen) | Out-Null } catch {}
}
# Создаём заново с актуальным IP
foreach ($p in $ports) {
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=$($p.Listen) connectaddress=$wslIp connectport=$($p.Target) | Out-Null
}
# Откроем порты в брандмауэре (если не открыты)
foreach ($p in $ports) {
$name = "WSL Port $($p.Listen)"
if (-not (Get-NetFirewallRule -DisplayName $name -ErrorAction SilentlyContinue)) {
New-NetFirewallRule -DisplayName $name -Direction Inbound -Protocol TCP -LocalPort $p.Listen -Action Allow | Out-Null
}
}
Зарегистрируйте задачу при старте ОС:
schtasks /Create /TN "WSL PortProxy Update" /TR "powershell.exe -ExecutionPolicy Bypass -File C:\Scripts\wsl-portproxy.ps1" /SC ONSTART /DELAY 0001:00 /RL HIGHEST /F
Так порт‑прокси всегда будет указывать на актуальный IP WSL. Рекомендуется также задать задачу «On logon»/«On unlock» — на случай спящих режимов.
3.2.3 MikroTik: dst‑nat для варианта A (цель — Windows 192.168.2.100)
На роутере создайте правила dst‑nat[5], направляющие входящие запросы с WAN[22] на IP Windows (192.168.2.100) на соответствующие порты:
/ip firewall nat
add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=22 action=dst-nat to-addresses=192.168.2.100 to-ports=22 comment="SSH -> Windows (portproxy -> WSL)"
add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.2.100 to-ports=80 comment="HTTP -> Windows (portproxy -> WSL)"
add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=443 action=dst-nat to-addresses=192.168.2.100 to-ports=443 comment="HTTPS -> Windows (portproxy -> WSL)"
add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=3306 action=dst-nat to-addresses=192.168.2.100 to-ports=3306 comment="MySQL -> Windows (portproxy -> WSL)"
add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=33333 action=dst-nat to-addresses=192.168.2.100 to-ports=33333 comment="RDP -> Windows (portproxy 33333->3389 WSL)"
Убедитесь, что фильтрующие правила forward пропускают соединения в состоянии dstnat и established,related.
3.3 Вариант B: Мост (Hyper‑V External vSwitch)
Идея: перевести vSwitch «WSL» в External, привязав к физическому адаптеру (Ethernet/Wi‑Fi). Тогда WSL получит IP из LAN (например, 192.168.2.200/24, шлюз — 192.168.2.1), и MikroTik будет направлять порты напрямую на этот IP (Windows минуется).
- Включите Hyper‑V (Windows Components). Перезагрузитесь.
- В «Hyper‑V Manager» → «Virtual Switch Manager» найдите vSwitch «WSL» и переключите с Internal на External. Выберите физический адаптер. Подтвердите изменения.
- Запустите Debian WSL и назначьте адрес:
sudo ip addr flush dev eth0
sudo dhclient eth0 # если есть DHCP на MikroTik
# или статически:
sudo ip addr add 192.168.2.200/24 dev eth0
sudo ip link set eth0 up
sudo ip route add default via 192.168.2.1
Сделайте статическую конфигурацию постоянной (ifupdown или systemd‑networkd). - Проверьте доступность из LAN (ping 192.168.2.200).
3.3.1 MikroTik: dst‑nat для варианта B (цель — WSL 192.168.2.200)
/ip firewall nat
add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=22,80,443 action=dst-nat to-addresses=192.168.2.200
add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=3306 action=dst-nat to-addresses=192.168.2.200
add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=33333 action=dst-nat to-addresses=192.168.2.200 to-ports=3389
В этом варианте Windows portproxy/брандмауэр для публичных портов не нужен (но оставьте брандмауэр включённым — он защищает сам хост Windows).
3.4 Автозапуск WSL и служб: сравнение вариантов
- Через systemd (в WSL) + Планировщик Windows: Плюсы — штатно, прозрачно, службы управляются привычно (
systemctl), лёгкая поддержка. Минусы — сам WSL нужно «толкнуть» при старте Windows (решается Планировщиком). В редких случаях WSL может «усыпать» при долгом простое — держите хотя бы sshd активным. - Через чисто Windows‑скрипты (без systemd): запуск
service ... startизwsl.exeв задаче. Плюсы — не нужна активация systemd. Минусы — сложнее управлять зависимостями, не все службы дружат без systemd. В 2025 г. предпочтителен вариант с systemd.
3.5 Безопасность, обслуживание, резервирование
- Обновления: Windows (включая WSL ядро) +
apt update && apt upgradeв Debian. - Пароли/ключи: SSH‑ключи, отключить парольный вход; сложные пароли для БД.
- Firewall MikroTik: ограничьте доступ к 3306/22 по IP (адрес‑листы). Рассмотрите VPN вместо публичного 3306.
- Резервные копии: экспорт дистрибутива (
wsl --export Debian <tar>), дампы БД (mysqldump или XtraBackup). - Мониторинг: логи Linux (
journalctl), Event Viewer Windows (HNS/LxssManager), логи MikroTik (drop‑пакеты). - Производство: WSL официально ориентирован на разработку; для SLA‑критичных задач лучше VM/сервер.
3.6 Матрица портов и адресов (шпаргалка)
| Сервис | Внутри WSL (цель) | Windows (listen) | MikroTik (dst‑nat) | Комментарий |
|---|---|---|---|---|
| SSH | WSL:22 | 22 (A) | WAN:22 → 192.168.2.100:22 (A) WAN:22 → 192.168.2.200:22 (B) | (A) через portproxy; (B) напрямую |
| HTTP | WSL:80 | 80 (A) | WAN:80 → 192.168.2.100:80 (A) WAN:80 → 192.168.2.200:80 (B) | Проверьте, что IIS не слушает 80 |
| HTTPS | WSL:443 | 443 (A) | WAN:443 → 192.168.2.100:443 (A) WAN:443 → 192.168.2.200:443 (B) | Сертификат — позже |
| MySQL | WSL:3306 | 3306 (A) | WAN:3306 → 192.168.2.100:3306 (A) WAN:3306 → 192.168.2.200:3306 (B) | Лучше ограничить по IP/VPN |
| RDP → xrdp | WSL:3389 | 33333 (A) | WAN:33333 → 192.168.2.100:33333 (A) WAN:33333 → 192.168.2.200:3389 (B) | Вариант A делает hop на Windows |
3.7 Траблшутинг: частые проблемы и проверки
- Порт занят на Windows: проверьте
Get-NetTCPConnection -LocalPort <port>; отключите IIS/WAS/резервирующие службы. Освободите 80/443. - portproxy «молчит»:
netsh interface portproxy show all; обновите IP через скрипт (§3.2.2). - Брандмауэр: временно отключите входящий профиль для проверки или создайте явные правила (см. §1.4).
- MikroTik NAT: убедитесь в попадании в правило (Counters ↑), фильтр forward не дропает
connection-nat-state=dstnat. - MySQL «Connection refused»: проверьте
bind-address=0.0.0.0,ss -tnlp | grep 3306, привилегии пользователя (HOST), firewall. - WSL «засыпает»: держите активный сервис (sshd), либо периодический «пинг» задачей Планировщика (
wsl -d Debian -u root /bin/trueкаждые N мин). - HTTPS: для Let’s Encrypt поставьте
certbot, пробросьте 80/443, пройдите HTTP‑01. На выдаче домена убедитесь, что A‑запись указывает на ваш внешний IP.
4. Глоссарий (термины и сноски)
- WSL2 — Windows Subsystem for Linux 2: подсистема Windows для запуска Linux с использованием лёгкой виртуализации Hyper‑V. ↩︎
- Debian 12 — стабильный релиз дистрибутива Debian GNU/Linux («Bookworm»), использованный в WSL. ↩︎
- MikroTik / RouterOS — маршрутизаторы и ОС для гибкой настройки NAT/Firewall/VPN и др. ↩︎
- IP‑адрес — уникальный адрес узла в сети IPv4/IPv6; «постоянный IP» — статическая адресация. ↩︎
- NAT — трансляция сетевых адресов; также включает проброс портов (dst‑nat). ↩︎
- Проброс портов — перенаправление TCP/UDP‑соединений с одного адреса/порта на другой. ↩︎
- RDP — протокол удалённого рабочего стола Microsoft; по умолчанию порт 3389. ↩︎
- SSH — защищённая оболочка для удалённого доступа к CLI; порт 22. ↩︎
- Hyper‑V — гипервизор Microsoft для виртуализации, используемый WSL2. ↩︎
- Виртуальный коммутатор — программный switch Hyper‑V (Internal/External/Private). ↩︎
- Бриджинг (мост) — включение ВМ в физическую сеть через External vSwitch. ↩︎
- Брандмауэр — фильтрация трафика по правилам (Windows Firewall, RouterOS Firewall). ↩︎
- systemd — менеджер служб и инициализации в Linux (PID 1), поддерживается в WSL2. ↩︎
- DNS — система доменных имён (преобразование имён в IP). ↩︎
- DHCP — автоматическая выдача IP‑настроек (адрес, шлюз, DNS). ↩︎
- GUI — графический интерфейс пользователя (XFCE, LXDE и т.п.). ↩︎
- xrdp — сервер RDP для Linux, даёт вход в графическую сессию (порт 3389). ↩︎
- MySQL — реляционная СУБД; порт 3306. ↩︎
- Percona Server for MySQL — производная MySQL с улучшениями (Percona). ↩︎
- APT — менеджер пакетов Debian/Ubuntu (
apt install/update). ↩︎ - sudo — выполнение команд с правами root. ↩︎
- WAN — внешняя сеть/интернет; интерфейсы, смотрящие «наружу». ↩︎
- ОС — операционная система (Windows/Debian/RouterOS). ↩︎
- Виртуальная машина (ВМ) — изолированный экземпляр ОС на гипервизоре. ↩︎
Примечание по сноскам: щёлкните по номеру в тексте, чтобы перейти к определению, и по стрелке «↩︎», чтобы вернуться к месту упоминания.
Итог: Вы получили детально проработанную, «боевую» конфигурацию WSL2 Debian 12 с доступом из интернета на 22/80/443/3306 и RDP на 33333, с автоматическим подъёмом после перезагрузки Windows. Выберите вариант сети (A — проще; B — более «настоящий» постоянный IP) и следуйте соответствующим шагам.