Публичный доступ (проброс через NAT) к локальной среде ServBay с помощью FRP
FRP — это высокопроизводительный и удобный в использовании инструмент обратного прокси, идеально подходящий для безопасной и простой публикации локальных сервисов (например, вебсайтов, API, баз данных) в открытый интернет. Архитектура FRP построена на клиенте (frpc
) и сервере (frps
), что позволяет эффективно обходить NAT и фаерволы.
Данное руководство детально объясняет пользователям ServBay на macOS, как настроить и использовать клиент FRP (frpc
) для создания безопасного туннеля. Это позволит вашему локальному веб-сервису, запущенному в ServBay, быть доступным в интернете. Такая схема незаменима для удалённых демонстраций, командной разработки, получения Webhook-запросов или проведения внешнего API-тестирования.
Краткий обзор технологии
Основная идея FRP — организация защищённого туннеля между вашей внутренней машиной (где работает frpc
, то есть ваш ноутбук или ПК с ServBay) и публичным сервером (где запущен frps
). Все запросы извне сначала попадают на сервер (frps
), а далее перенаправляются по этому зашифрованному тоннелю к вашему локальному FRP-клиенту (frpc
). frpc
передаёт их вашему локальному сервису ServBay (например, сайту или API). Ответ возвращается по обратному пути.
Эта схема позволяет элегантно обойти локальный фаервол и ограничения роутера, открывая серверы во внутренней сети в интернет. FRP поддерживает протоколы TCP/UDP/HTTP/HTTPS, что даёт огромные возможности для удалённого доступа к вашим сервисам в ServBay.
Наиболее типичные сценарии применения
Интеграция ServBay и FRP отлично решает такие задачи разработки, как:
- Удалённые демонстрации и совместная работа: моментальный показ локального сайта команде или заказчику без деплоя на внешний сервер.
- Тестирование Webhook: приём Webhook-уведомлений от сторонних сервисов (например, GitHub, Stripe, WeChat Pay) с возможностью локальной отладки.
- Совместная отладка API: предоставление внешним разработчикам или партнёрам доступа к локальному бэкенду для интеграционных тестов.
- Тестирование на мобильных устройствах: прямой доступ к локальному сайту ServBay с мобильных устройств для кроссплатформенного тестирования.
- Временный общий доступ: быстрое и простое предоставление доступа к локальным файлам/сервисам без сложных настроек.
Необходимые условия
Перед началом работы с FRP убедитесь, что выполнены следующие требования:
- Установлен и запущен ServBay: ServBay должен быть установлен и работать на вашем Mac. Локальный сервис (например, сайт), который вы хотите опубликовать, должен быть настроен и доступен через браузер.
- Есть публичный FRP-сервер (
frps
): Нужен сервер с внешним IP, где работает серверная часть FRP (frps
). Это руководство посвящено в основном клиенту (frpc
). - Публичный домен (необязательно, но актуально для HTTP/HTTPS): Для доступа к сервису по доменному имени вам потребуется собственный домен с возможностью настройки DNS.
- Установлен FRP-клиент (
frpc
): FRP-клиент не входит в пакет ServBay, его необходимо скачать и установить отдельно.
Подготовка окружения и установка клиента FRP
Настройка FRP-клиента (frpc
) на вашем Mac состоит из следующих шагов:
Скачайте клиент FRP: Перейдите на страницу релизов FRP в GitHub и выберите последнюю версию для вашей архитектуры macOS:
- Apple Silicon (M1/M2/M3 и новее): файл
frp_*.darwin_arm64.tar.gz
- Intel: файл
frp_*.darwin_amd64.tar.gz
- Apple Silicon (M1/M2/M3 и новее): файл
Установите клиент FRP: Распакуйте архив и скопируйте исполняемый файл
frpc
в одну из папок, входящих в системный PATH (например,/usr/local/bin
), чтобы вы могли вызывать командуfrpc
из любого терминала.Обратите внимание, версия (
0.52.3
или другая) и архитектура (darwin_arm64
или иная) должны соответствовать вашей загрузке.bash# Предположим, что скачан frp_0.52.3_darwin_arm64.tar.gz cd ~/Downloads # Распакуйте архив (замените имя файла на свой вариант) tar -zxvf frp_0.52.3_darwin_arm64.tar.gz # Перейдите в распакованную директорию (укажите свою) cd frp_0.52.3_darwin_arm64 # Скопируйте исполняемый файл в /usr/local/bin sudo cp frpc /usr/local/bin/ # (опционально) Можете также скопировать пример файла конфигурации frpc.toml # cp frpc.toml ~/
1
2
3
4
5
6
7
8
9
10
11
12
13
14Для выполнения команды
sudo
потребуется ввести пароль вашей учётной записи.Проверьте установку: Откройте новый терминал и выполните команду для проверки установки и корректного добавления в PATH:
bashfrpc -v # Ожидаемый результат: frpc version 0.52.3
1
2Если отобразится текущая версия — установка прошла успешно.
Настройка туннеля в FRP-клиенте
Все параметры работы FRP-клиента обычно определяются в отдельном файле frpc.toml
(рекомендуемый формат TOML). Создайте или отредактируйте этот файл — здесь описывается, как клиент подключается к серверу и какие локальные сервисы ServBay нужно вывести в интернет.
Подробное описание конфигурации frpc.toml
Вот пример минимальной структуры файла frpc.toml
для создания одного туннеля:
# frpc.toml — пример файла конфигурации клиента FRP
# [common]: Параметры подключения к FRP-серверу
serverAddr = "your-frps-server.com" # IP-адрес или домен вашего сервера FRPS
serverPort = 7000 # Порт для подключения к серверу (по умолчанию 7000)
# Аутентификация (рекомендуется использовать токен)
auth.method = "token"
auth.token = "your_authentication_token" # Должен совпадать с серверным значением
# Опционально: включите TLS для безопасного соединения
# tls_enable = true
# [[proxies]]: Задайте один или несколько туннелей
[[proxies]]
name = "my-web-service" # Имя, уникальное в пределах frpc.toml
type = "http" # Тип: http, https, tcp, udp, stcp, xtcp и др.
localIP = "127.0.0.1" # IP локального сервиса (обычно 127.0.0.1)
localPort = 80 # Порт локального сервиса (например, HTTP по умолчанию)
customDomains = ["servbay.your-domain.com"] # Внешний домен (HTTP/HTTPS). **Домен должен быть заранее настроен на IP вашего FRP-сервера.**
# Можно добавить другие секции [[proxies]] для других сервисов.
# [[proxies]]
# ... (другая настройка туннеля)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Параметр | Где задаётся | Описание |
---|---|---|
serverAddr | [common] | Внешний IP или домен сервера FRPS |
serverPort | [common] | Порт подключения клиента (обычно 7000; проверьте на сервере) |
auth.method | [common] | Метод аутентификации (например, token ). Должен совпадать с настройками сервера |
auth.token | auth (в [common] ) | Секретный ключ аутентификации — совпадает с серверной настройкой. Никогда не передавайте его третьим лицам |
tls_enable | [common] | Использовать ли шифрование TLS между клиентом и сервером; для повышения безопасности рекомендуется включить |
[[proxies]] | корень | Массив туннелей/прокси. Каждый блок [[proxies]] задаёт отдельное правило |
name | [[proxies]] | Имя туннеля, уникальное в одном файле. Рекомендуется использовать осмысленные имена |
type | [[proxies]] | Протокол туннеля (http, https, tcp, udp и др.) |
localIP | [[proxies]] | IP локального сервиса (обычно не меняется) |
localPort | [[proxies]] | Порт локального сервиса (например, 80 для HTTP, 443 для HTTPS) |
remotePort | [[proxies]] | Для tcp /udp — порт, открытый на сервере FRPS |
customDomains | [[proxies]] | Для HTTP/HTTPS — список доменов, публикация сервисов по доменным именам. Домен должен быть прописан в DNS (CNAME/A) на IP FRP-сервера |
subdomain | [[proxies]] | Для HTTP/HTTPS (если сервер поддерживает subdomain_host): поддомен для доступа через FRP-сервер. Либо customDomains , либо subdomain |
[proxies.plugin] | [[proxies]] | Настройка плагинов, например, https2https для https-туннелей |
hostHeaderRewrite | [proxies.plugin] или [[proxies]] | Перезаписывает Host-заголовок при проксировании; крайне важно для работы виртуальных хостов ServBay (домен должен совпадать с локальным) |
Пример типовой настройки: публикация HTTPS-сайта ServBay
По умолчанию сайты в ServBay доступны по HTTPS и имеют SSL-сертификаты. Для публикации через FRP рекомендуется использовать тип туннеля https
и опцию hostHeaderRewrite
. Можно также использовать плагин https2https
или обычный TCP-туннель на порт 443, однако способ с https обычно удобнее и предпочтительнее для виртуальных хостов.
Пример настройки: ваш локальный сайт в ServBay работает на servbay.test
, а публичный домен — test-frp.servbay.app
. Убедитесь, что ваш публичный домен в DNS настроен на IP вашего FRP-сервера (frps.servbay.demo
).
Создайте файл frpc.toml
(например, в домашней папке ~/frpc.toml
) со следующим содержанием:
# frpc.toml — пример настройки для публикации HTTPS-сервиса ServBay
# [common]: параметры подключения к FRP-серверу
serverAddr = "frps.servbay.demo" # Укажите ваш сервер FRP (IP или домен)
serverPort = 7000 # Порт сервера
auth.method = "token"
auth.token = "servbay_demo_token" # Установите токен, также пропишите его на сервере FRPS
# Рекомендуется: шифровать трафик между клиентом и сервером
tls_enable = true
# [[proxies]]: публикация локального HTTPS-сайта ServBay
[[proxies]]
name = "servbay-website-https" # Имя туннеля на ваше усмотрение
type = "https" # Тип туннеля — HTTPS
# Настройте публичный домен, указывающий в DNS на ваш FRP-сервер
customDomains = ["test-frp.servbay.app"] # Ваш внешний домен
# Параметры локального сервиса ServBay
localIP = "127.0.0.1"
localPort = 443 # Порт HTTPS в ServBay
# ВАЖНО: настроить перезапись Host-заголовка на ваш локальный домен ServBay
# (иначе сервер не сможет корректно выбрать виртуальный хост и вернуть нужный сайт)
hostHeaderRewrite = "servbay.test" # Ваш локальный домен в ServBay
# Необязательно: добавить заголовок для определения источника (удобно для бэкенда)
[proxies.requestHeaders.set]
x-from-where = "frp-tunnel"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Обязательно измените в этом файле значения serverAddr
, serverPort
, auth.token
, customDomains
и hostHeaderRewrite
на свои собственные.
Почему важен hostHeaderRewrite
: ServBay использует web-сервер (Nginx или Caddy) с виртуальными хостами — маршрутизация запросов определяется по заголовку Host. Если вы пробрасываете запрос через FRP, оригинальный Host — это публичный домен (test-frp.servbay.app
), а не локальный (servbay.test
). Поэтому при отсутствии директивы hostHeaderRewrite
будет ошибка 404 или попадание на «сайт по умолчанию». Задайте здесь именно локальный домен сайта в ServBay!
Запуск клиента FRP
Сохраните конфиг frpc.toml
. Затем выполните из директории, где хранится конфиг (или укажите абсолютный путь):
# Если файл в текущей папке
frpc -c frpc.toml
# Если файл в домашней директории
# frpc -c ~/frpc.toml
2
3
4
5
FRP-клиент запустится в активном режиме и выведет лог подключения. При успешном соединении туннель будет поднят.
Чтобы запустить FRP-клиент в фоновом режиме (демоном), используйте команду nohup
, либо настройте запуск через launchctl (это более сложный способ и здесь не рассматривается):
# Запуск с nohup (пример для файла в домашней папке)
nohup frpc -c ~/frpc.toml &
2
Все логи попадут в файл nohup.out
, клиент продолжит работать после закрытия терминала.
Верификация сервиса и анализ логов
Проверка работоспособности
После запуска FRP-клиента и появления сообщения об успешном подключении откройте браузер и перейдите по вашему публичному домену (например, https://test-frp.servbay.app
). Проверьте:
- Страница загружается без ошибок соединения или HTTPS/SSL (если используется HTTPS)
- Возвращается HTTP 200 или другой ожидаемый статус
- Открывается именно тот контент, как при локальном доступе по адресу
https://servbay.test
- В случае HTTPS: есть защищённый значок-замок, сертификат действителен и выдан именно вашему публичному домену
Анализ и диагностика через логи
Логи клиента FRP — основной источник информации о соединении и возможных ошибках. По умолчанию при запуске frpc -c frpc.toml
все сообщения отправляются в терминал.
Для получения расширенного логирования используйте опцию debug:
frpc -c frpc.toml --log_level debug
Если в файле frpc.toml
задан параметр log_file
(например, log_file = "/var/log/frpc.log"
), сообщения пишутся туда. Для мониторинга используйте:
tail -f /path/to/your/frpc.log
Частые проблемы и их решения
Если при запуске или работе FRP возникают сложности, проверьте следующие распространённые ошибки и способы их устранения:
Проблема | Рекомендации по устранению |
---|---|
Ошибка аутентификации к серверу FRP | Проверьте параметры auth.token и auth.method в [common] : они должны в точности совпадать с сервером FRPS. Также изучите логи на стороне сервера на предмет ошибок авторизации. |
Публичный домен не открывается или не резолвится | Убедитесь, что домен из customDomains действительно прописан в DNS (CNAME или A-запись на ваш FRP-сервер). Пропингуйте домен (ping your-frp-domain.com ) или проверьте онлайн. Возможно, нужно дождаться обновления кэша DNS. |
При заходе по публичному домену открывается welcome-страница FRP | Обычно это значит, что домен правильно указывает на сервер, но сервер не связан с вашим клиентом. Проверьте совпадение настроек customDomains и типа прокси (http или https), а также разрешение сервера FRPS на работу с этим доменом. |
Локальный порт не слушается или сервис не запущен | Убедитесь, что ServBay работает, а нужный локальный сервис запущен и слушает порт, указанный в localPort . Проверьте порт с помощью lsof -i :PORT (PORT — заменить на нужное значение). |
Туннель часто обрывается или работает нестабильно | Проверьте стабильность подключения Mac и FRP-сервера. В разделе [common] попробуйте увеличить таймаут (например, heartbeat_timeout = 30 ), а также pool_count или другие параметры. Исследуйте логи FRPS на наличие ошибок или ограничений по ресурсам. |
При доступе по HTTP происходит редирект на HTTPS | Изучите конфиг web-сервера ServBay (Nginx/Caddy): возможно, настроен обязательный редирект. Если нужен только HTTP — тип должен быть http, уберите ненужные плагины. Если нужен HTTPS — настройте корректный сертификат (через FRP-плагин или напрямую на FRP-сервере). |
Ошибка HTTPS-сертификата (предупреждение браузера) | При использовании HTTPS-туннеля с локальным самоподписанным сертификатом ServBay браузер может ругаться на доверие к сертификату. Это нормально. Чтобы получить доверие, установите ServBay User CA на свою рабочую машину или используйте плагин https2http /https2https с указанием сертификата. Можно применить легитимный сертификат на FRP-сервере. Если применяется тип https с hostHeaderRewrite , именно ServBay обслуживает SSL, и всё зависит от доверия к его локальному сертификату. |
Возврат ошибки 404 при доступе | Проверьте параметр hostHeaderRewrite — он должен быть равен локальному домену сайта в ServBay. Если Host не совпадает — web-сервер не распознает виртуальный хост и отдаст 404. |
Фаервол на сервере FRP блокирует подключение | Проверьте, что порты serverPort (по умолчанию 7000) и все наружные порты для сервисов (HTTP — 80, HTTPS — 443, remotePort для TCP/UDP) открыты и пропущены через фаервол. |
Локальный фаервол мешает подключению | Обычно macOS не ограничивает исходящие подключения, однако убедитесь, что нет запрета на outbound к serverPort FRP-сервера и inbound (на 127.0.0.1) для сервисов ServBay. |
FRP-клиент пишет «connected», но сервис недоступен | Попробуйте изучить логи сервера FRPS, убедиться в отсутствии ошибок или сообщений о блокировке. Возможно, частично не прописано портовое пробрасывание или не настроено domен/порт на стороне сервера. |
Преимущества FRP в среде ServBay и рекомендации по безопасности
Использование FRP с ServBay даёт разработчикам исключительную гибкость и удобство:
- Множественная поддержка протоколов: HTTP, HTTPS, TCP, UDP и др. Можно опубликовать не только сайты, но и локальные БД (MySQL/PostgreSQL/MongoDB), Redis, SSH-службы и многое другое.
- Гибкая настройка: Простая конфигурация через TOML для проброса нескольких веб-сервисов и портов одновременно.
- Открытость и контроль: Это продвинутый open source–инструмент без зависимости от сторонних облачных сервисов.
- Безопасность: Поддержка токен-авторизации, TLS-шифрования (
tls_enable = true
), интеграция с SSL ServBay — надёжная защита ваших данных.
Рекомендации по безопасности:
- Включайте TLS: Обязательно выставляйте
tls_enable = true
в[common]
для шифрования трафика между клиентом и сервером. - Используйте сложный токен: Для параметра
auth.token
выбирайте длинные и непредсказуемые значения. Регулярно меняйте их. - Ограничивайте публикуемые сервисы: Открывайте только те порты и сайты, которые действительно нужны извне.
- Настраивайте доступ по домену: Для HTTP/HTTPS сервисов лучше работайте с доменами через
customDomains
, а не с открытым IP-адресом и портом фаервола. - Обеспечьте безопасность FRP-сервера: Открывайте только нужные порты и обязательно настраивайте фаервол по принципу «минимальных разрешений».
- Рассмотрите доступ по IP: При возможности на стороне FRP-сервера дополнительно ограничьте доступ к сервису по IP-адресам.
Следуя вышеописанным шагам и рекомендациям, вы сможете надёжно и быстро открыть в интернет любую разработанную в ServBay систему — это кардинально повысит продуктивность и упростит совместную работу!