Cómo probar que la VPN funciona
Checklist técnico para validar end-to-end el túnel WireGuard con Rela AI: desde el primer handshake hasta leer el PLC, con comandos copy-paste y troubleshooting por categoría.
Cómo probar que la VPN funciona
Esta guía está escrita para el técnico de IT del cliente — alguien que acaba de pegar la configuración WireGuard en su router y quiere confirmar que todo está operativo antes de pasarle el testigo al equipo de planta. Cada paso incluye el comando exacto y el resultado esperado.
¿Para qué sirve esta guía?
Para que un pegar-y-olvidar no se convierta en "a las 2 AM del lunes nadie llega al PLC". Vas a verificar 6 capas en orden: handshake → routing → conectividad IP → puerto TCP → Modbus request → dashboard. Si alguna falla, el mensaje de error apunta exactamente a la capa culpable.
¿Cómo funciona el diagnóstico por capas?
Cuando una conexión WireGuard no anda, el error casi siempre está en UNA capa específica — y cada capa tiene su propia herramienta de diagnóstico. Ir de abajo hacia arriba (handshake primero, Modbus al final) te ahorra horas de "revisé todo y no funciona".
Beneficios
| Diagnóstico sistemático | Cuando falla, sabes exactamente qué capa arreglar. |
| Menos llamadas a soporte | El 95% de los problemas se resuelven con este checklist. |
| Evidencia para tu IT | Logs y outputs concretos para adjuntar en un ticket si escalás. |
Pre-requisitos
Antes de empezar:
- Configuración WireGuard aplicada en tu router/firewall (ver Alta y Configuración).
- Acceso terminal (SSH / consola web) al router o al equipo que está corriendo WireGuard.
- IP privada del PLC conocida (dentro de tu red local).
- Subnet asignada por Rela AI (se ve en el dashboard al crear el peer — formato
10.200.X.0/24).
Capa 1 — Handshake WireGuard
Verificamos que tu router y el concentrador de Rela AI se saludaron.
pfSense / OPNsense
Menú: Status → WireGuard. Deberías ver:
- Interfaz
rela_vpnen verde. - En el peer,
Latest Handshakecon valor menor a 2 minutos. Transfercon bytes crecientes (rx y tx).
Mikrotik RouterOS
/interface wireguard peers printResultado esperado:
# INTERFACE=rela-vpn PUBLIC-KEY=clrU9+Aj... LAST-HANDSHAKE=15s RX=2.8KiB TX=3.1KiBSi LAST-HANDSHAKE dice never o un número muy grande (>1 hora), el handshake nunca ocurrió. Salta a troubleshooting: Capa 1.
Ubiquiti EdgeOS
show interfaces wireguard wg0Busca peer: <pubkey> seguido de latest handshake: X seconds ago.
Linux (wg-quick)
sudo wg show wg0Resultado esperado:
interface: wg0
public key: <your-pubkey>
listening port: 51820
peer: clrU9+AjXQ4GdSEV4NhIWs4uspF76tlemYpE8mZR6z0=
endpoint: 34.22.248.0:51820
allowed ips: 10.200.0.0/16
latest handshake: 18 seconds ago
transfer: 3.2 KiB received, 4.8 KiB sent
persistent keepalive: every 25 secondsDocker (linuxserver/wireguard)
docker exec rela-vpn wg showMismo formato que Linux directo.
Criterio de aprobación: latest handshake < 120 segundos + transfer > 0 bytes en ambas direcciones.
Capa 2 — Routing
La ruta hacia la subnet asignada por Rela AI debe pasar por la interfaz WireGuard.
Linux / Router con shell
ip route get 10.200.7.2 # reemplazá por IP dentro de tu subnet asignadaEsperado:
10.200.7.2 dev wg0 src 10.200.7.2 uid 0La clave: dev wg0 (o rela-vpn según el nombre que le pusiste). Si aparece dev eth0 o similar, la ruta está mal y el tráfico no va por el túnel.
Mikrotik
/ip route print where dst-address=10.200.X.0/24Debería mostrar una ruta GATEWAY=rela-vpn.
pfSense / OPNsense
Diagnostics → Routes y busca 10.200.X.0/24 — debe apuntar a la interfaz rela_vpn.
Criterio de aprobación: el prefix 10.200.X.0/24 (tu subnet asignada) tiene ruta vía la interfaz WireGuard.
Capa 3 — Conectividad IP (ping)
Desde tu router/gateway, ping a una IP dentro de la subnet asignada por Rela AI:
ping -c 4 10.200.7.2Esperado: 0% packet loss, RTT típicamente 30–150 ms (dependiendo de tu ubicación geográfica respecto a europe-west1).
Nota: Sólo las IPs "del lado de Rela AI" responden al ping si tenemos un sim ahí (testbed). En producción tu subnet está reservada sólo para tus dispositivos, así que el ping fallará hasta que hayas configurado un PLC o un test peer. La ausencia de ping a
10.200.X.2no es necesariamente un error en prod.
Cuando sí importa: desde el lado de la planta, ping <IP_del_PLC> (IP interna, NO IP de la VPN) debe funcionar. Si no funciona, el PLC o tu LAN tienen problema — no es la VPN.
Criterio de aprobación: ping al PLC desde el router (LAN local) funciona.
Capa 4 — Puerto TCP
Ahora verificamos que el puerto Modbus (502) del PLC responde:
# Desde el router / gateway, si tiene nc o ncat:
nc -zv <IP_DEL_PLC> 502
# Alternativa con telnet:
telnet <IP_DEL_PLC> 502Esperado:
Connection to 192.168.1.50 502 port [tcp/*] succeeded!Si ves Connection refused o No route to host, el problema es en la planta — no en la VPN. Revisá:
- Firewall local de planta entre el router y el PLC.
- El servicio Modbus del PLC está encendido.
- La IP correcta — consultá la configuración de red del PLC.
Criterio de aprobación: nc/telnet al puerto 502 del PLC dice succeeded.
Capa 5 — Lectura Modbus real
Prueba de un read_holding_registers contra el PLC. Hay varias herramientas:
Desde Linux con pymodbus-client (más técnico)
pip install pymodbus
python3 <<EOF
import asyncio
from pymodbus.client import AsyncModbusTcpClient
async def main():
c = AsyncModbusTcpClient("192.168.1.50", port=502)
await c.connect()
r = await c.read_holding_registers(address=0, count=1, device_id=1)
print("value:", r.registers if hasattr(r, "registers") else r)
c.close()
asyncio.run(main())
EOFEsperado: un número (por ejemplo [785] si es la temperatura ×10).
Desde Windows con Modbus Poll (GUI)
- Instalar Modbus Poll (trial gratuito).
- Connect → Modbus TCP/IP → IP del PLC, puerto 502, Unit 1.
- Setup → Read/Write Definition → Holding Register, Address 0, Quantity 1.
- Debería mostrar el valor en tiempo real.
Desde el Dashboard de Rela AI
Si ya creaste la fuente Modbus apuntando al PLC:
- Dashboard →
Alarmas → Fuentes → tu-fuente. - Pulsá Test connection.
- Se abre un panel con:
rtt_ms: latencia de ida y vuelta (debe ser menor a 500 ms).sample_values: tabla con el nombre del registro + valor decodificado.
Criterio de aprobación: lees un valor numérico que cambia con el proceso real (si miras durante 10-30 segundos, debería variar ligeramente si el proceso está activo).
Capa 6 — Pipeline completo en el Dashboard
La última milla: los eventos llegan al inbox.
- Dashboard →
Alarmas → Inbox. - A los 1-5 minutos de tener la fuente activa, deberías ver eventos con el nombre de tu registro como
event_type(por ejemploreactor.temperature). - El inbox consolida detecciones de la misma fuente bajo el mismo asset; si ves una fila creciendo con
count × N, está funcionando.
Criterio de aprobación: eventos con tu event_type aparecen en el inbox.
Troubleshooting Capa 1: el handshake nunca llega
Si Last Handshake = never o RX/TX en 0:
1. Firewall de salida
Tu router debe poder hacer conexión saliente UDP al puerto 51820 hacia la IP pública de nuestro concentrador. Muchos firewalls corporativos bloquean UDP por default.
Check: desde el router, intenta conectar con nc -uvz <ip-concentrador> 51820 (se queda colgado unos segundos y termina). Si el firewall permite, salta al siguiente paso; si bloquea, pedí a IT abrir ese flujo saliente.
2. Clave pública correcta
Un solo caracter perdido en copy-paste rompe el handshake. Verificá que la PublicKey del peer en tu router coincide exactamente con la que muestra el dashboard.
3. NAT cerrando el mapping
Si tu router está detrás de un NAT doble (ISP + corporativo), el mapping UDP puede cerrar antes del próximo handshake. Asegurate que PersistentKeepalive = 25 está activo. Esto fuerza un handshake cada 25s y mantiene el NAT vivo.
4. MTU mismatch
Raro pero posible: si tu conexión tiene MTU menor a 1420, los paquetes WG se fragmentan. En los logs del router podés ver "packet too big".
Fix: bajá el MTU de la interfaz WG a 1380:
- pfSense: VPN → WireGuard → Settings → MTU = 1380
- Linux:
ip link set mtu 1380 dev wg0
Troubleshooting Capa 3-4: handshake OK pero no llegás al PLC
1. Forwarding deshabilitado en el router
Tu router debe tener net.ipv4.ip_forward=1 para pasar tráfico entre interfaces.
- Linux:
sudo sysctl -w net.ipv4.ip_forward=1(persistir en/etc/sysctl.conf). - pfSense: viene habilitado por default.
- Mikrotik: viene habilitado por default.
2. Reglas de firewall LAN
Tu router debe permitir tráfico desde la interfaz WG hacia tu LAN OT.
- pfSense:
Firewall → Rules → WireGuard interface. Añadí reglaAllow from any to LAN subnet. - OPNsense: igual.
- Mikrotik: verificá que no haya regla de
dropen/ip firewall filterpara packetsin-interface=rela-vpn.
3. PLC no acepta conexiones fuera de su LAN
Algunos PLCs tienen whitelist interna de IPs. El origen del TCP desde nuestro worker es 10.200.X.2 (la IP asignada en tu subnet VPN). Asegurate que el PLC no bloquea esa IP.
Troubleshooting Capa 5-6: Modbus responde local pero Rela AI no
1. El worker no tiene Direct VPC Egress habilitado
Si tu cuenta acaba de activar conectividad VPN, puede haber un retraso de unos minutos hasta que Cloud Run redeploye. Esperá 5 minutos y reintentá.
2. Deployment mode incorrecto
- Si el PLC está detrás de tu VPN, la fuente debe tener
deployment_mode = cloud_direct. - Si usás rela-ai-edge en vez de VPN, debe ser
deployment_mode = edge+ asignaredge_gateway_id.
3. Unit ID incorrecto
Verificá en el PLC qué slave ID responde (1 es default pero algunos PLCs vienen con 2 o 255).
4. Data type / byte order
Si la conexión funciona pero el valor se ve absurdo, es problema de decodificación. Ver el troubleshooting en la guía Modbus.
Checklist rápido para imprimir
[ ] wg show muestra latest handshake < 2 min
[ ] ip route get <IP_subnet_asignada> → dev wgX
[ ] ping desde router al PLC local funciona
[ ] nc -zv <PLC_IP> 502 → succeeded
[ ] read_holding_registers desde router devuelve valor real
[ ] Dashboard: Test connection con rtt_ms < 500 + sample_values correctos
[ ] Inbox: eventos con event_type=<nombre_registro> aparecen a los 2 minSi los 7 checks están ✓, tu túnel está listo para producción. Pasá el testigo al equipo de planta para que empiecen a configurar alarmas y reglas.
Si algún check falla, tenés el rincón exacto que revisar — usá el troubleshooting correspondiente arriba.
Conectividad VPN — Alta y Configuración
Crea un túnel WireGuard dedicado entre tu planta y Rela AI, descarga la configuración adaptada a tu equipo, y valida que el PLC llega a la plataforma.
¿Por qué un túnel dedicado?
Las 9 razones técnicas y de cumplimiento por las que Rela AI no usa la VPN corporativa de nuestros clientes — y qué ganan con un peer WireGuard dedicado.