3 Commits

Author SHA1 Message Date
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
4 changed files with 27 additions and 6 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
{
".": "4.0.1"
".": "4.0.2"
}
+7
View File
@@ -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)
+1 -1
View File
@@ -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`). Скрипт делает это сам.
+18 -4
View File
@@ -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