Конфигурация службы

Файл конфигурации properties — это системная конфигурация службы FIRERPA. Он представляет собой конфигурационный файл в формате ini. Написав этот файл, вы можете заставить FIRERPA автоматически подключаться к VPN, прокси, автоматически выполнять проброс портов FRP, задавать пароль для входа, сертификаты и другие системные параметры. Вы можете ознакомиться с доступными параметрами в файле properties.example в проекте или ниже.

Формат файла

Нужно пояснить логику чтения конфигурации службы, чтобы избежать путаницы. Конфигурация службы использует стандартный формат ini и должна содержать секцию [DEFAULT]. Вы можете записывать параметры непосредственно в секцию DEFAULT или создать собственную секцию, чтобы легче понимать, откуда взялась та или иная настройка, а не смешивать всё в одном месте.

Теперь рассмотрим следующую конфигурацию. Как видите, в каждой секции есть параметр port — это допустимо; служба в итоге будет использовать порт 65001. Если один и тот же параметр встречается в разных секциях, при чтении служба принимает значение из последней секции. Поэтому, если вам кажется, что конфигурация не действует, проверьте, не переопределяется ли она последующими настройками.

[DEFAULT]
port=65000

[abc]
port=65001

Поэтому, следуя этому принципу, вы можете группировать настройки каждого сервиса, например создать секцию для службы fwd, как показано ниже.

[DEFAULT]
port=65000

[fwd]
fwd.enable=true
fwd.host=123.123.123.123
fwd.port=9911
fwd.token=abc123
fwd.rport=8080

Способы настройки

Ниже описаны несколько способов настройки конфигурации службы. Обычно мы рекомендуем использовать WebUI — так меньше всего вероятность ошибки. Но если у вас более высокие требования, например массовое развёртывание, WebUI может не подойти, и вам следует обратиться к разделу Ручная настройка.

Настройка в приложении

Настройка в приложении относительно проста, но вам также нужно заранее подготовить файл конфигурации и перенести его на телефон в виде текста. Откройте приложение, перейдите на страницу конфигурации, вставьте строку конфигурации в поле редактирования и нажмите кнопку применения конфигурации. Обратите внимание: обязательно сохраните секцию [DEFAULT]. Если вы опасаетесь ошибок, можно настроить конфигурацию через WebUI.

Настройка в приложении

Настройка в WebUI

Вы можете открыть удалённый рабочий стол WebUI и нажать значок настройки в правом верхнем углу. Как показано ниже, вы можете редактировать конфигурацию визуально или перейти в режим Raw Text для текстового редактирования. После завершения нажмите Apply Config, чтобы сохранить настройки. Однако параметры служб, такие как прокси и FRP, при этом не вступят в силу. Если нужно применить их сразу, установите флажок Reload Service, затем нажмите Apply Config — это полностью перезапустит сервер, и ваш удалённый рабочий стол временно отключится.

Настройка WebUI

Ручная настройка

При ручной настройке важно, чтобы ваш файл конфигурации был корректным по формату, иначе служба не будет его использовать. Во-первых, убедитесь, что файл содержит секцию [DEFAULT], даже если в ней нет параметров. Во-вторых, убедитесь, что используемый редактор не добавляет лишние скрытые символы; не используйте простые редакторы вроде notepad. Корректный файл конфигурации должен быть в кодировке UTF-8, а перевод строки должен быть строго \n или \r\n; рекомендуется использовать \n. Пример файла конфигурации ниже.

[DEFAULT]

[fwd]
fwd.enable=true
fwd.host=123.123.123.123
fwd.port=9911
fwd.token=abc123
fwd.rport=8080

Или, если так проще, можно поместить всё сразу в секцию DEFAULT — это тоже допустимо.

[DEFAULT]
fwd.enable=true
fwd.host=123.123.123.123
fwd.port=9911
fwd.token=abc123
fwd.rport=8080

После того как файл конфигурации готов, его нужно вручную поместить в определённый каталог на телефоне. По умолчанию возможны два варианта: если служба будет запускаться от имени root, файл конфигурации должен находиться в /data/usr/.local/; если от имени shell — в /data/local/tmp/usr/.local/. Убедитесь, что соответствующий каталог существует; при необходимости создайте его вручную. Затем переименуйте файл конфигурации в properties и отправьте его в нужный каталог с помощью adb push.

Внимание

Здесь есть особый случай: если вы используете службу, развёрнутую через приложение, приложение использует случайный родительский каталог в качестве рабочего каталога службы, поэтому путь к файлу конфигурации становится случайным, и вы не можете единообразно настраивать устройства.

