mirror of
https://github.com/andrey271192/domen_hydra.git
synced 2026-09-20 14:42:00 +00:00
fix: WireGuard deploy — убрать kmod-wireguard, ndmc первым, fallback через wg+ip
- Убрать kmod-wireguard из opkg (не существует, ядро Keenetic уже имеет WireGuard) - ndmc теперь основной путь (нативная интеграция в Keenetic UI), а не fallback - Fallback: raw wg set + ip link/addr (без wg-quick, которого нет в Entware) - init.d S50wg0 использует wg + ip вместо wg-quick - Приватный ключ пишется в отдельный файл wg0.key для wg set private-key - Убрать set -e — чтобы fallback-пути не прерывали скрипт Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -710,49 +710,85 @@ async def wg_deploy(name: str, x_admin_password: str = Header("")):
|
|||||||
client_ip = peer["ip"]
|
client_ip = peer["ip"]
|
||||||
|
|
||||||
script = f"""\
|
script = f"""\
|
||||||
set -e
|
|
||||||
echo '[1/3] Установка wireguard-tools...'
|
echo '[1/3] Установка wireguard-tools...'
|
||||||
opkg update 2>/dev/null || true
|
opkg update 2>/dev/null || true
|
||||||
opkg install wireguard-tools kmod-wireguard 2>/dev/null || true
|
opkg install wireguard-tools 2>/dev/null || true
|
||||||
command -v wg >/dev/null 2>&1 || {{ echo 'ОШИБКА: wg не установлен'; exit 1; }}
|
command -v wg >/dev/null 2>&1 || {{ echo 'ОШИБКА: wg не установлен (opkg install wireguard-tools)'; exit 1; }}
|
||||||
|
|
||||||
echo '[2/3] Запись конфига...'
|
echo '[2/3] Запись конфига...'
|
||||||
mkdir -p /opt/etc/wireguard
|
mkdir -p /opt/etc/wireguard
|
||||||
cat > /opt/etc/wireguard/wg0.conf << 'WGEOF'
|
cat > /opt/etc/wireguard/wg0.conf << 'WGEOF'
|
||||||
{wg_conf}WGEOF
|
{wg_conf}WGEOF
|
||||||
chmod 600 /opt/etc/wireguard/wg0.conf
|
chmod 600 /opt/etc/wireguard/wg0.conf
|
||||||
|
printf '%s\\n' '{priv_key}' > /opt/etc/wireguard/wg0.key
|
||||||
|
chmod 600 /opt/etc/wireguard/wg0.key
|
||||||
|
|
||||||
cat > /opt/etc/init.d/S50wg0 << 'INITEOF'
|
cat > /opt/etc/init.d/S50wg0 << 'INITEOF'
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
case "$1" in
|
case "$1" in
|
||||||
start) wg-quick up /opt/etc/wireguard/wg0.conf 2>/dev/null ;;
|
start)
|
||||||
stop) wg-quick down /opt/etc/wireguard/wg0.conf 2>/dev/null ;;
|
ip link show wg0 >/dev/null 2>&1 || ip link add wg0 type wireguard 2>/dev/null || exit 0
|
||||||
restart) wg-quick down /opt/etc/wireguard/wg0.conf 2>/dev/null; wg-quick up /opt/etc/wireguard/wg0.conf ;;
|
wg set wg0 private-key /opt/etc/wireguard/wg0.key \\
|
||||||
|
peer '{pub_key}' \\
|
||||||
|
allowed-ips 0.0.0.0/0 \\
|
||||||
|
endpoint '{vps_host}:{port}' \\
|
||||||
|
persistent-keepalive 25
|
||||||
|
ip addr add '{client_ip}/32' dev wg0 2>/dev/null || true
|
||||||
|
ip link set up dev wg0
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
ip link set down dev wg0 2>/dev/null
|
||||||
|
ip link delete wg0 2>/dev/null
|
||||||
|
;;
|
||||||
|
restart) $0 stop; sleep 1; $0 start ;;
|
||||||
esac
|
esac
|
||||||
INITEOF
|
INITEOF
|
||||||
chmod +x /opt/etc/init.d/S50wg0
|
chmod +x /opt/etc/init.d/S50wg0
|
||||||
|
|
||||||
echo '[3/3] Запуск VPN...'
|
echo '[3/3] Настройка WireGuard...'
|
||||||
wg-quick down /opt/etc/wireguard/wg0.conf 2>/dev/null || true
|
DONE=0
|
||||||
wg-quick up /opt/etc/wireguard/wg0.conf
|
|
||||||
|
|
||||||
|
# Вариант 1: Keenetic CLI (ndmc) — нативная интеграция (появится в Подключениях)
|
||||||
if command -v ndmc >/dev/null 2>&1; then
|
if command -v ndmc >/dev/null 2>&1; then
|
||||||
|
echo 'Keenetic CLI (ndmc)...'
|
||||||
printf '%s\\n' \\
|
printf '%s\\n' \\
|
||||||
'interface Wireguard0' \\
|
'interface Wireguard0' \\
|
||||||
'description HydraVPN' \\
|
'ip address {client_ip}/32' \\
|
||||||
'wireguard private-key {priv_key}' \\
|
'wireguard private-key {priv_key}' \\
|
||||||
'wireguard peer {pub_key}' \\
|
'wireguard peer {pub_key}' \\
|
||||||
'wireguard allowed-ips 0.0.0.0 0.0.0.0' \\
|
'wireguard allowed-ips 0.0.0.0 0.0.0.0' \\
|
||||||
'wireguard endpoint {vps_host} {port}' \\
|
'wireguard endpoint {vps_host} {port}' \\
|
||||||
'wireguard persistent-keepalive 25' \\
|
'wireguard persistent-keepalive 25' \\
|
||||||
'exit' \\
|
'exit' \\
|
||||||
'system configuration save' | ndmc 2>/dev/null && \\
|
'exit' \\
|
||||||
echo 'Keenetic CLI: нативная интеграция OK (проверь в Подключениях)' || \\
|
'system configuration save' | ndmc 2>&1 && DONE=1 && \\
|
||||||
echo 'Keenetic CLI: не удалось, wg-quick запущен'
|
echo 'OK: Keenetic WireGuard нативно (проверь в Подключениях)' || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Вариант 2: raw wg + ip (Entware, без wg-quick)
|
||||||
|
if [ "$DONE" = "0" ]; then
|
||||||
|
echo 'Используем wg + ip...'
|
||||||
|
ip link show wg0 >/dev/null 2>&1 || ip link add wg0 type wireguard 2>/dev/null || true
|
||||||
|
wg set wg0 private-key /opt/etc/wireguard/wg0.key \\
|
||||||
|
peer '{pub_key}' \\
|
||||||
|
allowed-ips 0.0.0.0/0 \\
|
||||||
|
endpoint '{vps_host}:{port}' \\
|
||||||
|
persistent-keepalive 25 && DONE=1 || true
|
||||||
|
ip addr add '{client_ip}/32' dev wg0 2>/dev/null || true
|
||||||
|
ip link set up dev wg0 2>/dev/null || true
|
||||||
|
[ "$DONE" = "1" ] && echo 'OK: wg0 поднят'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$DONE" = "0" ]; then
|
||||||
|
echo 'ОШИБКА: не удалось настроить WireGuard'
|
||||||
|
echo 'Конфиг сохранён: /opt/etc/wireguard/wg0.conf'
|
||||||
|
echo 'После перезагрузки S50wg0 попробует снова'
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo '=== OK ==='
|
echo '=== OK ==='
|
||||||
echo 'VPN IP роутера: {client_ip}'
|
echo 'VPN IP: {client_ip}'
|
||||||
ip addr show wg0 2>/dev/null | grep inet || wg show wg0 2>/dev/null || true
|
wg show wg0 2>/dev/null | head -8 || ip addr show wg0 2>/dev/null | grep inet || true
|
||||||
"""
|
"""
|
||||||
|
|
||||||
rc, out, err = await _ssh_on_router(rcfg, script, timeout=120)
|
rc, out, err = await _ssh_on_router(rcfg, script, timeout=120)
|
||||||
|
|||||||
Reference in New Issue
Block a user