КОНСАЛТИНГ | IT-АУТСОРСИНГ | РЕШЕНИЯ | КЕЙСЫ | БЛОГ
Если раньше ответ на вопрос удалённого доступа был прост — поднять VPN, — то сегодня провайдеры и корпоративные файрволы научились детектировать WireGuard по handshake, IKEv2 по сигнатурам, а OpenVPN — по поведению трафика. Рвут соединение, режут скорость, блокируют на уровне протокола, а не IP. Нужны другие инструменты. Разберём два современных решения и покажем, как поднять оба в jail на FreeBSD 15 с Bastille.
Почему VPN больше не панацея
Классическая связка «VPN + RDP» работала, пока провайдеры не научились различать трафик. Сегодня у неё три системных недостатка:
Весь трафик клиента идёт через сервер — нагрузка на канал растёт кратно числу пользователей
Блокировка протокола, а не IP — даже нестандартные порты детектируются по handshake и поведению сессии
Мобильные устройства — постоянно включённый VPN разряжает батарею и конфликтует с корпоративными MDM-политиками
VPN сегодня — узкоспециализированный инструмент для объединения сетей site-to-site, а не для ежедневного удалённого администрирования.
Сравнение инструментов
Архитектура: оба сервиса в jail
Мы помещаем и Guacamole, и RustDesk в отдельные jail — это наш стандарт: изоляция, снапшоты, минимальный периметр атаки. Снаружи торчит только один порт — 443, который обслуживает Caddy в отдельном jail-реверс-прокси.
Интернет
│
vtnet0 (внешний IP)
│
PF (только 443 + RustDesk порты)
│
┌────────────────────────────────────┐
│ bastille0 (10.0.0.0/24) │
│ │
│ caddy 10.0.0.10 :443 │
│ guac 10.0.0.11 :8080 │
│ rustdesk 10.0.0.12 :21115+ │
└────────────────────────────────────┘Caddy — наш выбор вместо Nginx: автоматически получает и обновляет TLS-сертификаты Let's Encrypt, конфиг в 3 строки, нет отдельного модуля для WebSocket — всё работает из коробки.
Шаг 1: Создание jail
bastille create caddy 15.0-RELEASE 10.0.0.10
bastille create guac 15.0-RELEASE 10.0.0.11
bastille create rustdesk 15.0-RELEASE 10.0.0.12Шаг 2: Apache Guacamole в jail
Установка
bastille pkg guac install guacamole-server guacamole-client tomcat11
bastille sysrc guac guacd_enable="YES"
bastille sysrc guac tomcat11_enable="YES"
bastille service guac guacd start
bastille service guac tomcat11 startguacd — прокси-демон на C, Tomcat поднимает веб-приложение на Java. Оба живут внутри jail и не видны снаружи.
Настройка user-mapping.xml (быстрый старт без БД)
Заходим в jail и создаём конфиг пользователей:
bastille console guac
vi /usr/local/etc/guacamole-client/user-mapping.xml<user-mapping>
<authorize username="admin" password="yourpassword">
<!-- SSH подключение к серверу -->
nection name="server01-ssh">
<protocol>ssh</protocol>
<param name="hostname">192.168.1.10</param>
<param name="port">22</param>
<param name="username">root</param>
</connection>
<!-- RDP к Windows-машине -->
nection name="win-desktop">
<protocol>rdp</protocol>
<param name="hostname">192.168.1.20</param>
<param name="port">3389</param>
<param name="username">Administrator</param>
<param name="ignore-cert">true</param>
</connection>
</authorize>
</user-mapping>Когда пользователей станет больше трёх — переедем на MariaDB с ролями и 2FA. Это тема отдельной статьи.
guacamole.properties
vi /usr/local/etc/guacamole-client/guacamole.properties
guacd-hostname: localhost
guacd-port: 4822
user-mapping: /usr/local/etc/guacamole-client/user-mapping.xmlПерезапускаем Tomcat — Guacamole доступен на http://10.0.0.11:8080/guacamole/ внутри bastille-сети.
Шаг 3: RustDesk Server в jail
bastille pkg rustdesk install rustdesk-server
bastille sysrc rustdesk hbbs_enable="YES"
bastille sysrc rustdesk hbbr_enable="YES"
bastille service rustdesk hbbs start
bastille service rustdesk hbbr startПолучаем публичный ключ для клиентов:
bastille console rustdesk
cat /var/db/rustdesk-server/id_ed25519.pubЭтот ключ вводится в клиенте RustDesk: Настройки → Сеть → ID/Relay Server — указываешь внешний IP и ключ. После этого клиент работает только через твой сервер.
Шаг 4: Caddy как реверс-прокси
Установка
bastille pkg caddy install caddy
bastille sysrc caddy caddy_enable="YES"Caddyfile
Caddy сам получит сертификат Let's Encrypt при первом запуске — никаких certbot, никаких cron-задач:
bastille console caddy
vi /usr/local/etc/caddy/Caddyfile
guac.yourdomain.ru {
redir / /guacamole/ 308
reverse_proxy 10.0.0.11:8080 {
flush_interval -1
}
}flush_interval -1 — критически важная опция для Guacamole: отключает буферизацию, иначе WebSocket-туннель работает с задержками.
bastille service caddy caddy startШаг 5: PF — открываем только нужное
vi /etc/pf.confext_if="vtnet0"
set block-policy return
scrub in on $ext_if all fragment reassemble
set skip on lo
table <jails> persist
nat on $ext_if from <jails> to any -> ($ext_if:0)
rdr-anchor "rdr/*"
block in all
pass out quick keep state
antispoof for $ext_if inet
# SSH на хост
pass in inet proto tcp from any to any port 22 flags S/SA keep state
# Caddy — единая точка входа для Guacamole
pass in inet proto tcp from any to any port 443 flags S/SA keep state
# RustDesk — собственный протокол
pass in inet proto tcp from any to any port {21115 21116 21117 21118 21119} flags S/SA keep state
pass in inet proto udp from any to any port 21116 keep stateПроброс через Bastille:
# Caddy принимает снаружи
bastille rdr caddy tcp 443 443
# RustDesk relay порты
bastille rdr rustdesk tcp 21115 21115
bastille rdr rustdesk tcp 21116 21116
bastille rdr rustdesk tcp 21117 21117
bastille rdr rustdesk udp 21116 21116Управление — шпаргалка
Когда что выбирать
Apache Guacamole — выбор для администрирования серверной инфраструктуры. Ты открываешь только HTTPS 443 через Caddy, не ставишь агентов на серверы и получаешь единую точку входа ко всем хостам через браузер. Работает с любого устройства — хоть с телефона.
RustDesk — выбор для поддержки пользовательских рабочих мест с GUI, там где важна скорость отклика и простота для клиента. Свой сервер в jail даёт полный контроль над данными без зависимости от публичной инфраструктуры.
Оба решения без проблем проходят через корпоративные файрволы там, где VPN уже заблокирован — и оба живут на FreeBSD в jail, как и должно быть.
📌 Нужна помощь с настройкой Guacamole или RustDesk под вашу инфраструктуру? Пишите.
🔹 Telegram: UNIX_RUS
🔹 VK: vk.com/cio_ignatiev
Комментарии