Параметры конфигурации

Ниже приведён полный список доступных параметров конфигурации сервера. Не копируйте это содержимое целиком — выберите только нужные вам части или службы, скопируйте и измените их. Прямое копирование всего содержимого может привести к некорректной работе службы.

[DEFAULT]
port=65000                      ; Задаёт порт, на котором служба слушает подключения.

; Ключи webui.* разрешено использовать только в секции DEFAULT. Здесь можно заранее задать различные параметры удалённого рабочего стола.

webui.darkmode = off            ; Включает тёмную тему удалённого рабочего стола.
webui.audio = on                ; Включает звук удалённого рабочего стола (требуется Android 10+).
webui.upload-path = /data/local/tmp/uploads ; Задаёт каталог по умолчанию для загрузки файлов перетаскиванием в удалённый рабочий стол (каталог должен существовать).
webui.share-clipboard = off     ; Включает двусторонний общий доступ к буферу обмена в удалённом рабочем столе.
webui.touch.use-screen-size = off ; Использовать исходный размер экрана для расчёта координат касаний (включайте только при необходимости).
webui.webrtc = on               ; Включает WebRTC для удалённого рабочего стола.

; Задаёт адреса STUN/TURN-серверов WebRTC (несколько адресов разделяются запятыми).
; Пример STUN-сервера: stun:stun.device-farm.com
; Пример TURN-сервера: turn://user:pass@example.com:3478?transport=tcp
webui.webrtc.ice-server = stun:stun.device-farm.com 

webui.video.h264 = on           ; Включает кодирование H264.
webui.video.backend = 0         ; Задаёт реализацию видеобэкенда (0=по умолчанию, 1=аппаратный).
webui.video.scale = 0.5         ; Задаёт масштаб видео (0.1–1.0, 1.0 — полное разрешение).
webui.video.quality = 50        ; Задаёт качество видео (10–100).
webui.video.fps = 35            ; Задаёт желаемую частоту кадров видео (10–60).

