mirror of
https://github.com/hackdiaz-dev/free-turn-proxy.git
synced 2026-10-12 09:41:53 +02:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fb0dea9800 | |||
| d7cd0edf58 | |||
| 513e462fc9 | |||
| fef537cb83 |
@@ -1,3 +1,3 @@
|
||||
{
|
||||
".": "4.0.1"
|
||||
".": "4.0.2"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# Changelog
|
||||
|
||||
## [4.0.2](https://github.com/hackdiaz-dev/free-turn-proxy/compare/v4.0.1...v4.0.2) (2026-10-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **installer:** firewalld support and gum detection ([513e462](https://github.com/hackdiaz-dev/free-turn-proxy/commit/513e462fc9ef5d59a75099304389f9611244141c))
|
||||
|
||||
## [4.0.1](https://github.com/samosvalishe/free-turn-proxy/compare/v4.0.0...v4.0.1) (2026-09-24)
|
||||
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
- Переключайте серверы, настраивайте раздельное туннелирование и делитесь доступом.
|
||||
- Сохраняйте настройки в зашифрованную резервную копию.
|
||||
|
||||
[Скачать APK](https://github.com/samosvalishe/turn-proxy-android/releases/latest)
|
||||
[Скачать APK](https://github.com/hackdiaz-dev/turn-proxy-android/releases/latest)
|
||||
|
||||
Требования: Android 7.0+ и устройство ARM (arm64-v8a или armeabi-v7a). Для собственного подключения нужен VPS; в режиме Relay также нужна ссылка на звонок.
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
free-turn-proxy:
|
||||
image: ghcr.io/samosvalishe/free-turn-proxy:latest
|
||||
image: ghcr.io/hackdiaz-dev/free-turn-proxy:latest
|
||||
# build: .
|
||||
network_mode: host
|
||||
restart: unless-stopped
|
||||
|
||||
+5
-5
@@ -3,7 +3,7 @@
|
||||
## Установка скриптом (рекомендуется)
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/samosvalishe/free-turn-proxy/master/scripts/install.sh | sudo bash
|
||||
curl -fsSL https://raw.githubusercontent.com/hackdiaz-dev/free-turn-proxy/master/scripts/install.sh | sudo bash
|
||||
```
|
||||
|
||||
Мастер спросит:
|
||||
@@ -27,7 +27,7 @@ freeturn client remove phone
|
||||
Без вопросов:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/samosvalishe/free-turn-proxy/master/scripts/install.sh | \
|
||||
curl -fsSL https://raw.githubusercontent.com/hackdiaz-dev/free-turn-proxy/master/scripts/install.sh | \
|
||||
sudo bash -s -- -y --backend=new --method=docker
|
||||
```
|
||||
|
||||
@@ -42,7 +42,7 @@ curl -fsSL https://raw.githubusercontent.com/samosvalishe/free-turn-proxy/master
|
||||
```yaml
|
||||
services:
|
||||
free-turn-proxy:
|
||||
image: ghcr.io/samosvalishe/free-turn-proxy:latest
|
||||
image: ghcr.io/hackdiaz-dev/free-turn-proxy:latest
|
||||
network_mode: host
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
@@ -68,7 +68,7 @@ services:
|
||||
```bash
|
||||
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
|
||||
https://github.com/hackdiaz-dev/free-turn-proxy/releases/latest/download/server-linux-amd64
|
||||
sudo chmod +x /opt/free-turn-proxy/server
|
||||
```
|
||||
|
||||
@@ -104,4 +104,4 @@ sudo CLIENTS_FILE=/opt/free-turn-proxy/clients.json \
|
||||
|
||||
## Порт
|
||||
|
||||
Откройте внешний порт по **UDP** (при `MODE=tcp` тоже): `sudo ufw allow 56000/udp`. Скрипт делает это сам.
|
||||
Откройте внешний порт по **UDP** (при `MODE=tcp` тоже): `sudo ufw allow 56000/udp` (firewalld: `sudo firewall-cmd --permanent --add-port=56000/udp && sudo firewall-cmd --reload`). Скрипт делает это сам.
|
||||
|
||||
+3
-3
@@ -7,7 +7,7 @@
|
||||
- Переключайте серверы, настраивайте раздельное туннелирование и делитесь доступом.
|
||||
- Сохраняйте настройки в зашифрованную резервную копию.
|
||||
|
||||
[Скачать APK](https://github.com/samosvalishe/turn-proxy-android/releases/latest)
|
||||
[Скачать APK](https://github.com/hackdiaz-dev/turn-proxy-android/releases/latest)
|
||||
|
||||
Требования: Android 7.0+ и устройство ARM (arm64-v8a или armeabi-v7a). Для собственного подключения нужен VPS; в режиме Relay также нужна ссылка на звонок.
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
```bash
|
||||
termux-wake-lock
|
||||
curl -L -o client https://github.com/samosvalishe/free-turn-proxy/releases/latest/download/client-android-arm64
|
||||
curl -L -o client https://github.com/hackdiaz-dev/free-turn-proxy/releases/latest/download/client-android-arm64
|
||||
chmod +x client
|
||||
# Замените <ip_dns_оператора> на DNS вашего провайдера
|
||||
./client -listen 127.0.0.1:9000 -peer <vps>:56000 -link "<call-link>" -dns-servers <ip_dns_оператора>
|
||||
@@ -44,7 +44,7 @@ chmod +x client
|
||||
```bash
|
||||
apk update
|
||||
apk add curl
|
||||
curl -L -o client https://github.com/samosvalishe/free-turn-proxy/releases/latest/download/client-linux-386
|
||||
curl -L -o client https://github.com/hackdiaz-dev/free-turn-proxy/releases/latest/download/client-linux-386
|
||||
chmod +x client
|
||||
GOMAXPROCS=1 GODEBUG=asyncpreemptoff=1 ./client -listen 127.0.0.1:9000 -peer <vps>:56000 -link "<call-link>"
|
||||
```
|
||||
|
||||
+4
-4
@@ -11,7 +11,7 @@
|
||||
Интерактивный скрипт поднимет FreeTurn (Docker или systemd) и WireGuard `ft-wg0` либо подключит FreeTurn к вашему VPN, сгенерирует ключи, создаст клиента `owner` и выдаст **ссылку `freeturn://` и ссылку на QR-код**:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/samosvalishe/free-turn-proxy/master/scripts/install.sh | sudo bash
|
||||
curl -fsSL https://raw.githubusercontent.com/hackdiaz-dev/free-turn-proxy/master/scripts/install.sh | sudo bash
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
@@ -28,14 +28,14 @@ curl -fsSL https://raw.githubusercontent.com/samosvalishe/free-turn-proxy/master
|
||||
|
||||
**Linux:**
|
||||
```bash
|
||||
curl -L -o client https://github.com/samosvalishe/free-turn-proxy/releases/latest/download/client-linux-amd64
|
||||
curl -L -o client https://github.com/hackdiaz-dev/free-turn-proxy/releases/latest/download/client-linux-amd64
|
||||
chmod +x client
|
||||
sudo ./client -listen 127.0.0.1:9000 -peer <vps_ip>:56000 -link "<call-link>" -obf-profile rtpopus3 -obf-key <ВАШ_КЛЮЧ> -client-id <ВАШ_CLIENT_ID> -routes
|
||||
```
|
||||
|
||||
**Windows (PowerShell от администратора):**
|
||||
```powershell
|
||||
Invoke-WebRequest -Uri https://github.com/samosvalishe/free-turn-proxy/releases/latest/download/client-windows-amd64.exe -OutFile client.exe
|
||||
Invoke-WebRequest -Uri https://github.com/hackdiaz-dev/free-turn-proxy/releases/latest/download/client-windows-amd64.exe -OutFile client.exe
|
||||
.\client.exe -peer <vps_ip>:56000 -provider vk -link "<call-link>" -listen 127.0.0.1:9000 -n 12 -streams-per-cred 12 -obf-profile rtpopus3 -obf-key <ВАШ_КЛЮЧ> -dns-servers 192.168.31.1 -dns-mode doh -client-id <ВАШ_CLIENT_ID> -routes
|
||||
```
|
||||
|
||||
@@ -62,7 +62,7 @@ sudo ./client -listen 127.0.0.1:9000 -peer <vps_ip>:56000 -link "<call-link>" -o
|
||||
|
||||
```bash
|
||||
termux-wake-lock
|
||||
# Скачивание: curl -L -o client https://github.com/samosvalishe/free-turn-proxy/releases/latest/download/client-android-arm64 && chmod +x client
|
||||
# Скачивание: curl -L -o client https://github.com/hackdiaz-dev/free-turn-proxy/releases/latest/download/client-android-arm64 && chmod +x client
|
||||
|
||||
# Обязательно укажите ваш ключ и DNS оператора (можно узнать в настройках APN)
|
||||
./client -listen 127.0.0.1:9000 -peer <vps_ip>:56000 -link "<call-link>" -obf-profile rtpopus3 -obf-key <ВАШ_КЛЮЧ> -dns-servers <ip_dns_оператора> -client-id <ВАШ_CLIENT_ID>
|
||||
|
||||
+19
-5
@@ -41,7 +41,7 @@ WG_MTU=1280 # = tunnel.DefaultMTU клиента
|
||||
CLIENT_LISTEN="127.0.0.1:9000" # = -listen клиента по умолчанию, Endpoint клиентского WG
|
||||
SYSCTL_FILE="/etc/sysctl.d/99-free-turn-proxy.conf"
|
||||
|
||||
REPO="samosvalishe/free-turn-proxy"
|
||||
REPO="hackdiaz-dev/free-turn-proxy"
|
||||
IMAGE="ghcr.io/$REPO"
|
||||
RELEASES_URL="https://github.com/$REPO/releases"
|
||||
|
||||
@@ -429,11 +429,11 @@ gum_download() {
|
||||
[ -n "$bin" ] && install -m 0755 "$bin" /usr/local/bin/gum 2>/dev/null
|
||||
fi
|
||||
rm -rf "$tmp"
|
||||
command -v gum >/dev/null 2>&1
|
||||
type -P gum >/dev/null 2>&1
|
||||
}
|
||||
|
||||
ensure_gum() {
|
||||
command -v gum >/dev/null 2>&1 && { HAS_GUM=1; return 0; }
|
||||
type -P gum >/dev/null 2>&1 && { HAS_GUM=1; return 0; }
|
||||
log_info "Установка gum ${GUM_VERSION}..."
|
||||
gum_download "$GUM_VERSION" && { HAS_GUM=1; return 0; }
|
||||
log_warn "gum недоступен - классический текстовый режим."
|
||||
@@ -470,10 +470,18 @@ port_busy_udp() {
|
||||
[ -n "$(ss -Hlun "sport = :$1" 2>/dev/null || true)" ]
|
||||
}
|
||||
|
||||
# firewalld запущен (на RHEL-семействе ufw нет, а правила iptables firewalld не учитывает).
|
||||
_firewalld_running() {
|
||||
command -v firewall-cmd >/dev/null 2>&1 && firewall-cmd --state >/dev/null 2>&1
|
||||
}
|
||||
|
||||
firewall_open_port() {
|
||||
local port=$1 proto=${2:-udp}
|
||||
if command -v ufw >/dev/null 2>&1 && ufw status 2>/dev/null | grep -q "Status: active"; then
|
||||
ufw allow "${port}/${proto}" >/dev/null 2>&1 || true
|
||||
elif _firewalld_running; then
|
||||
firewall-cmd --add-port="${port}/${proto}" >/dev/null 2>&1 || true
|
||||
firewall-cmd --permanent --add-port="${port}/${proto}" >/dev/null 2>&1 || true
|
||||
elif command -v iptables >/dev/null 2>&1; then
|
||||
if ! iptables -C INPUT -p "$proto" --dport "$port" -j ACCEPT 2>/dev/null; then
|
||||
iptables -I INPUT -p "$proto" --dport "$port" -j ACCEPT 2>/dev/null || true
|
||||
@@ -488,6 +496,9 @@ firewall_close_port() {
|
||||
[ -n "$port" ] || return 0
|
||||
if command -v ufw >/dev/null 2>&1 && ufw status 2>/dev/null | grep -q "Status: active"; then
|
||||
ufw delete allow "${port}/${proto}" >/dev/null 2>&1 || true
|
||||
elif _firewalld_running; then
|
||||
firewall-cmd --remove-port="${port}/${proto}" >/dev/null 2>&1 || true
|
||||
firewall-cmd --permanent --remove-port="${port}/${proto}" >/dev/null 2>&1 || true
|
||||
elif command -v iptables >/dev/null 2>&1; then
|
||||
iptables -D INPUT -p "$proto" --dport "$port" -j ACCEPT 2>/dev/null || true
|
||||
command -v netfilter-persistent >/dev/null 2>&1 && netfilter-persistent save >/dev/null 2>&1 || true
|
||||
@@ -1376,13 +1387,16 @@ _web_listening() {
|
||||
}
|
||||
|
||||
# Строкой, а не функцией: исполняется вне скрипта (ExecStopPost, детач-обёртка). Зеркалит
|
||||
# firewall_open_port - ufw ИЛИ iptables, иначе снесём постоянное правило админа.
|
||||
# firewall_open_port - ufw, firewalld ИЛИ iptables, иначе снесём постоянное правило админа.
|
||||
_web_close_cmd() {
|
||||
local port=$1 ufw_bin ipt_bin
|
||||
local port=$1 ufw_bin ipt_bin fw_bin
|
||||
ufw_bin=$(command -v ufw 2>/dev/null || true)
|
||||
ipt_bin=$(command -v iptables 2>/dev/null || true)
|
||||
fw_bin=$(command -v firewall-cmd 2>/dev/null || true)
|
||||
if [ -n "$ufw_bin" ] && ufw status 2>/dev/null | grep -q "Status: active"; then
|
||||
printf "%s delete allow %s/tcp >/dev/null 2>&1; exit 0" "$ufw_bin" "$port"
|
||||
elif [ -n "$fw_bin" ] && "$fw_bin" --state >/dev/null 2>&1; then
|
||||
printf "%s --remove-port=%s/tcp >/dev/null 2>&1; %s --permanent --remove-port=%s/tcp >/dev/null 2>&1; exit 0" "$fw_bin" "$port" "$fw_bin" "$port"
|
||||
elif [ -n "$ipt_bin" ]; then
|
||||
printf "%s -D INPUT -p tcp --dport %s -j ACCEPT >/dev/null 2>&1; exit 0" "$ipt_bin" "$port"
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user