EN RU

WSL2 Debian 12 с постоянным IP и пробросом портов (22/80/443/3306/3389) через MikroTik: полный профессиональный гайд

Цель. Настроить 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. 1.1 Установка WSL2 и Debian 12
    2. 1.2 Почему «постоянный IP» в WSL2 — это про схему сети
    3. 1.3 Проброс портов через Windows (portproxy)
    4. 1.4 Брандмауэр Windows: открыть 22/80/443/3306/33333
    5. 1.5 Установка служб: SSH, Nginx/Apache, Percona MySQL, XFCE+xrdp
    6. 1.6 Автозапуск WSL и служб (systemd + Планировщик)
    7. 1.7 Тестирование публичного доступа
  2. Разработчик
    1. 2.1 Работа с кодом и файлами (\\wsl$ / Remote WSL)
    2. 2.2 Виртуальные хосты, дополнительные порты, БД
    3. 2.3 RDP и GUI для задач разработки
    4. 2.4 Обновления, логи, отладка
    5. 2.5 Безопасность для дев-сред
  3. Администратор
    1. 3.1 Архитектура сети WSL2/Windows
    2. 3.2 Вариант A: NAT + portproxy (Windows)
    3. 3.3 Вариант B: Мост (Hyper‑V External vSwitch)
    4. 3.4 Автозапуск WSL и служб: сравнение вариантов
    5. 3.5 Безопасность, обслуживание, резервирование
    6. 3.6 Матрица портов и адресов (шпаргалка)
    7. 3.7 Траблшутинг: частые проблемы и проверки
  4. Глоссарий с терминами и сносками

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 минуется).

  1. Включите Hyper‑V (Windows Components). Перезагрузитесь.
  2. В «Hyper‑V Manager» → «Virtual Switch Manager» найдите vSwitch «WSL» и переключите с Internal на External. Выберите физический адаптер. Подтвердите изменения.
  3. Запустите 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).
  4. Проверьте доступность из 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)Комментарий
SSHWSL:2222 (A)WAN:22 → 192.168.2.100:22 (A)
WAN:22 → 192.168.2.200:22 (B)
(A) через portproxy; (B) напрямую
HTTPWSL:8080 (A)WAN:80 → 192.168.2.100:80 (A)
WAN:80 → 192.168.2.200:80 (B)
Проверьте, что IIS не слушает 80
HTTPSWSL:443443 (A)WAN:443 → 192.168.2.100:443 (A)
WAN:443 → 192.168.2.200:443 (B)
Сертификат — позже
MySQLWSL:33063306 (A)WAN:3306 → 192.168.2.100:3306 (A)
WAN:3306 → 192.168.2.200:3306 (B)
Лучше ограничить по IP/VPN
RDP → xrdpWSL:338933333 (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. Глоссарий (термины и сноски)

  1. WSL2 — Windows Subsystem for Linux 2: подсистема Windows для запуска Linux с использованием лёгкой виртуализации Hyper‑V. ↩︎
  2. Debian 12 — стабильный релиз дистрибутива Debian GNU/Linux («Bookworm»), использованный в WSL. ↩︎
  3. MikroTik / RouterOS — маршрутизаторы и ОС для гибкой настройки NAT/Firewall/VPN и др. ↩︎
  4. IP‑адрес — уникальный адрес узла в сети IPv4/IPv6; «постоянный IP» — статическая адресация. ↩︎
  5. NAT — трансляция сетевых адресов; также включает проброс портов (dst‑nat). ↩︎
  6. Проброс портов — перенаправление TCP/UDP‑соединений с одного адреса/порта на другой. ↩︎
  7. RDP — протокол удалённого рабочего стола Microsoft; по умолчанию порт 3389. ↩︎
  8. SSH — защищённая оболочка для удалённого доступа к CLI; порт 22. ↩︎
  9. Hyper‑V — гипервизор Microsoft для виртуализации, используемый WSL2. ↩︎
  10. Виртуальный коммутатор — программный switch Hyper‑V (Internal/External/Private). ↩︎
  11. Бриджинг (мост) — включение ВМ в физическую сеть через External vSwitch. ↩︎
  12. Брандмауэр — фильтрация трафика по правилам (Windows Firewall, RouterOS Firewall). ↩︎
  13. systemd — менеджер служб и инициализации в Linux (PID 1), поддерживается в WSL2. ↩︎
  14. DNS — система доменных имён (преобразование имён в IP). ↩︎
  15. DHCP — автоматическая выдача IP‑настроек (адрес, шлюз, DNS). ↩︎
  16. GUI — графический интерфейс пользователя (XFCE, LXDE и т.п.). ↩︎
  17. xrdp — сервер RDP для Linux, даёт вход в графическую сессию (порт 3389). ↩︎
  18. MySQL — реляционная СУБД; порт 3306. ↩︎
  19. Percona Server for MySQL — производная MySQL с улучшениями (Percona). ↩︎
  20. APT — менеджер пакетов Debian/Ubuntu (apt install/update). ↩︎
  21. sudo — выполнение команд с правами root. ↩︎
  22. WAN — внешняя сеть/интернет; интерфейсы, смотрящие «наружу». ↩︎
  23. ОС — операционная система (Windows/Debian/RouterOS). ↩︎
  24. Виртуальная машина (ВМ) — изолированный экземпляр ОС на гипервизоре. ↩︎

↑ Наверх

Примечание по сноскам: щёлкните по номеру в тексте, чтобы перейти к определению, и по стрелке «↩︎», чтобы вернуться к месту упоминания.

Итог: Вы получили детально проработанную, «боевую» конфигурацию WSL2 Debian 12 с доступом из интернета на 22/80/443/3306 и RDP на 33333, с автоматическим подъёмом после перезагрузки Windows. Выберите вариант сети (A — проще; B — более «настоящий» постоянный IP) и следуйте соответствующим шагам.

Разработка и продвижение сайтов webseed.ru
Прокрутить вверх