; Задаёт сертификат службы. Он шифрует трафик удалённого рабочего стола и API, а также включает парольную аутентификацию. Значение ниже можно получить, выполнив 'base64 -w0 lamda.pem'.
cert=TEFNREEgU1NMIENFUlRJRklDQVRFIChDTj10ZXN0LFBBU1NXRD1hMWMwZTNlYTcwN2E1NGRlN2EwZjk1KQotLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KTUlJRXZnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS2d3Z2dTa0FnRUFBb0lCQVFEVmNMWlA5b0xRWkRIRgp5V0pTa2U0Z0crSUpmSCtMWlk0cXUzdS9OckRwSHZCN2k5V01rMWxRL2FMSGI0V3ZqelBLK1RITm9rRzc2MENRClhBTUpWS0dmYXRwcmNLUXdvMGhvWDZ2NlhsTVlZUlNRbW9wN3pSaUtnN3ZxKzV2S09DQ2RKcDFlSVNiZXcyTEgKTmYxL3JZelpwa1Q1bHoxTGZkem00eXJBS3VNa0tyZ3pnTzJRcE9CQVdYdmdiWG9BMDdidDdOODZZOGdNZFUwdAp6Ui9EcmhLTi9JMVdYSk11MU4wQW5UbDJRdEhEb0dCN0UyS0xpdmwybDZJdnRrYWJ4RE55Y2lHbUxOUGlMRklrCllPSHlnMUg3MUJ2NU04NE5TWDc1c2xuOXVNUGUzOVNFVlJoU0ptNHcvT2tXZnA5dGpZRUx3dHphdFhoSWJoS3MKaC9OZU1lOWRBZ01CQUFFQ2dnRUFCYlFuWUdlcFdKYjAydURtSnhLNGx2OFNhL0o1dzJpSldMYjk0dW1SUExRKwpTa1E5c1Zpc0JiQU1JNHc2dWFyNEFBVTh3WGxaTndPekMvM2V6dWNHRXFreEFReXM0VDB4SXRPUkF2WExxVlowCkl1WnpxNW53Si9OeFFzeEtmaWhBZkRLYlRmZjdmcG5MWlV0dlpNbG5LWUhQVExtRlFua3drckwyRE5YdDVVOTYKYXJUUDVOY0x1aDQ2dU93alJUOWhaNytYQi9ubU9LeTV4V3hoNWVMQmJJUTJrS0UvdWViUlVYRGZNdG5tbTh2aApRSG9VM3N5dzlZcE1xRDlWQWppcGlqQXRwbUlwa2w1emRWSE52Q1dCSGk2NjZxKzF6cUpHeFVUODBseHo1N2R1ClRvRFFQc1l0OFFEL3ZjNGkxajd0bDZyRzNQWkJNM05LNVR5ZFYyRnlnUUtCZ1FEYUcycnV3aWxyYUdZRzZNQWwKNEF2WW1BY0hHQWUwQjR0ZmtkdS9QandlRWQyWUF2TjJIQWV1Z1ZUSWg1eFplUlIwNFE4ZVNGenBTaEpwREpkNAp1TEhHcXJ2cmpXL1greEVIc081NnNjNjRiem1weWJWQXBlQnA4NlFGSTk4V3FmZkFyN3FzbzhweFJjNmdTRU1uCk5TcXV1Z2psYU05TlJmcUo4ci82RklmQkxRS0JnUUQ2aGJ0Z2dIdVJoTHhHYWNNaERvOVppcXJlNi9HN1dvZnQKR2FGZmFQM2xZNTNmM0hPdSsyNTZMWDY1ZWFYRTdrbXlQOGRDM2VWL24xT3dvTHdBYm1BZ2pEWVd1N09KdGk4QQpPbG9VNmtnTkVwNWcwOHpVWlBaR3NSMkZMd2VpUkgrQ3ZOdFBZakJydmFIQUtVU2lLa3BKdEpWeFpIdUl6SlpGCjVUZkM2VjNrOFFLQmdEeWp0TlpPKzA4V2hvOVROT0VTNnBnOHBHK1BlY3pPOEN3UkZJU1dYQWFNTnd6bGZTVVEKWS81YmpPUDMrRHRVRTZEdlZkRzRrc1IxeUtxV1NxTFF6dlNLVVpjTEN0YUV3bFplRmQvZEFibDdpdyt1dWdzUQpVMVdCM005bENzaDFWeUdtZWdNM3dyZzlqVlk0NFJyTWlHSnQ3TDFEcDZjM1ZwSDJBUFFac3lpOUFvR0JBTk9pCmpmeWtEYitNNXBDRllEWlkybmpHVURzcUQzZzZyb0Y2R1gxRWNOaU1JeDZ1V1h3RkkvdEsyN2RNTU9JQWUzbDkKcjVPcGFPczdhYlBZMVhsM3hQVTUvYWVPd2NrZ2d1d3FYMWN6NDlKSFhFeG9JSzE4N1NBakY5RWZQYyt6RmhVWAovaDA5MGJIeTdPWXM5cklZRDlIY0lETStzNjJKUjVtY1hsTG1Xay9CQW9HQkFKRVhQV05IWEwra1l6My91R1c3CnRKd0hUQzFlbEJjclcvaHpJMWt4ZEhXem5VaXNTWlcyVnA5b0wwSWNrQXVWQkx6eGUvR1h6OGJRTjZkOWwyZDAKdGtmUmo1TmpDOTUzS2N1cTNSekRmVU40cTcyUlVWTWlFOHVvSTBkVVZpalczN0tVMEhLcm1pbDBocU01eW9iNQpVZlhPQ2Q5SlRRSWx5Y2dNWER6Tm00S3oKLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ3FEQ0NBWkNnQXdJQkFnSVJBUHNjMVBRNXBuSDNhNk1GZkdVTXA2WXdEUVlKS29aSWh2Y05BUUVMQlFBdwpFREVPTUF3R0ExVUVDZ3dGVEVGTlJFRXdIaGNOTWpBd01UQXhNREF3TURBeFdoY05Namt4TWpJNU1EQXdNREF4CldqQVBNUTB3Q3dZRFZRUUREQVIwWlhOME1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0MKQVFFQTFYQzJUL2FDMEdReHhjbGlVcEh1SUJ2aUNYeC9pMldPS3J0N3Z6YXc2Ujd3ZTR2VmpKTlpVUDJpeDIrRgpyNDh6eXZreHphSkJ1K3RBa0Z3RENWU2huMnJhYTNDa01LTklhRityK2w1VEdHRVVrSnFLZTgwWWlvTzc2dnViCnlqZ2duU2FkWGlFbTNzTml4elg5ZjYyTTJhWkUrWmM5UzMzYzV1TXF3Q3JqSkNxNE00RHRrS1RnUUZsNzRHMTYKQU5PMjdlemZPbVBJREhWTkxjMGZ3NjRTamZ5TlZseVRMdFRkQUowNWRrTFJ3NkJnZXhOaWk0cjVkcGVpTDdaRwptOFF6Y25JaHBpelQ0aXhTSkdEaDhvTlIrOVFiK1RQT0RVbCsrYkpaL2JqRDN0L1VoRlVZVWladU1QenBGbjZmCmJZMkJDOExjMnJWNFNHNFNySWZ6WGpIdlhRSURBUUFCTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFBWEQ0L1cKQjBhSW1aWGpQbTRxUnBOazJmUnpjU1g4MGw2TlZaWWxJV3ZYalFxUXdXZnMvSGczZDVzYUpickFmcWVPa1lQdQpjeXJEWFZPdC9RTEVDOTFBSGtjRWJ1R0dPMGNFU2YyOHdUM1UzRnJJb2cxS1VyTURqWFFIb09vZEJpOGdNaVBmCmROcWhMSTdkNDJBTXJKU3dZUTlSUG9vWG9UZ2xDa0d3R291RDhuS0V5MmNHeVMxM3lQcDRseC9TWTR1QkRFU0sKRlErR0ZRTExGQktQZHZNc2x0cHYyQWFMWmR3clF4aFQ2aTU1U1puNStLb3c1TGxYL0RHdUw5UnRPdmZ2T0tzZQpRZ3pOQUg3QkYzbGdvQmJjYk9yZkVQazY1ZEZRN0NXYi91aDZjVmlmSjdxQzkvL0xhdElmb1VQVnJiRXdZL2dRCk5BRXFYclduMGZuYUc0cUEKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2xEQ0NBWHdDQVFBd0RRWUpLb1pJaHZjTkFRRUxCUUF3RURFT01Bd0dBMVVFQ2d3RlRFRk5SRUV3SGhjTgpNakF3TVRBeE1EQXdNREF4V2hjTk1qa3hNakk1TURBd01EQXhXakFRTVE0d0RBWURWUVFLREFWTVFVMUVRVENDCkFTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTG5xZkJadnJHWmFxZ2s1bXNDUlJwUHoKcC8rNDY0akJrbmxtVEtldE9ja0RUVXE4VjZmSC8yR2ZiNkhqam9ENXBrQ3RENW1TS2thSE5odXhMWHNGZkVmYwpLbG1ubjNacGp5Tk9IRUEvaUFPMkR5RVlhMDh4U2V2TTdXb2piRjdjTmo1L0RZZzdlYjBpMCsvL2JCbGg4bmxPCmdoU1VoQ1RNNVBDb2ZMRFU4c1ZYdVlBaUdVNlV6QnJJQzB2SEVsdERraUpWTHBjQ3RzS2pFWk9za1BkQWM3dTYKL2FBMFA1R29uWjVVa1JEWXBhK2plSlVhYnFXWlFRRWd0bXZqbG1VVWlYd3UwalJuajFuMFQzZlBRRDNnQStMSQp2QUU5dmd2cFk1WFFqNm90cEJ2c1ozTUpKTktjVU1RdTF6T0FOVHpPMThUbEE4S29CTnNCeThaOURRWktYRjhDCkF3RUFBVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBZUduL055cUlSSS8wQUdxdkhQOTdLdFE3NlRqNmFjaGIKMzBMSVhXcCtZSFVhTWVBVmpkMlo3alNRcDVtWlpGbCtrMWZiMzM3SWVhR1hvZlZJMjFlSzUyUVgydGVOb0JrQQovVi9PMUh1MzUvK2FpejB4c2RENndXdndvNEZ5MWpsbWFlSmh3ZFFhY0JsREdGQTJqRkp4dUVwYWhmeFp2VXNiCjNqNXpVMFdLVFVDZkVEZ1hGd0J3MTJ4a3UvN1RNZENFYlJzWWFaM3pGVEMyMjZsUWJVRE43d2VxRndTRCt0QjYKUnVoSXhlOCtjRndBc0FXSENsZXJLZ1pucjN0NVFGMDc4cFcyR0h5OENzSjdWM01aVDVsWjQzbFM1TklCOUp6WgpTWXhaL2l6aFJ5aDVxUjczdUFnc0phTDU2QmorY1Fxbm9UcWhMWlZsN0orTTZXaFdLem9qc0E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==

