HomeLab

🧠 День 13 — Доступ к Windows Server 2022 через WireGuard и WinRM (без открытия портов в интернет)

15 мая 2026, 07:51
🧠 День 13 — Доступ к Windows Server 2022 через WireGuard и WinRM (без открытия портов в интернет)

29–30 апреля 2026 я собрал первый практический сценарий удалённого сбора данных с Windows Server 2022 (прод-сервер) без публикации админ-портов наружу.

Идея простая:

  • строим защищённый туннель;
  • добиваемся корректной авторизации;
  • получаем техданные (health-check) через WinRM;
  • фиксируем результат и делаем повторяемый скрипт.

Важно: в этой статье я специально обезличил хосты, домен, пользователей и точные адреса. Логика и грабли реальные.


🎯 Контекст задачи

  • Цель: безопасно собирать техданные с Windows Server 2022:
  • версия ОС, аптайм
  • CPU/RAM
  • диски
  • состояние критичных сервисов (например, бизнес-приложение и SQL)
  • Ограничения:
  • сервер продовый, люди работают по RDP
  • нельзя “распахнуть” WinRM/RDP в интернет
  • по обе стороны туннеля исторически одинаковые подсети (классическая боль)

🗺️ Схема (упрощённо)

              (площадка A)                               (площадка B)

      +---------------------+                   +----------------------+
      |  VPN/Edge (Linux)   |<===== WG ========>|   Router/Gateway      |
      |  vpn01              |  tunnel /30-ish   |   (MikroTik/edge)     |
      +----------+----------+                   +----------+-----------+
                 |                                         |
                 |                                         |
        (LAN A)  |                                         |  (LAN B)
        192.168.xx.0/24                                    192.168.xx.0/24
                 |                                         |
                 |                                         |
      +----------v----------+                   +----------v-----------+
      |  Windows Server     |                   |  другие хосты/узлы   |
      |  (prod)             |                   |  (не важно)          |
      +---------------------+                   +----------------------+

Проблема: LAN A и LAN B пересекаются по адресам.
Решение: отдельная "виртуальная" сеть в туннеле + NAT/NETMAP.

### Схема overlay + NAT/NETMAP

Идея простая: внутри WireGuard мы вводим отдельную “виртуальную” подсеть и маппим на неё реальный сервер.
Так мы избегаем конфликта одинаковых LAN по обе стороны.

```text
          Клиент/сборщик (площадка A)
                 (Linux / automation)
                       |
                       |  WinRM (HTTP/HTTPS) -> overlay
                       v
                +------+------+
                |  vpn01 (WG)  |
                | overlay:     |
                | 10.xx.xx.1   |
                +------+------+
                       |
                       |  WireGuard tunnel
                       v
                +------+------+
                | edge router  |
                | NAT/NETMAP:  |
                | 10.xx.xx.145 |
                |   <-> LAN IP |
                +------+------+
                       |
                       |  (внутри площадки B)
                       v
                +------+------+
                | Windows srv  |
                | (prod host)  |
                +-------------+

Снаружи ничего не открываем: WinRM доступен только “через overlay-адрес”.

✅ Что было сделано (по шагам)

Поток доступа (WinRM)

Чтобы было понятно “что куда ходит”, вот упрощённый поток:

Operator/Script
   |
   | (1) connect to overlay host: 10.xx.xx.145
   v
vpn01 (WG overlay)
   |
   | (2) encrypted tunnel
   v
edge router (NETMAP)
   |
   | (3) translate dst 10.xx.xx.145 -> real LAN IP
   v
Windows Server
   |
   | (4) WinRM auth (NTLM) + policies/groups/UAC
   v
Remote command exec -> JSON/text report
  1. Проверил базовую доступность узла и сервисов в пределах допустимых правил.
  2. Поднял site-to-site WireGuard между узлом на Linux и edge-роутером.
  3. Уперся в конфликт одинаковых подсетей и сделал отдельную виртуальную сеть туннеля:
WG overlay: 10.xx.xx.0/24
Windows host (через маппинг): 10.xx.xx.145
  1. Настроил NAT/NETMAP так, чтобы удалённый Windows хост имел “виртуальный адрес” в overlay-сети.
  2. Проверил, что сервер доступен через туннель по нужным направлениям.
  3. Подтвердил права учётки для WinRM.
  4. Донастроил права в локальных группах Windows (привязываясь к SID/группам, чтобы не зависеть от языка ОС).
  5. Включил корректный удалённый доступ через WinRM (NTLM) и поправил нюансы UAC/token filtering.
  6. Снял расширенный health-check и оформил отчёт.
  7. Добавил скрипт повторного сбора и зафиксировал всё в git.

🧨 Ключевые проблемы и как решались

1) “Порт виден, но не пускает”

Пинг/порт могут быть “живы”, но это не значит, что дальше авторизация будет работать.

В Windows часто упираешься в:

  • локальные политики;
  • членство пользователя в группах;
  • UAC token policy (когда удалённая сессия получает урезанные права);
  • настройки WinRM и разрешённые методы.

2) Совпадение подсетей по обе стороны

Когда обе стороны исторически живут в одной и той же 192.168.xx.0/24, классическая маршрутизация не поможет.

Решение, которое сработало стабильно:

  • поднять overlay-сеть внутри WG (условно 10.xx.xx.0/24)
  • сделать NAT/NETMAP до целевого сервера
  • дальше работать как будто это “обычный” хост в отдельной подсети

3) WinRM “не работает с нужной учёткой”

Чаще всего проблема не в WinRM как в сервисе, а в том, чем именно является учётка и какие права ей даны.

В итоге у меня заработало после:

  • корректных локальных групп;
  • включения WinRM и проверенной схемы аутентификации;
  • настройки политики, влияющей на удалённые токены.

📊 Что получилось на выходе

  • Туннель стабилен, доступ к Windows идёт только внутри защищённого канала.
  • Сбор данных через WinRM работает.
  • В репозитории лежит:
  • отчёт health-check
  • скрипт повторного сбора
  • базовая гигиена (.gitignore, структура)

🔢 Цифры (обезличено)

  • ОС: Windows Server 2022 Datacenter (build 20348)
  • Аптайм на момент проверки: около 4 недель
  • RAM: около 32 GB
  • Диски (примерно):
  • C: ~476 GB, свободно ~284 GB
  • D: ~894 GB, свободно ~763 GB
  • Критичные сервисы: Running

🧠 Личный вывод

Это был мой первый полноценный рабочий сценарий получения данных с Windows Server через защищённый канал.

Главный инсайт: в таких задачах важны не “одна-две команды”, а аккуратная цепочка:

сеть -> маршруты/NAT -> доступы -> политики безопасности -> WinRM -> автоматизация -> документирование

Дальше логичный шаг: поверх уже готовой схемы сборов сделать событийные алерты (например, Telegram) и постепенно превращать это в эксплуатационный контур.