Повторный запуск install-server.sh обнаруживает установку и предлагает меню: обновить версию (конфиг сохраняется), переконфигурировать, удалить. - конфиг установки в /opt/free-turn-proxy/install.conf (chmod 600) - выбор версии релиза при установке (список с GitHub API, дефолт latest) - iptables -C перед -I: нет дублей правил при повторе - атомарная подмена бинарника systemd + restart - docker compose pull для подтягивания нового образа
8.1 KiB
Развёртывание сервера
Для работы сервера 24/7 его необходимо настроить как службу. У вас есть два пути: Docker (рекомендуется) или классический systemd.
Tip
Автоматическая установка Проще всего развернуть сервер с помощью интерактивного скрипта (выполнит установку Docker/systemd, настройку файрвола и обфускации):
curl -fsSL https://raw.githubusercontent.com/samosvalishe/free-turn-proxy/master/scripts/install-server.sh -o install-server.sh sudo bash install-server.shСкрипт идемпотентен: повторный запуск обнаружит существующую установку и предложит меню — обновить версию (конфиг и ключ сохраняются), переконфигурировать или удалить. При установке можно выбрать конкретную версию релиза или
latest.Если вы хотите всё настроить руками — следуйте инструкциям ниже.
Подготовка: Ключ обфускации
Если вы настраиваете всё вручную, сгенерируйте общий 64-символьный hex-ключ. Он должен совпадать на сервере и клиенте:
openssl rand -hex 32
Скопируйте ключ — далее в примерах он обозначен как <ВАШ_КЛЮЧ>.
Способ 1: Docker Compose (Рекомендуется)
-
Установите Docker, если его еще нет:
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh -
Создайте директорию проекта и файл
docker-compose.yml:mkdir -p /opt/free-turn-proxy && cd /opt/free-turn-proxy nano docker-compose.yml -
Вставьте конфиг (замените порты и
<ВАШ_КЛЮЧ>на свои):services: free-turn-proxy: image: ghcr.io/samosvalishe/free-turn-proxy:latest container_name: free-turn-proxy network_mode: "host" # Важно для прямого доступа к локальному WireGuard (127.0.0.1:51820) restart: unless-stopped environment: - CONNECT_ADDR=127.0.0.1:51820 # Порт ВАШЕГО VPN (WG/AmneziaWG/Xray) - LISTEN_ADDR=0.0.0.0:56000 # Внешний порт, к которому будет подключаться клиент - MODE=udp # udp для WG/Amnezia, tcp для Xray/VLESS - OBF_PROFILE=rtpopus # Обязательная маскировка - OBF_KEY=<ВАШ_КЛЮЧ> # Ваш сгенерированный 64-hex ключ # Раскомментируйте ниже, чтобы включить авторизацию по Client ID # - CLIENTS_FILE=/opt/free-turn-proxy/clients.json # volumes: # - /opt/free-turn-proxy/clients.json:/opt/free-turn-proxy/clients.json -
Запустите контейнер:
docker compose up -dПосмотреть логи:
docker compose logs -f
Способ 2: systemd (Без Docker)
-
Скачайте бинарник в
/opt/free-turn-proxy:sudo mkdir -p /opt/free-turn-proxy sudo curl -L -o /opt/free-turn-proxy/server https://github.com/samosvalishe/free-turn-proxy/releases/latest/download/server-linux-amd64 sudo chmod +x /opt/free-turn-proxy/server(Для ARM-сервера замените
-amd64на-arm64) -
Создайте файл службы:
sudo nano /etc/systemd/system/free-turn-proxy.service -
Вставьте конфиг (замените порты и
<ВАШ_КЛЮЧ>на свои):[Unit] Description=Free TURN Proxy Server After=network.target [Service] Type=simple # Укажите ваши порты и ключ обфускации. # Для авторизации по Client ID добавьте: -clients-file /opt/free-turn-proxy/clients.json ExecStart=/opt/free-turn-proxy/server -listen 0.0.0.0:56000 -connect 127.0.0.1:51820 -obf-profile rtpopus -obf-key <ВАШ_КЛЮЧ> Restart=always RestartSec=5 User=nobody Group=nogroup [Install] WantedBy=multi-user.target(Примечание:
User=nobodyне может биндить порты < 1024 — используйте внешний порт > 1024) -
Запустите службу и добавьте в автозагрузку:
sudo systemctl daemon-reload sudo systemctl enable --now free-turn-proxy.serviceСтатус:
sudo systemctl status free-turn-proxy.service
Настройка Файрвола
Откройте внешний порт. Сервер слушает по UDP (DTLS-over-UDP), даже если вы используете MODE=tcp для Xray:
# Для UFW (Ubuntu/Debian)
sudo ufw allow 56000/udp
# Либо через iptables напрямую
sudo iptables -I INPUT -p udp --dport 56000 -j ACCEPT
sudo netfilter-persistent save # если установлен
Авторизация по Client ID (Опционально)
По умолчанию любой клиент с верным -obf-key может релеить трафик. Чтобы ограничить доступ конкретным списком клиентов, включите авторизацию.
- Создайте пустой список на сервере:
echo "[]" | sudo tee /opt/free-turn-proxy/clients.json - Включите авторизацию:
- В Docker: раскомментируйте переменные
CLIENTS_FILEиvolumesвdocker-compose.yml, затем выполнитеdocker compose up -d. - В systemd: добавьте флаг
-clients-file /opt/free-turn-proxy/clients.jsonвExecStart, затемsystemctl daemon-reload && systemctl restart free-turn-proxy.
- В Docker: раскомментируйте переменные
- Управляйте клиентами (см. раздел Управление Client ID в flags.md).
- Не забудьте передать флаг
-authи-client-id <id>при запуске клиента.
Справка: Переменные окружения для Docker
Если вы запускаете через голый docker run, вам пригодятся эти переменные (аналогичны флагам бинарника):
| Переменная | По умолчанию | Описание |
|---|---|---|
CONNECT_ADDR |
обязательна | IP и порт вашего VPN (бэкенда) |
LISTEN_ADDR |
0.0.0.0:56000 |
Внешний адрес прослушивания |
MODE |
udp |
Режим туннеля: udp (для WG/Amnezia) | tcp (для Xray/VLESS) |
OBF_PROFILE |
none |
Значение -obf-profile: none | rtpopus |
OBF_KEY |
пусто | Значение -obf-key (обязателен при OBF_PROFILE != none) |
CLIENTS_FILE |
пусто | Путь к JSON-файлу (/opt/free-turn-proxy/clients.json) для авторизации |
DEBUG |
false |
Включает debug-логи (true / false) |
Внимание при Bridge Mode: Если вы уберете
network_mode: "host"и пробросите порты через-p 56000:56000/udp, тоCONNECT_ADDR=127.0.0.1:51820будет указывать внутрь контейнера Docker. В таком случае прокси не найдет ваш WireGuard. Используйте IP хоста вCONNECT_ADDRили оставляйтеnetwork_mode: "host".