; Задаёт пользовательский пароль для входа в удалённый рабочий стол, 6–32 символа. Действует только при использовании сертификата службы.
ssl-web-credential=password123

; Задаёт заголовок Access-Control-Allow-Origin для WebUI firerpa и его API, позволяя встраивать функции firerpa в ваши веб-приложения.
; См. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
allow_origin=https://example.com

; Если касания на удалённом рабочем столе смещаются или не отвечают, установите touch.backend в system. Доступные варианты: system | native (по умолчанию)
touch.backend=system

; Задаёт файл журнала службы (каталог должен существовать)
logfile=/data/local/tmp/server.log

; Не записывайте следующие параметры вручную. Используйте наше сопутствующее решение для развёртывания OpenVPN-сервера и встроенную команду для генерации этой конфигурации.
[openvpn]
openvpn.proto=udp
openvpn.cipher=AES-256-GCM
openvpn.host=123.123.123.123
openvpn.port=1190
openvpn.ca=LS0tLS1CRU...
openvpn.cert=LS0tLS1CRU...
openvpn.key=LS0tLS1CRU...
openvpn.tls_encryption=
openvpn.tls_key_direction=
openvpn.tls_key=

; Следующие параметры можно настроить только вручную.
openvpn.global=false            ; Включает глобальный VPN.
openvpn.enable=true             ; Включает службу true | false

; Эта конфигурация позволяет устройству автоматически использовать прокси-сервер при запуске.
[gproxy]
gproxy.enable=true              ; Включает службу true | false
gproxy.type=http-connect        ; Тип прокси: http-connect, https-connect, socks5, shadowsocks
gproxy.host=172.1.1.1           ; Адрес прокси-сервера
gproxy.port=8080                ; Порт прокси-сервера
gproxy.password=                ; Пароль для входа на прокси-сервер (пусто — без аутентификации)
gproxy.login=                   ; Имя пользователя для входа на прокси-сервер (пусто — без аутентификации; для типа shadowsocks — метод шифрования)
gproxy.nameserver=              ; Пользовательский DNS-сервер
gproxy.drop_udp=false           ; Отбрасывать ли UDP-пакеты.
gproxy.udp_proxy=false          ; Проксировать ли UDP-пакеты (требуется поддержка прокси, например socks5 или shadowsocks).
gproxy.bypass_local_subnet=true ; Не проксировать трафик локальной сети.
gproxy.dns_proxy=false          ; Направлять DNS-запросы через прокси (требуется DNS-сервер с поддержкой UDP и TCP).
gproxy.uid=                     ; Проксировать только указанный UID (по умолчанию — глобально).

[cron]
cron.enable=true                ; Включает службу true | false

[sshd]
sshd.enable=true                ; Включает службу true | false

[fwd]
fwd.enable=true                 ; Включает службу true | false
fwd.rport=0                     ; Порт для проброса на удалённую сторону (0 — случайное назначение)
fwd.host=123.123.123.123        ; Адрес FRP-сервера
fwd.port=9911                   ; Порт FRP-сервера
fwd.protocol=tcp                ; Протокол FRP
fwd.token=abc123                ; Токен аутентификации FRP

[adb]
adb.enable=true                 ; Включает службу true | false
adb.directory=/data/local/tmp   ; Рабочий каталог по умолчанию для встроенного ADB (рабочий каталог adb shell)
; Внимание: если задано true, подключение ADB получит права root, иначе — права shell. Если этот параметр равен false,
; вы будете использовать adb shell, похожий на обычный, и не сможете использовать встроенные команды. Учтите, что ADB не использует TLS-соединение, поэтому трафик может отслеживаться. Из соображений безопасности при запуске службы с сертификатом это значение по умолчанию становится false. Однако если вы явно укажете его в файле properties, приоритет будет у значения из файла, и ответственность за безопасность лежит на вас.
adb.privileged=true

[tunnel2]
tunnel2.enable=true             ; Включает службу true | false
; Аутентификация для мостового прокси требуется только если заданы и логин, и пароль. Если любое из полей пустое, аутентификация не требуется.
tunnel2.login=lamda
tunnel2.password=1234           ; Пароль для входа в мостовой прокси
; Исходящий интерфейс (rmnet|wlan). Если указан rmnet, прокси будет пытаться отправлять ваши запросы через мобильные данные. Если указан wlan, запросы будут отправляться через интерфейс wlan. Если значение пустое, запросы будут отправляться через сеть по умолчанию.
tunnel2.iface=rmnet

[mdns]
mdns.enable=false               ; Включает или отключает true | false
mdns.meta=false                 ; Добавляет TXT-метаданные в mDNS. При включении позволяет таким инструментам, как python-zeroconf, запрашивать информацию об устройстве: модель, ABI и идентификатор устройства. По умолчанию отключено.
mdns.name=DEVICEID-UNIQUE.lamda ; Задаёт доменное имя объявления с локальным уникальным ID. По умолчанию {DEVICEID-UNIQUE}.lamda. Если имя уже существует в локальной сети, будет автоматически добавлен суффикс ID.
mdns.service=lamda              ; Задаёт имя объявляемой службы. По умолчанию lamda, то есть _lamda._tcp.local.