- stable gets the beta panel and server features (new design, presets, firewall, monthly traffic, router failover over all ports/addresses + TCP, altip, HR tab, Windows tab, update banner); ios/ macos/ windows/ sources stay out of stable - menu item "Update to N" under Settings when a new version is out - mobile: top menu no longer stretches to 200px - urllib User-Agent: Cloudflare in front of git.bobyrev.com returns 403 to Python-urllib - docs: GitHub adleibzon-rgb as source, password/uninstall/devices sections, new screenshots, PORTS.md TCP fallback and second IP Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
263 lines
7.3 KiB
Bash
Executable File
263 lines
7.3 KiB
Bash
Executable File
OBF_BINARY_NAME="wg-obfuscator"
|
||
OBF_CONF_NAME="wg-obfuscator.conf"
|
||
OBF_INIT_NAME="S49wg-obfuscator"
|
||
OBF_SERVICE_NAME="phobos-obfuscator"
|
||
OBF_WG_IFACE="phobos"
|
||
|
||
resolve_install_names() {
|
||
local binary_dir
|
||
local binary_path
|
||
|
||
if [ "$ROUTER_PLATFORM" = "openwrt" ]; then
|
||
binary_dir="/usr/bin"
|
||
elif [ "$ROUTER_PLATFORM" = "linux" ]; then
|
||
binary_dir="/usr/local/bin"
|
||
else
|
||
binary_dir="/opt/bin"
|
||
fi
|
||
|
||
binary_path="${binary_dir}/wg-obfuscator"
|
||
|
||
if [ ! -f "$binary_path" ] && [ ! -f "$PHOBOS_DIR/wg-obfuscator.conf" ]; then
|
||
return
|
||
fi
|
||
|
||
if [ -f "$binary_path" ] && [ -f "$PHOBOS_DIR/${CLIENT_NAME}.conf" ]; then
|
||
# 02.11.2026: переустановка — берём те же имена, что у этой учётки (по *.link),
|
||
# иначе доп. учётка затёрла бы обфускатор главной
|
||
local l n sc
|
||
for l in "$PHOBOS_DIR"/wg-obfuscator?*.link; do
|
||
[ "$(cat "$l" 2>/dev/null)" = "${CLIENT_NAME}" ] || continue
|
||
n=$(basename "$l" .link); n=${n#wg-obfuscator}
|
||
sc=$(grep -l "/wg-obfuscator${n}.conf\"\$" /opt/etc/init.d/S*wg-obfuscator 2>/dev/null | head -1)
|
||
OBF_BINARY_NAME="wg-obfuscator${n}"
|
||
OBF_CONF_NAME="wg-obfuscator${n}.conf"
|
||
OBF_INIT_NAME=$(basename "${sc:-S50wg-obfuscator}")
|
||
OBF_SERVICE_NAME="phobos-obfuscator${n}"
|
||
OBF_WG_IFACE="phobos${n}"
|
||
return
|
||
done
|
||
return
|
||
fi
|
||
|
||
local idx=1
|
||
while [ -f "${binary_dir}/wg-obfuscator${idx}" ]; do
|
||
idx=$((idx + 1))
|
||
done
|
||
|
||
local init_num=50
|
||
while [ -f "/opt/etc/init.d/S${init_num}wg-obfuscator" ]; do
|
||
init_num=$((init_num + 1))
|
||
done
|
||
|
||
OBF_BINARY_NAME="wg-obfuscator${idx}"
|
||
OBF_CONF_NAME="wg-obfuscator${idx}.conf"
|
||
OBF_INIT_NAME="S${init_num}wg-obfuscator"
|
||
OBF_SERVICE_NAME="phobos-obfuscator${idx}"
|
||
OBF_WG_IFACE="phobos${idx}"
|
||
}
|
||
|
||
install_obfuscator() {
|
||
local arch=$1
|
||
|
||
log "Установка wg-obfuscator для архитектуры $arch..."
|
||
|
||
if [ "$OBF_BINARY_NAME" = "wg-obfuscator" ]; then
|
||
if [ -f /opt/etc/init.d/S49wg-obfuscator ]; then
|
||
log "Остановка текущего процесса wg-obfuscator..."
|
||
/opt/etc/init.d/S49wg-obfuscator stop >/dev/null 2>&1 || true
|
||
fi
|
||
|
||
if [ -f /etc/init.d/phobos-obfuscator ]; then
|
||
log "Остановка текущего процесса wg-obfuscator..."
|
||
/etc/init.d/phobos-obfuscator stop >/dev/null 2>&1 || true
|
||
fi
|
||
fi
|
||
|
||
local binary_name="wg-obfuscator-$arch"
|
||
|
||
if [ ! -f "bin/$binary_name" ]; then
|
||
log "Ошибка: бинарник $binary_name не найден в архиве"
|
||
log "Доступные бинарники:"
|
||
ls -1 bin/
|
||
exit 1
|
||
fi
|
||
|
||
local target_path="/opt/bin/${OBF_BINARY_NAME}"
|
||
if [ "$ROUTER_PLATFORM" = "openwrt" ]; then
|
||
target_path="/usr/bin/${OBF_BINARY_NAME}"
|
||
fi
|
||
|
||
if [ -f "$target_path" ]; then
|
||
rm "$target_path"
|
||
fi
|
||
|
||
if [ "$ROUTER_PLATFORM" = "openwrt" ]; then
|
||
mkdir -p /usr/bin
|
||
else
|
||
mkdir -p /opt/bin
|
||
fi
|
||
|
||
cp "bin/$binary_name" "$target_path"
|
||
chmod +x "$target_path"
|
||
|
||
log "Бинарник wg-obfuscator установлен в $target_path"
|
||
}
|
||
|
||
create_init_script() {
|
||
log "Создание init-скрипта для obfuscator..."
|
||
|
||
cat > /opt/etc/init.d/${OBF_INIT_NAME} <<EOF
|
||
#!/bin/sh
|
||
|
||
ENABLED=yes
|
||
PROCS=${OBF_BINARY_NAME}
|
||
ARGS="--config $PHOBOS_DIR/${OBF_CONF_NAME}"
|
||
PREARGS=""
|
||
DESC=\$PROCS
|
||
PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||
|
||
. /opt/etc/init.d/rc.func
|
||
EOF
|
||
|
||
chmod +x /opt/etc/init.d/${OBF_INIT_NAME}
|
||
|
||
log "Init-скрипт создан: /opt/etc/init.d/${OBF_INIT_NAME}"
|
||
}
|
||
|
||
start_obfuscator() {
|
||
log "Запуск wg-obfuscator..."
|
||
|
||
if [ "$ROUTER_PLATFORM" = "keenetic" ] || [ -f /opt/etc/init.d/${OBF_INIT_NAME} ]; then
|
||
/opt/etc/init.d/${OBF_INIT_NAME} start
|
||
elif [ "$ROUTER_PLATFORM" = "openwrt" ] && [ -f /etc/init.d/${OBF_SERVICE_NAME} ]; then
|
||
/etc/init.d/${OBF_SERVICE_NAME} start
|
||
/etc/init.d/${OBF_SERVICE_NAME} enable
|
||
fi
|
||
|
||
sleep 2
|
||
|
||
local process_found=0
|
||
|
||
if command -v pidof >/dev/null 2>&1 && pidof ${OBF_BINARY_NAME} >/dev/null 2>&1; then
|
||
process_found=1
|
||
elif command -v pgrep >/dev/null 2>&1 && pgrep -f wg-obfuscator >/dev/null 2>&1; then
|
||
process_found=1
|
||
elif ps w 2>/dev/null | grep -v grep | grep -q "wg-obfuscator\|/opt/bin/wg-obfuscator\|/usr/bin/wg-obfuscator"; then
|
||
process_found=1
|
||
elif ps 2>/dev/null | grep -v grep | grep -q "wg-obfuscator"; then
|
||
process_found=1
|
||
fi
|
||
|
||
if [ $process_found -eq 0 ]; then
|
||
if [ "$ROUTER_PLATFORM" = "keenetic" ] && [ -f /opt/etc/init.d/${OBF_INIT_NAME} ]; then
|
||
local status_output=$(/opt/etc/init.d/${OBF_INIT_NAME} status 2>&1 || echo "")
|
||
if echo "$status_output" | grep -q "alive"; then
|
||
process_found=1
|
||
fi
|
||
elif [ "$ROUTER_PLATFORM" = "openwrt" ] && [ -f /etc/init.d/${OBF_SERVICE_NAME} ]; then
|
||
if /etc/init.d/${OBF_SERVICE_NAME} status >/dev/null 2>&1; then
|
||
process_found=1
|
||
fi
|
||
fi
|
||
fi
|
||
|
||
if [ $process_found -eq 1 ]; then
|
||
log "✓ wg-obfuscator успешно запущен"
|
||
else
|
||
log "✗ wg-obfuscator не запущен. Проверьте логи."
|
||
fi
|
||
}
|
||
|
||
create_procd_init_script() {
|
||
log "Создание procd init-скрипта для obfuscator..."
|
||
|
||
cat > /etc/init.d/${OBF_SERVICE_NAME} <<EOF
|
||
#!/bin/sh /etc/rc.common
|
||
|
||
START=49
|
||
STOP=51
|
||
|
||
USE_PROCD=1
|
||
|
||
PROG=/usr/bin/${OBF_BINARY_NAME}
|
||
CONFIG_FILE=/etc/Phobos/${OBF_CONF_NAME}
|
||
|
||
start_service() {
|
||
if [ ! -f "\$PROG" ]; then
|
||
echo "Error: wg-obfuscator not found at \$PROG"
|
||
return 1
|
||
fi
|
||
|
||
if [ ! -f "\$CONFIG_FILE" ]; then
|
||
echo "Error: config not found at \$CONFIG_FILE"
|
||
return 1
|
||
fi
|
||
|
||
procd_open_instance
|
||
procd_set_param command \$PROG --config \$CONFIG_FILE
|
||
procd_set_param respawn
|
||
procd_set_param stdout 1
|
||
procd_set_param stderr 1
|
||
procd_close_instance
|
||
}
|
||
EOF
|
||
|
||
chmod +x /etc/init.d/${OBF_SERVICE_NAME}
|
||
|
||
log "Procd init-скрипт создан: /etc/init.d/${OBF_SERVICE_NAME}"
|
||
}
|
||
|
||
create_systemd_obfuscator_service() {
|
||
log "Создание systemd service для obfuscator..."
|
||
|
||
cat > /etc/systemd/system/${OBF_SERVICE_NAME}.service <<EOFS
|
||
[Unit]
|
||
Description=Phobos WireGuard Obfuscator
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
ExecStart=/usr/local/bin/${OBF_BINARY_NAME} --config $PHOBOS_DIR/${OBF_CONF_NAME}
|
||
Restart=on-failure
|
||
RestartSec=5
|
||
StandardOutput=journal
|
||
StandardError=journal
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOFS
|
||
|
||
if [ ! -f /usr/local/bin/${OBF_BINARY_NAME} ]; then
|
||
local target_path="/usr/local/bin/${OBF_BINARY_NAME}"
|
||
if [ -f /opt/bin/${OBF_BINARY_NAME} ]; then
|
||
cp /opt/bin/${OBF_BINARY_NAME} "$target_path"
|
||
chmod +x "$target_path"
|
||
elif [ -f /usr/bin/${OBF_BINARY_NAME} ]; then
|
||
cp /usr/bin/${OBF_BINARY_NAME} "$target_path"
|
||
chmod +x "$target_path"
|
||
fi
|
||
fi
|
||
|
||
systemctl daemon-reload
|
||
systemctl enable ${OBF_SERVICE_NAME}
|
||
systemctl start ${OBF_SERVICE_NAME}
|
||
|
||
log "Ожидание запуска obfuscator (до 10 секунд)..."
|
||
local wait_count=0
|
||
while [ $wait_count -lt 10 ]; do
|
||
sleep 1
|
||
if systemctl is-active --quiet ${OBF_SERVICE_NAME}; then
|
||
log "✓ Obfuscator успешно запущен"
|
||
break
|
||
fi
|
||
wait_count=$((wait_count + 1))
|
||
done
|
||
|
||
if [ $wait_count -ge 10 ]; then
|
||
log "ПРЕДУПРЕЖДЕНИЕ: Obfuscator может быть не готов (таймаут 10 сек)"
|
||
fi
|
||
|
||
log "Systemd service создан: /etc/systemd/system/${OBF_SERVICE_NAME}.service"
|
||
}
|