Відкриття локального середовища ServBay для зовнішнього доступу (NAT-траверс) за допомогою FRP
FRP — це високопродуктивний, простий у використанні інструмент реверс-проксі, що ідеально підходить для безпечного та зручного відкриття локальних сервісів (наприклад, вебсайтів, API, баз даних тощо) у глобальній мережі Інтернет. Використовуючи архітектуру «клієнт» (frpc
) — «сервер» (frps
), FRP ефективно вирішує завдання пробивання NAT/фаєрволу.
Цей гайд докладно описує, як користувачам ServBay — особливо в macOS — налаштувати FRP-клієнт (frpc
) для безпечного тунелювання, щоб ваші вебсервіси, що працюють у ServBay, стали доступними із зовнішнього світу. Це особливо корисно для віддалених демонстрацій, колаборативної розробки, прийому webhook-запитів чи зовнішнього тестування API.
Технічний огляд принципу роботи
Основна ідея FRP — побудова зашифрованого тунелю від внутрішньої машини (де працює frpc
, тобто ваш комп’ютер із ServBay) до публічного сервера (frps
). Коли зовнішній користувач звертається до вашого сервісу, його запит спершу потрапляє на публічний сервер FRPS. Далі цей запит пересилається по безпечному тунелю на локальний FRPC, який маршрутизує його до локального сервісу у ServBay (наприклад, вашого сайту чи API). Відповідь повертається у зворотному напрямку.
Цей механізм дозволяє обійти внутрішній NAT та обмеження фаєрволу, забезпечуючи публічний доступ до локальних сервісів. FRP підтримує протоколи TCP, UDP, HTTP, HTTPS тощо, розширюючи можливості віддаленого доступу до середовища розробки ServBay.
Типові сценарії використання
Комбінуючи ServBay і FRP, ви легко організуєте такі задачі у процесі розробки:
- Віддалена демонстрація та співпраця: Демонструйте те, над чим працюєте локально, колегам чи клієнтам без розгортання на сторонніх серверах.
- Тестування Webhook: Приймайте Webhook повідомлення від третіх сервісів (наприклад, GitHub, Stripe, WeChat Pay) — і одразу відлагоджуйте їх обробку прямо на своєму Mac.
- Спільна розробка API: Відкрийте локальний бекенд API для зовнішніх фронтенд-розробників чи партнерів для спільного тестування.
- Тестування на мобільних пристроях: Безпосередньо з мобільних гаджетів відкривайте вебсайти або застосунки у середовищі ServBay для перевірки сумісності.
- Тимчасове поширення: Швидко діліться локальними файлами чи сервісами без складної конфігурації.
Передумови
Перед налаштуванням FRP переконайтесь, що:
- ServBay встановлено та запущено: На вашому Mac із macOS ServBay інстальовано, і всі сервіси (наприклад, сайт) доступні локально з браузера.
- Ви маєте публічний сервер з FRPS: Потрібен VPS чи виділений сервер із публічною IP-адресою, на якому працює серверна частина FRP (
frps
). У цьому гайді розглядається лише налаштування клієнта (frpc
). - Публічний домен (опційно, але рекомендується для HTTP/HTTPS): Якщо ви хочете доступ за доменом, маєте мати власний домен із можливістю редагування DNS.
- Встановлено FRP-клієнт (
frpc
): FRP-клієнт необхідно окремо завантажити й встановити (у комплект ServBay не входить).
Підготовка середовища та встановлення FRP-клієнта
Виконайте наступні кроки для інсталяції FRP-клієнта (frpc
) на вашому Mac із ServBay.
Завантаження FRP-клієнта: Перейдіть на сторінку Releases FRP на GitHub і завантажте найновіший дистрибутив для вашої архітектури:
- Для 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
15Введіть свій пароль для виконання
sudo
.Перевірка встановлення: Відкрийте нове вікно терміналу й виконайте команду для перевірки:
bashfrpc -v # Очікуваний результат: frpc version 0.52.3
1
2Якщо бачите версію — клієнт встановлено успішно.
Налаштування тунелю FRP-клієнта
Налаштування FRP-клієнта виконується через файл frpc.toml
(у нових версіях FRP рекомендовано формат TOML). Вам потрібно створити чи відредагувати цей файл, щоб прописати підключення до FRP-сервера і звʼязок між внутрішнім (локальним) сервісом і зовнішнім світом.
Огляд конфігурації frpc.toml
Приклад базової структури для frpc.toml
:
toml
# frpc.toml — приклад конфігурації FRP-клієнта
# [common] — налаштування підключення до сервера
serverAddr = "your-frps-server.com" # IP чи домен FRP-сервера
serverPort = 7000 # Порт для підкл. клієнта (за замовчуванням 7000)
# Аутентифікація (рекомендується token)
auth.method = "token"
auth.token = "your_authentication_token" # Має збігатися з налаштуваннями сервера
# Опціонально: увімкнення TLS для безпеки
# tls_enable = true
# [[proxies]] — конфігурація одного чи кількох тунелів
[[proxies]]
name = "my-web-service" # Унікальна назва для кожного тунелю
type = "http" # Тип: http, https, tcp, udp, stcp, xtcp тощо
localIP = "127.0.0.1" # IP локального сервісу
localPort = 80 # Порт локального сервісу (наприклад, сервіс HTTP у ServBay)
customDomains = ["servbay.your-domain.com"] # Домен для зовнішнього доступу (тільки http/https). **Домен має бути направлений через DNS на IP FRP-сервера.**
# Можна додати більше проксі-блоків [[proxies]] для інших тунелів
# [[proxies]]
# ... (налаштування іншого сервісу)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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-адреса або домен FRP-сервера (frps ). |
serverPort | [common] | Порт підключення клієнта (FRPC) до сервера (типово 7000). Вкажіть відповідно до налаштувань сервера. |
auth.method | [common] | Метод аутентифікації (зазвичай token ). Має відповідати серверному налаштуванню. |
auth.token | auth (в [common] ) | Секретний ключ для аутентифікації. Не розголошуйте цей токен. |
tls_enable | [common] | Чи увімкнути TLS між клієнтом і сервером. Для безпеки рекомендується true . |
[[proxies]] | верхній рівень | Массив тунельних проксі-блоків. Кожен [[proxies]] — окрема схема переадресації/мапінгу. |
name | [[proxies]] | Унікальна назва тунелю у межах файлу. Рекомендується вказувати функціональну назву. |
type | [[proxies]] | Тип протоколу: http, https, tcp, udp тощо. Обирайте відповідно до типу локального сервісу. |
localIP | [[proxies]] | IP-адреса локального сервісу (типово 127.0.0.1 ). |
localPort | [[proxies]] | Внутрішній порт сервісу (HTTP — 80, HTTPS — 443, MySQL — 3306 тощо). |
remotePort | [[proxies]] | (тільки для tcp/udp) Відкритий порт на FRP-сервері для зовнішнього доступу через IP:remotePort. |
customDomains | [[proxies]] | (тільки для http/https) Домен(и) для доступу. Домен має бути направлений у DNS на IP FRP-сервера. |
subdomain | [[proxies]] | (http/https, якщо сервіс підтримує) Піддомен, якщо сервер налаштований з підтримкою subdomain_host. |
[proxies.plugin] | [[proxies]] | Налаштування плагінів, наприклад, https2https для локального HTTPS. |
hostHeaderRewrite | [proxies.plugin] або [[proxies]] | Переписування заголовка Host — критично важливо для віртуального хостингу ServBay. Задайте точний домен, що прописаний у ServBay. |
Типова конфігурація: тунелюємо HTTPS-сайт через ServBay
У ServBay типово сайти запускаються з HTTPS і автоматично отримують SSL-сертифікати. Для відкриття локального HTTPS через FRP частіше застосовують тип проксі https
та параметр hostHeaderRewrite
, щоб віртуальний хостинг ServBay коректно маршрутизував запити. Також можна використовувати плагін https2https
чи тип tcp
для прямої проксії порту 443, але оптимальне рішення — https
+hostHeaderRewrite
.
Приклад налаштування публічного доступу до локального сайту (наприклад, servbay.test
), тунельованого на зовнішній домен (наприклад, test-frp.servbay.app
) через FRP-сервер з адресою frps.servbay.demo
. Переконайтесь, що домен (наприклад, test-frp.servbay.app
) вже прописаний у DNS на IP FRP-серверу.
Створіть файл frpc.toml
(наприклад, у домашній директорії: ~/frpc.toml
):
toml
# frpc.toml — Приклад тунелювання сервісу HTTPS із ServBay
# [common] — підключення до FRP-серверу
serverAddr = "frps.servbay.demo" # Замість цього — ваш сервер (IP/домен)
serverPort = 7000 # Порт вашого сервера
auth.method = "token"
auth.token = "servbay_demo_token" # Задайте ваш токен автентифікації, що співпадає з сервером
# Рекомендується: увімкнення TLS
tls_enable = true
# [[proxies]] — проксування локального HTTPS-сервісу ServBay
[[proxies]]
name = "servbay-website-https" # Назва (має бути унікальною)
type = "https" # Тип тунелю
# Зовнішній домен — має вести на ваш FRP-сервер
customDomains = ["test-frp.servbay.app"] # Вказати ваш домен
# Налаштування локального сервісу
localIP = "127.0.0.1" # ServBay зазвичай працює на 127.0.0.1
localPort = 443 # Порт HTTPS у ServBay
# ВАЖЛИВО: переписати Host на локальний домен сайту
hostHeaderRewrite = "servbay.test" # Замініть на домен сайту, прописаний у ServBay
# Опціонально: власний заголовок для ідентифікації трафіку через FRP
[proxies.requestHeaders.set]
x-from-where = "frp-tunnel"
1
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
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
Підставте актуальні значення у параметри serverAddr
, serverPort
, auth.token
, customDomains
, hostHeaderRewrite
.
Чому важливо налаштувати hostHeaderRewrite
: У ServBay вебсервер (наприклад, Nginx або Caddy) розділяє сайти за заголовком Host. Якщо FRP тунелює на новий домен (test-frp.servbay.app
), але вебсервер очікує локальний (servbay.test
), без hostHeaderRewrite
повертається 404 або майстер-домен. Тому критично переписати Host на локальний, прописаний у ServBay.
Запуск FRP-клієнта
Збережіть файл frpc.toml
. Відкрийте термінал, перейдіть в папку з цим файлом (або пропишіть повний шлях у команді):
bash
# Якщо файл у поточній папці:
frpc -c frpc.toml
# Якщо файл у домашній директорії:
# frpc -c ~/frpc.toml
1
2
3
4
5
2
3
4
5
FRPC запуститься у передньому потокові, ви побачите логи з підключенням. Якщо тунель встановлено, сервіс буде доступний з Інтернету.
Для запуску у фоновому режимі використовуйте nohup
чи утиліти macOS (launchctl
):
bash
# Для запуску з домашньої директорії:
nohup frpc -c ~/frpc.toml &
1
2
2
З виходом у файл nohup.out
. Для багатогранного автозапуску рекомендується використовувати launchctl (деталі поза цим гайдом).
Перевірка сервісу та діагностика логів
Перевірка працездатності
Після старту FRPC і отримання логів про підключення відкрийте браузер, перейдіть за доменом (наприклад, https://test-frp.servbay.app) й перевірте:
- Сторінка коректно завантажується (без помилок з'єднання, помилок сертифіката).
- Відповідь — HTTP 200 чи очікуваний статус.
- Вміст ідентичний локальному (https://servbay.test).
- Для HTTPS перевірте замок у адресному рядку та коректність SSL-сертифікату на зовнішньому домені.
Діагностика логів
FRPC виводить логи у термінал під час запуску. Спостерігайте за появою помилок чи попереджень.
Для детальної діагностики (debug-логування):
bash
frpc -c frpc.toml --log_level debug
1
Якщо в frpc.toml
задано опцію log_file
(наприклад, log_file = "/var/log/frpc.log"
), логи можна переглядати через:
bash
tail -f /шлях/до/вашого/frpc.log
1
Типові проблеми та їх вирішення
Проблема | Рішення |
---|---|
Помилка автентифікації | Перевірте налаштування auth.token і auth.method у [common] — вони мають повністю збігатися з серверними. Дивіться логи FRPS на сервері для отримання деталей. |
Домен не відкривається | Переконайтесь, що домен з customDomains правильно направлений у DNS (A/CNAME) на IP FRP-сервера. Перевірте через ping your-frp-domain.com чи онлайн-інструменти, зачекайте оновлення кешу DNS. |
Відкривається сторінка FRP Welcome | Це означає, що домен спрямований на сервер, але серверна частина FRP не знайшла проксі для цього домену. Перевірте збіг customDomains та коректність типу http чи https . Перевірте також серверні налаштування. |
Порт локального сервісу зайнятий | Переконайтесь, що сервіс ServBay працює на тому ж порту, що й прописано у localPort . Скористайтесь, наприклад, lsof -i :PORT , щоб перевірити, чи порт відкритий вашим сервісом. |
Тунель регулярно падає/нестабільний | Перевірте стабільність інтернету на клієнтській і серверній стороні. Можна збільшити таймаут (heartbeat_timeout = 30 ) чи пул з'єднань (pool_count ). Перевіряйте лог сервера FRPS. |
HTTP-проксі перенаправляє на HTTPS | Перевірте налаштування Nginx/Caddy — чи не вимушене перенаправлення. Якщо потрібно відкрити HTTP, задайте type = http і приберіть зайві плагіни. Для HTTPS — перевірте коректність SSL/сертифікату. |
Помилки сертифіката у браузері | Використання self-signed чи CA-сертифіката через ServBay може спричинити застереження браузера. Для довіри встановіть CA-сертифікат на клієнті або проксіюйте через плагіни https2http /https2https , вказавши шлях до сертифікатів. Або використовуйте валідний SSL на самому FRP-сервері. Якщо проксіюєте з https і використовуєте hostHeaderRewrite , браузер довіряє сертифікату ServBay. |
404 при доступі | Перевірте, чи у hostHeaderRewrite записаний правильний домен (наприклад, servbay.test ). Інакше ServBay не зможе коректно знайти віртуальний хост. |
Фаєрвол FRP-сервера блокує порт | Відкрийте порт serverPort (типово 7000) та всі необхідні зовнішні порти для сервісів (HTTP — 80, HTTPS — 443, або зазначені у remotePort ). |
Фаєрвол на macOS блокує з'єднання | Переконайтесь, що нема правил блокування вихідних підключень до serverPort . macOS дозволяє такі з'єднання за замовчуванням. Також не має бути обмежень для локальних портів (localPort ). |
Лог клієнта: підключення встановлено, але сервіс недоступний | Можлива проблема у конфігурації або мережі на сервері (FRPS). Перегляньте логи FRP-сервера і переконайтесь у наявності правильної схеми перенаправлення та доменного налаштування. |
Переваги FRP у середовищі ServBay та рекомендації з безпеки
Комбінація FRP і ServBay надає розробникам:
- Підтримка різних протоколів: FRP працює з HTTP, HTTPS, TCP, UDP тощо. Ви можете відкривати не лише сайти, а й бази даних (MySQL, PostgreSQL, MongoDB), Redis, SSH.
- Гнучка конфігурація: Кілька тунелів у одному файлі TOML — легко відкривати декілька сайтів/сервісів одночасно.
- Відкритість і контроль: FRP — зрілий open source-проєкт, ви маєте повний контроль і не залежите від сторонніх платформ.
- Безпека: Аутентифікація token-ом, TLS-шифрування (за рахунок
tls_enable = true
). Разом із SSL-менеджментом ServBay це забезпечує додаткову безпеку вашого середовища.
Рекомендації щодо безпеки:
- Вимикайте TLS: Обов’язково параметр
tls_enable = true
у[common]
для шифрування каналу між клієнтом та FRPS. - Використовуйте складний токен: Надійний і складний
auth.token
, змінюйте його регулярно. - Обмежуйте відкриті сервіси: Відкривайте тільки ті із них, які реально потрібні зовні.
- Використовуйте домени замість IP: Для HTTP/HTTPS у пріоритеті — доступ за доменами (
customDomains
). - Захищайте сервер FRP: Відкривайте лише необхідні порти та налаштуйте фаєрвол.
- Додаткові контролі доступу: Якщо FRPS підтримує, обмежуйте доступ за IP чи іншими правилами.
Дотримуючись цих налаштувань і порад, ви зможете просто і безпечно відкрити свої локальні сервіси через FRP та ServBay зовнішньому світу, максимально оптимізуючи робочий процес розробки.