diff --git a/wireguard/readme.md b/wireguard/readme.md index fffdf33..a94b570 100644 --- a/wireguard/readme.md +++ b/wireguard/readme.md @@ -23,7 +23,8 @@ Este despliegue usa `wg-easy`, una interfaz web y API para administrar fácilmen ├── pvc │ └── pvc.yaml # Configuración persistente ├── services -│ └── service.yaml # Service tipo NodePort +│ └── service-tcp.yaml # Service tipo clusterIP +│ └── service-udp.yaml # Service tipo LoadBalancer ├── secret.yaml # HASH de contraseña para interfaz web ├── namespace.yaml └── kustomization.yaml @@ -56,39 +57,42 @@ La configuración de WireGuard se guarda en `/etc/wireguard` dentro del contened ## 🛂 Puertos y exposición -El `Service` es tipo `NodePort`, lo que significa: +En el despliegue actual se utilizan **dos `Service` separados** para exponer WireGuard: -* Puerto del contenedor WireGuard: `51820/UDP` -* Puerto de la interfaz web: `51821/TCP` -* Puerto `NodePort` expuesto: +1. **Service para la interfaz web (TCP)** - * UDP: `31820` (WireGuard) - * TCP: `31821` (Interfaz Web) + * Tipo: `ClusterIP` + * Protocolo: `TCP` + * Puerto del contenedor: `51821` + * Exposición externa: mediante `Ingress` (nginx) con dominio HTTPS → `https://wireguard.c2et.net/` -Los `NodePort` deben estar en el rango 30000–32767 (por defecto en Kubernetes). +2. **Service para WireGuard (UDP)** -El router debe redirigir estos puertos al nodo donde corre `wg-easy`. + * Tipo: `LoadBalancer` (MetalLB) + * Protocolo: `UDP` + * Puerto del contenedor: `51819` + * Puerto externo: asignado por MetalLB en la IP del balanceador. -Ejemplo de reenvío: +### Esquema de acceso -* `31820/UDP` → nodo `tartaro`, puerto `31820` -* `31821/TCP` → nodo `tartaro`, puerto `31821` +* **Tráfico TCP** (Panel Web): entra por el `Ingress` Controller (nginx), con TLS gestionado por `cert-manager`. +* **Tráfico UDP** (VPN WireGuard): entra directamente a través de la IP asignada por MetalLB, sin pasar por `Ingress`. --- ## 🚀 Reenvío de tráfico y NAT -WireGuard entrega a los clientes direcciones como `192.168.200.x`, pero por defecto no tendrían acceso a otras redes como: +WireGuard entrega a los clientes direcciones como `192.168.254.x`, pero por defecto no tendrían acceso a otras redes como: -* Red de administración: `192.168.1.0/24` +* Red de administración: `192.168.0.0/24` * Red de pods (Flannel): `10.42.0.0/16` * Red Multus (ejemplo): `192.168.201.0/24` Para ello, se despliega un `DaemonSet` que aplica reglas `iptables` directamente en el host físico: ```yaml -iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -d 192.168.1.0/24 -j MASQUERADE -iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -d 10.42.0.0/16 -j MASQUERADE +iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -d 192.168.0.0/24 -j MASQUERADE +iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -d 10.42.0.0/16 -j MASQUERADE ``` Con esto, los paquetes generados por los clientes WireGuard se traducen a la IP del host, y así acceden a otras redes internas. @@ -122,7 +126,7 @@ spec: Entonces basta con añadir una regla más en el `DaemonSet`: ```bash -iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -d 192.168.201.0/24 -j MASQUERADE +iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -d 192.168.201.0/24 -j MASQUERADE ``` No es necesario conectar el contenedor de wg-easy directamente a esta red: el tráfico se enruta y NATea desde el host físico. @@ -144,7 +148,7 @@ kubectl apply -k . Una vez desplegado y con el reenvío del router correctamente configurado, puedes acceder a la interfaz web en: ``` -https://manabo.org:31821 +https://wireguard.c2et.net ``` Y configurar tus clientes WireGuard escaneando el QR generado, o descargando el archivo de configuración.