7 Commits

Author SHA1 Message Date
hackdiaz-dev 236aa513d2 Merge pull request #4 from hackdiaz-dev/release-please--branches--master
chore(master): release 4.0.3
2026-10-10 21:16:32 +03:00
hackdiaz-dev 726136988e chore(master): release 4.0.3 2026-10-10 21:06:46 +03:00
hackdiaz-dev cc71a1a938 fix(deps): bump Go to 1.26.9 and x/net to v0.60.0
Fixes the govulncheck findings in net/http, crypto/tls, mime/multipart and x/net
2026-10-10 21:06:34 +03:00
hackdiaz-dev fb0dea9800 Merge pull request #2 from hackdiaz-dev/release-please--branches--master
chore(master): release 4.0.2
2026-10-10 16:21:37 +03:00
hackdiaz-dev d7cd0edf58 chore(master): release 4.0.2 2026-10-10 16:18:54 +03:00
hackdiaz-dev 513e462fc9 fix(installer): firewalld support and gum detection
Open and close ports through firewalld; detect the gum binary instead of the wrapper function
2026-10-10 16:18:38 +03:00
hackdiaz-dev fef537cb83 chore: point links to hackdiaz-dev 2026-10-06 19:43:51 +00:00
12 changed files with 69 additions and 41 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ concurrency:
cancel-in-progress: true cancel-in-progress: true
env: env:
GO_VERSION: "1.26.7" GO_VERSION: "1.26.9"
GOLANGCI_VERSION: v2.12.2 GOLANGCI_VERSION: v2.12.2
GOVULN_VERSION: v1.6.0 GOVULN_VERSION: v1.6.0
GORELEASER_VERSION: v2.17.1 GORELEASER_VERSION: v2.17.1
+1 -1
View File
@@ -10,7 +10,7 @@ permissions:
packages: write packages: write
env: env:
GO_VERSION: "1.26.7" GO_VERSION: "1.26.9"
GORELEASER_VERSION: v2.17.1 GORELEASER_VERSION: v2.17.1
GOMOBILE_VERSION: v0.0.0-20260821190718-4776eadac327 GOMOBILE_VERSION: v0.0.0-20260821190718-4776eadac327
TASK_VERSION: 3.52.0 TASK_VERSION: 3.52.0
+1 -1
View File
@@ -1,3 +1,3 @@
{ {
".": "4.0.1" ".": "4.0.3"
} }
+14
View File
@@ -1,5 +1,19 @@
# Changelog # Changelog
## [4.0.3](https://github.com/hackdiaz-dev/free-turn-proxy/compare/v4.0.2...v4.0.3) (2026-10-10)
### Bug Fixes
* **deps:** bump Go to 1.26.9 and x/net to v0.60.0 ([cc71a1a](https://github.com/hackdiaz-dev/free-turn-proxy/commit/cc71a1a938aa757b4c8e40901e3ae073f9bd19b5))
## [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) ## [4.0.1](https://github.com/samosvalishe/free-turn-proxy/compare/v4.0.0...v4.0.1) (2026-09-24)
+1 -1
View File
@@ -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 также нужна ссылка на звонок. Требования: Android 7.0+ и устройство ARM (arm64-v8a или armeabi-v7a). Для собственного подключения нужен VPS; в режиме Relay также нужна ссылка на звонок.
+1 -1
View File
@@ -1,6 +1,6 @@
services: services:
free-turn-proxy: free-turn-proxy:
image: ghcr.io/samosvalishe/free-turn-proxy:latest image: ghcr.io/hackdiaz-dev/free-turn-proxy:latest
# build: . # build: .
network_mode: host network_mode: host
restart: unless-stopped restart: unless-stopped
+5 -5
View File
@@ -3,7 +3,7 @@
## Установка скриптом (рекомендуется) ## Установка скриптом (рекомендуется)
```bash ```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 ```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 sudo bash -s -- -y --backend=new --method=docker
``` ```
@@ -42,7 +42,7 @@ curl -fsSL https://raw.githubusercontent.com/samosvalishe/free-turn-proxy/master
```yaml ```yaml
services: services:
free-turn-proxy: free-turn-proxy:
image: ghcr.io/samosvalishe/free-turn-proxy:latest image: ghcr.io/hackdiaz-dev/free-turn-proxy:latest
network_mode: host network_mode: host
restart: unless-stopped restart: unless-stopped
environment: environment:
@@ -68,7 +68,7 @@ services:
```bash ```bash
sudo mkdir -p /opt/free-turn-proxy sudo mkdir -p /opt/free-turn-proxy
sudo curl -L -o /opt/free-turn-proxy/server \ 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 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
View File
@@ -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 также нужна ссылка на звонок. Требования: Android 7.0+ и устройство ARM (arm64-v8a или armeabi-v7a). Для собственного подключения нужен VPS; в режиме Relay также нужна ссылка на звонок.
@@ -29,7 +29,7 @@
```bash ```bash
termux-wake-lock 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 chmod +x client
# Замените <ip_dns_оператора> на DNS вашего провайдера # Замените <ip_dns_оператора> на DNS вашего провайдера
./client -listen 127.0.0.1:9000 -peer <vps>:56000 -link "<call-link>" -dns-servers <ip_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 ```bash
apk update apk update
apk add curl 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 chmod +x client
GOMAXPROCS=1 GODEBUG=asyncpreemptoff=1 ./client -listen 127.0.0.1:9000 -peer <vps>:56000 -link "<call-link>" GOMAXPROCS=1 GODEBUG=asyncpreemptoff=1 ./client -listen 127.0.0.1:9000 -peer <vps>:56000 -link "<call-link>"
``` ```
+4 -4
View File
@@ -11,7 +11,7 @@
Интерактивный скрипт поднимет FreeTurn (Docker или systemd) и WireGuard `ft-wg0` либо подключит FreeTurn к вашему VPN, сгенерирует ключи, создаст клиента `owner` и выдаст **ссылку `freeturn://` и ссылку на QR-код**: Интерактивный скрипт поднимет FreeTurn (Docker или systemd) и WireGuard `ft-wg0` либо подключит FreeTurn к вашему VPN, сгенерирует ключи, создаст клиента `owner` и выдаст **ссылку `freeturn://` и ссылку на QR-код**:
```bash ```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] > [!TIP]
@@ -28,14 +28,14 @@ curl -fsSL https://raw.githubusercontent.com/samosvalishe/free-turn-proxy/master
**Linux:** **Linux:**
```bash ```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 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 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 от администратора):** **Windows (PowerShell от администратора):**
```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 .\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 ```bash
termux-wake-lock 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) # Обязательно укажите ваш ключ и 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> ./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>
+7 -7
View File
@@ -1,6 +1,6 @@
module github.com/samosvalishe/free-turn-proxy module github.com/samosvalishe/free-turn-proxy
go 1.26.7 go 1.26.9
require ( require (
github.com/amnezia-vpn/amneziawg-go/v3 v3.1.20260814 github.com/amnezia-vpn/amneziawg-go/v3 v3.1.20260814
@@ -16,9 +16,9 @@ require (
github.com/pion/turn/v5 v5.0.13 github.com/pion/turn/v5 v5.0.13
github.com/xtaci/kcp-go/v5 v5.6.72 github.com/xtaci/kcp-go/v5 v5.6.72
github.com/xtaci/smux v1.5.57 github.com/xtaci/smux v1.5.57
golang.org/x/crypto v0.55.0 golang.org/x/crypto v0.57.0
golang.org/x/crypto/x509roots/fallback v0.0.0-20260824205408-89f4e9bb5b38 golang.org/x/crypto/x509roots/fallback v0.0.0-20260824205408-89f4e9bb5b38
golang.org/x/net v0.58.0 golang.org/x/net v0.60.0
) )
require ( require (
@@ -39,10 +39,10 @@ require (
github.com/tjfoc/gmsm v1.4.1 // indirect github.com/tjfoc/gmsm v1.4.1 // indirect
github.com/wlynxg/anet v0.0.5 // indirect github.com/wlynxg/anet v0.0.5 // indirect
golang.org/x/mobile v0.0.0-20260821190718-4776eadac327 // indirect golang.org/x/mobile v0.0.0-20260821190718-4776eadac327 // indirect
golang.org/x/mod v0.40.0 // indirect golang.org/x/mod v0.41.0 // indirect
golang.org/x/sync v0.22.0 // indirect golang.org/x/sync v0.23.0 // indirect
golang.org/x/sys v0.47.0 // indirect golang.org/x/sys v0.48.0 // indirect
golang.org/x/text v0.41.0 // indirect golang.org/x/text v0.42.0 // indirect
golang.org/x/time v0.15.0 // indirect golang.org/x/time v0.15.0 // indirect
golang.org/x/tools v0.49.0 // indirect golang.org/x/tools v0.49.0 // indirect
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
+12 -12
View File
@@ -95,8 +95,8 @@ go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.55.0 h1:+KWHjbgOaAQ66dh/YlkZKHlz9ZUlq61AFirAR9ntP8M= golang.org/x/crypto v0.57.0 h1:3ZVCjf8Ggz7zneR/EHRVx68Ctf+2pmIMP2UFhh9cC6M=
golang.org/x/crypto v0.55.0/go.mod h1:uq0V9dE/fzQuJtbnL+2EhWOE63vo164FY8xqEnV9xis= golang.org/x/crypto v0.57.0/go.mod h1:Fdz0i5U6CoizGwLda9DttjSk6qlZo25zYNtR+ycvuZA=
golang.org/x/crypto/x509roots/fallback v0.0.0-20260824205408-89f4e9bb5b38 h1:KOTVVE9EBLJYMOieQRB5IdYazO/s7TMqVqRNQdO7CGk= golang.org/x/crypto/x509roots/fallback v0.0.0-20260824205408-89f4e9bb5b38 h1:KOTVVE9EBLJYMOieQRB5IdYazO/s7TMqVqRNQdO7CGk=
golang.org/x/crypto/x509roots/fallback v0.0.0-20260824205408-89f4e9bb5b38/go.mod h1:HPze8vhfG6fO06AM+VSvxRm4E3+5Yk375mgrJ5M2z1E= golang.org/x/crypto/x509roots/fallback v0.0.0-20260824205408-89f4e9bb5b38/go.mod h1:HPze8vhfG6fO06AM+VSvxRm4E3+5Yk375mgrJ5M2z1E=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -105,8 +105,8 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mobile v0.0.0-20260821190718-4776eadac327 h1:D/wiQ6AoTYjDtSD0HMPhU8O40NUP8EF0UmDhIYCnG4I= golang.org/x/mobile v0.0.0-20260821190718-4776eadac327 h1:D/wiQ6AoTYjDtSD0HMPhU8O40NUP8EF0UmDhIYCnG4I=
golang.org/x/mobile v0.0.0-20260821190718-4776eadac327/go.mod h1:D9q8rgXu13Q3uuM+Vuy6F/DG1WF/giTPLtqQ9on5B1M= golang.org/x/mobile v0.0.0-20260821190718-4776eadac327/go.mod h1:D9q8rgXu13Q3uuM+Vuy6F/DG1WF/giTPLtqQ9on5B1M=
golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs= golang.org/x/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c=
golang.org/x/mod v0.40.0/go.mod h1:0/weTWkPWGBikyTWAX3dkjVztMmBA5hM0DH6BElSupE= golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -114,28 +114,28 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20211104170005-ce137452f963/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211104170005-ce137452f963/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= golang.org/x/net v0.60.0 h1:79p50tfZlm0J9YfoDsSi639qSXNGVwEzOPLCxM2FsYU=
golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= golang.org/x/net v0.60.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk=
golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo=
golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= golang.org/x/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI=
golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E=
golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+19 -5
View File
@@ -41,7 +41,7 @@ WG_MTU=1280 # = tunnel.DefaultMTU клиента
CLIENT_LISTEN="127.0.0.1:9000" # = -listen клиента по умолчанию, Endpoint клиентского WG CLIENT_LISTEN="127.0.0.1:9000" # = -listen клиента по умолчанию, Endpoint клиентского WG
SYSCTL_FILE="/etc/sysctl.d/99-free-turn-proxy.conf" 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" IMAGE="ghcr.io/$REPO"
RELEASES_URL="https://github.com/$REPO/releases" 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 [ -n "$bin" ] && install -m 0755 "$bin" /usr/local/bin/gum 2>/dev/null
fi fi
rm -rf "$tmp" rm -rf "$tmp"
command -v gum >/dev/null 2>&1 type -P gum >/dev/null 2>&1
} }
ensure_gum() { 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}..." log_info "Установка gum ${GUM_VERSION}..."
gum_download "$GUM_VERSION" && { HAS_GUM=1; return 0; } gum_download "$GUM_VERSION" && { HAS_GUM=1; return 0; }
log_warn "gum недоступен - классический текстовый режим." log_warn "gum недоступен - классический текстовый режим."
@@ -470,10 +470,18 @@ port_busy_udp() {
[ -n "$(ss -Hlun "sport = :$1" 2>/dev/null || true)" ] [ -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() { firewall_open_port() {
local port=$1 proto=${2:-udp} local port=$1 proto=${2:-udp}
if command -v ufw >/dev/null 2>&1 && ufw status 2>/dev/null | grep -q "Status: active"; then 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 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 elif command -v iptables >/dev/null 2>&1; then
if ! iptables -C INPUT -p "$proto" --dport "$port" -j ACCEPT 2>/dev/null; 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 iptables -I INPUT -p "$proto" --dport "$port" -j ACCEPT 2>/dev/null || true
@@ -488,6 +496,9 @@ firewall_close_port() {
[ -n "$port" ] || return 0 [ -n "$port" ] || return 0
if command -v ufw >/dev/null 2>&1 && ufw status 2>/dev/null | grep -q "Status: active"; then 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 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 elif command -v iptables >/dev/null 2>&1; then
iptables -D INPUT -p "$proto" --dport "$port" -j ACCEPT 2>/dev/null || true 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 command -v netfilter-persistent >/dev/null 2>&1 && netfilter-persistent save >/dev/null 2>&1 || true
@@ -1376,13 +1387,16 @@ _web_listening() {
} }
# Строкой, а не функцией: исполняется вне скрипта (ExecStopPost, детач-обёртка). Зеркалит # Строкой, а не функцией: исполняется вне скрипта (ExecStopPost, детач-обёртка). Зеркалит
# firewall_open_port - ufw ИЛИ iptables, иначе снесём постоянное правило админа. # firewall_open_port - ufw, firewalld ИЛИ iptables, иначе снесём постоянное правило админа.
_web_close_cmd() { _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) ufw_bin=$(command -v ufw 2>/dev/null || true)
ipt_bin=$(command -v iptables 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 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" 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 elif [ -n "$ipt_bin" ]; then
printf "%s -D INPUT -p tcp --dport %s -j ACCEPT >/dev/null 2>&1; exit 0" "$ipt_bin" "$port" printf "%s -D INPUT -p tcp --dport %s -j ACCEPT >/dev/null 2>&1; exit 0" "$ipt_bin" "$port"
else else