Возникла задача выводить около 200 устройств во внешний мир. Проблема, что все устройства за NAT и провайдер не дает внешний IP
Сначала была идея использовать TailScale, но базовая учетка предлагает 100 устройств максимум и сервер также нужно подключать к TailScale что было невозможно в силу некоторых причин
Решение оказалось простое, хоть и с китайским веб-интерфейсом…
Сервер
Скачивание нужных файлов
- Скачиваем frp. Благо он доступен для широкого круга платформ
Поскольку настраиваем сначала серверную часть, нужно лишь 2 файла с архива: frps и frps.toml
На сервере создал директорию frps в root. Вот полный путь:/root/frps
. Туда закидаем два файла о которых шла речь выше - Скачиваем панель управления сервером. Репозиторий архивный, потому сделал себе копию
Создаем директорию в/root/frps-panel
. В нее закидаем файлы, что скачали выше (для своей архитектуры)
Настройка файлов конфигурации
- Для директорий даем права
0777
- Теперь нужно настроить сервер. Вся конфигурация находится в файле
/root/frps/frps.toml
. Удалите текущие содержимое и вставьте то что ниже
#Сервер доступен с интернета
bindAddr = "0.0.0.0"
#Работает на порту 7000
bindPort = 7000
#Включаем доступ по веб
webServer.addr = "0.0.0.0"
#Порт для управления
webServer.port = 7500
#Логин
webServer.user = "admin"
#Пароль
webServer.password = "admin"
#Добавляем плагин для управления веб-интерфейсом
[[httpPlugins]]
name = "frps-panel"
addr = "127.0.0.1:7200"
path = "/handler"
ops = ["Login","NewWorkConn","NewUserConn","NewProxy","Ping"]
Полный пример настройки сервера. Будьте внимательны, поскольку это может конфликтовать с китайской панелью управления https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml
- Дальше настраиваем панель управления. В файле
/root/frps-panel/frps-panel.toml
. Замените содержимое на то что ниже
Немного логики работы. Панель по API подключается к серверу и далее им управляетadmin_user
,admin_pwd
— это данные для входа в панель управления
dashboard_user, dashboard_pwd — это данные сервера (его API)
# basic options
[common]
# frps panel config info
plugin_addr = "0.0.0.0"
plugin_port = 7200
admin_user = "admin"
admin_pwd = "admin"
# specified login state keep time
admin_keep_time = 0
# enable tls
tls_mode = false
#tls_cert_file = "cert.crt"
#tls_key_file = "cert.key"
# frp dashboard info
dashboard_addr = "0.0.0.0"
dashboard_port = 7500
dashboard_user = "admin"
dashboard_pwd = "admin"
Проверка работы
- Теперь проверяем что все работает в тестовом режиме
Запускаем командуcd /root/frps; ./frps -c ./frps.toml
В браузере вводим IP сервера и порт 7500, в результате должны увидеть запрос логин/пароля.
По умолчанию этоadmin
/admin

- Теперь запускаем панель управления
Запускаем командуcd /root/frps-panel; ./frps-panel -c ./frps-panel.toml
В браузере вводим IP сервера и порт 7200, в результате должны увидеть запрос логин/пароля.
По умолчанию этоadmin
/admin
Интерфейс будет китайский, но переводчик неплохо решает проблему. Да и не так часто вы будете обращаться до этой панели

Автоматический запуск
- Если все работает, пора заставить запускать сервер автоматически как демон
Переходим в директорию/etc/systemd/system/
Создаем файлfrps.service
со следующим содержимым
[Unit]
Description = frp multiuser service
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# config of frps.toml,you should change the file path
Environment=FRPS_OPTS="-c /root/frps/frps.toml"
# command of run frps,you should change the file path
ExecStart = /root/frps/frps $FRPS_OPTS
[Install]
WantedBy = multi-user.target
Далееsystemctl daemon-reload
service frps start
В этой же директории создаем файл frps-panel.service
со следующим содержимым
[Unit]
Description = frp multiuser service
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# config of frps-panel.toml,you should change the file path
Environment=FRPS_PANEL_OPTS="-c /root/frps-panel/frps-panel.toml"
# command of run frps-panel,you should change the file path
ExecStart = /root/frps-panel/frps-panel $FRPS_PANEL_OPTS
[Install]
WantedBy = multi-user.target
Далееsystemctl daemon-reload
service frps-panel start
Перепроверяем что службы стартанули и все нормально service frps status
service frps-panel status
Создаем клиента

Клиент
- Скачиваем frp
- Поскольку настраиваем сначала клиентскую часть, нужно лишь 2 файла с архива: frp и frp.toml
- На клиенте создал директорию frp в root. Вот полный путь:
/root/frp
. Туда закидаем два файла о которых шла речь выше - Для директорий даем права
0777
- Теперь нужно настроить сервер. Вся конфигурация находится в файле
/root/frp/frp.toml
. Удалите текущие содержимое и вставьте то что ниже
#IP центрального сервера
serverAddr = "46.217.55.85"
serverPort = 7000
#Веб-интерфейс на клиенте
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
#Идентификация пользователя
user = "123"
[metadatas]
token = "123"
#Прокидаем локальный порт 5001. На сервере девайс будет доступен по порту 12001
[[proxies]]
name = "syno"
type = "tcp"
localIP = "192.168.88.5"
localPort = 5001
remotePort = 12001
[[proxies]]
name = "myserver"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 12000
Если хотите больше вариантов проксирования https://github.com/fatedier/frp/blob/dev/conf/frpc_full_example.toml
- Теперь проверяем что все работает в тестовом режиме
Запускаем командуcd /root/frp; ./frp -c ./frp.toml
В браузере вводим IP сервера и порт 7400, в результате должны увидеть запрос логин/пароля.
По умолчанию этоadmin
/admin
- Если все работает, пора заставить запускать сервер автоматически как демон
- Переходим в директорию
/etc/systemd/system/
- Создаем файл
frp.service
со следующим содержимым
[Unit]
Description = frp multiuser service
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# config of frp.toml,you should change the file path
Environment=frp_OPTS="-c /root/frp/frp.toml"
# command of run frp,you should change the file path
ExecStart = /root/frp/frp $frp_OPTS
[Install]
WantedBy = multi-user.target
Далееsystemctl daemon-reload
service frp start
Перепроверяем что службы стартанули и все нормально service frp status