5.3 KiB
Hydra-Veil — June Major Update
Expanded Killswitch
hydraveil-killswitch.sh was added to the installer: a wrapper around nftables that blocks all traffic not routed through the tunnel. It defaults to tun0, but supports a configurable interface IP that the operator will send when creating the profile. The IP is currently hardcoded; it will be removed in the next commit.
One Connection at a Time
First in, first out. When a new connection is established, the previous one receives a signal (SIGUSR1) and closes cleanly before the new one takes over.
Unexpected Shutdowns
If the terminal is closed or the machine is powered off, the process receives SIGHUP and performs a full disconnect: stops sing-box, clears state, and releases the network. No orphan processes.
Fewer Network Requests
Unnecessary calls made when establishing and closing connections have been removed.
Repositories
| Repo | Role |
|---|---|
core |
Business logic, controllers, models |
cli |
Command-line interface |
essentials |
Network modules (Tor, WireGuard, proxies) |
installer |
Installation scripts and killswitch |
Hydra-Veil — Gran Actualización de Junio
Killswitch ampliado
Se añadió hydraveil-killswitch.sh al installer: un wrapper sobre nftables que bloquea todo el tráfico que no pase por el túnel. Por defecto usa tun0, pero soporta una IP de interfaz configurable que el operador enviará al crear el perfil. Por ahora la IP está hardcodeada; se eliminará en el próximo commit.
Una conexión a la vez
Primero en entrar, primero en salir. Cuando se establece una nueva conexión, la anterior recibe una señal (SIGUSR1) y se cierra limpiamente antes de que la nueva tome el control.
Cierres inesperados
Si se cierra la terminal o se apaga el equipo, el proceso recibe SIGHUP y ejecuta la desconexión completa: para sing-box, limpia el estado y libera la red. Sin procesos huérfanos.
Menos solicitudes de red
Se eliminaron llamadas innecesarias que se hacían al establecer y cerrar conexiones.
Repositorios
| Repo | Rol |
|---|---|
core |
Lógica de negocio, controladores, modelos |
cli |
Interfaz de línea de comandos |
essentials |
Módulos de red (Tor, WireGuard, proxies) |
installer |
Scripts de instalación y killswitch |
Uso rápido — Desde Core (innecesario, usar CLI)
1. Create billing code / Crear billing code
python3 -c "
from core.services.WebServiceApiService import WebServiceApiService
subscription = WebServiceApiService.post_subscription(2, operator_id=<OPERATOR_ID>)
print('billing code:', subscription.billing_code)
"
Copy the printed
billing_code— you'll need it in the connect step.
Copiá elbilling_codeimpreso, lo vas a necesitar en el paso de conexión.
consultar estado de invoive python3 -c " from core.services.WebServiceApiService import WebServiceApiService
invoice = WebServiceApiService.get_invoice('BILLING_CODE_HERE') print('status:', invoice.status) "
2. Patch subscription / Parchear suscripción
sudo docker compose exec laravel php artisan tinker --execute="
\$sub = \App\Models\Subscription::orderBy('id', 'desc')->first();
\$sub->expires_at = '2027-12-31 23:59:59';
\$sub->duration = 720;
\$sub->payment_reference = 'bypass_' . uniqid();
\$sub->save();
echo 'OK' . PHP_EOL;
"
3. Connect / Conectar
VLESS
python3 -c "
from core.services.WebServiceApiService import WebServiceApiService
from core.controllers.encrypted_proxy.VlessController import VlessController
from core.observers.EncryptedProxyObserver import EncryptedProxyObserver
observer = EncryptedProxyObserver()
observer.subscribe('connected', lambda e: print('connected:', e.subject))
observer.subscribe('error', lambda e: print('error:', e.subject))
observer.subscribe('disconnected', lambda e: print('disconnected:', e.subject))
session = WebServiceApiService.post_operator_proxy('MZKD-QWWI-1TS9-KHMD', 3, 'vless')
print('session:', session)
controller = VlessController(1080)
controller.enable(session.links[0], session.username, observer)
"
Hysteria2
python3 -c "
from core.services.WebServiceApiService import WebServiceApiService
from core.controllers.encrypted_proxy.HysteriaController import HysteriaController
from core.observers.EncryptedProxyObserver import EncryptedProxyObserver
observer = EncryptedProxyObserver()
observer.subscribe('connected', lambda e: print('connected:', e.subject))
observer.subscribe('error', lambda e: print('error:', e.subject))
observer.subscribe('disconnected', lambda e: print('disconnected:', e.subject))
session = WebServiceApiService.post_operator_proxy('MZKD-QWWI-1TS9-KHMD', 3, 'hysteria2')
print('session:', session)
controller = HysteriaController(1080)
controller.enable(session.username, session.password, session.operator_hysteria2_host, observer)
"
4. Disconnect / Desconectar
python3 -c "
from core.controllers.encrypted_proxy.HysteriaController import HysteriaController
from core.observers.EncryptedProxyObserver import EncryptedProxyObserver
observer = EncryptedProxyObserver()
observer.subscribe('disconnected', lambda e: print('disconnected'))
controller = HysteriaController(1080)
controller.disable(observer)
"
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf