# Gateways

## Para qué sirve

Un **gateway** es un servidor de tu red, con salida a internet, que recibe los datos de otros servidores y los reenvía a Lymen. No hace falta comprar nada: cualquier servidor que ya tenga el agente instalado y llegue a Lymen puede cumplir ese rol.

Un gateway sirve para tres cosas:

1. **Servidores sin salida a internet.** Se instalan, se administran y mandan sus datos a través del gateway.
2. **Equipos de red.** Los switches, routers y firewalls los consulta un gateway desde adentro de tu red. Ver [Equipos de red](https://lymen.app/docs/instalacion/equipos-de-red/).
3. **Chequeos internos.** Pruebas a servicios que solo se ven desde tu red (una página de intranet, un puerto de base de datos).

## Cuándo usarlo

| Situación | ¿Gateway? |
|---|---|
| Todos tus servidores tienen salida a internet y no tenés equipos de red | No hace falta. |
| Hay servidores en una red aislada (sin internet) | Sí. |
| Querés monitorear switches, routers o firewalls | Sí, hace falta al menos uno. |
| Querés reducir las conexiones que salen de tu red | Opcional: salen solo desde el gateway. |
| Querés credenciales (de un switch, por ejemplo) que Lymen no pueda leer | Sí: se sellan para ese gateway. |

## Cómo se crea uno

1. Instalá el agente en un servidor que llegue a Lymen ([Linux](https://lymen.app/docs/instalacion/agente-linux/) o [Windows](https://lymen.app/docs/instalacion/agente-windows/)).
2. En **Infraestructura**, abrí ese servidor.
3. En la sección **Gateway de la red**, activá **Este servidor es gateway**.
4. Escribí la **dirección dentro de tu red** que van a usar los otros servidores, por ejemplo `10.0.0.5:4390`. Si no ponés puerto, se usa el **4390**.
5. Tocá **Guardar**.
6. Abrí el puerto en el firewall del gateway, desde los servidores que lo van a usar.
7. Esperá un minuto: el gateway publica su certificado y pasa a mostrarse como **Enlace cifrado** en Agregar datos.

Solo puede ser gateway un servidor *Conectado* y con salida directa a Lymen. Para dejar de serlo, antes tenés que sacarlo de la lista de cada servidor que lo usa.

### Estado de un gateway

En **Agregar datos › Gateways** cada gateway muestra:

| Etiqueta | Significado |
|---|---|
| **Conectado / Sin conexión** | Si hoy responde. |
| **Enlace cifrado** | Ya publicó su certificado: se puede generar un comando cifrado. |
| **Sin certificado todavía** | Se publica solo, un minuto después de que el gateway arranca. |
| **Sin salida directa** | Este gateway, a su vez, llega a Lymen a través de otro gateway. |

## Listas de gateways

Cada servidor puede tener una **lista ordenada** de hasta **5 gateways**:

- El primero es el **preferido**. Los demás son de repuesto.
- Si uno no responde, el servidor pasa al siguiente. Cuando el preferido vuelve, regresa a él.
- Podés **Subir**, **Bajar**, **Sacar** y **Agregar un gateway** desde el detalle del servidor.
- Los gateways se pueden **encadenar** (un gateway que sale por otro), hasta 5 saltos y sin ciclos. Sirve para redes segmentadas.
- La sección **Por dónde sale** muestra por cuál gateway salen los datos ahora, si alguno no responde y cuántas veces cambió.
- Un servidor **sin salida directa** a Lymen no puede quedarse sin su último gateway. Para quitarlos todos hay que reinstalar el agente desde una red con salida.

El muestreo de trazas (cuántas guardás) lo ejecuta el **último gateway de la cadena**: si usás gateways, ahí se decide qué se descarta. Se configura en Muestreo.

## Cifrado (TLS) entre servidores y gateways

Por defecto, el servidor habla con sus gateways por **https** y acepta **solo el certificado propio de cada gateway** (queda "fijado" con una huella). Eso evita que alguien en tu red se haga pasar por el gateway y vea el token o los datos.

- El gateway genera su certificado la primera vez y lo renueva con la misma clave, así los servidores que lo tienen fijado no quedan afuera.
- El portal pone la huella en el comando de instalación; por eso **conviene copiar siempre el comando completo**.
- En Linux la huella es de la clave pública (`sha256//…`); en Windows, el SHA-256 del certificado.

| Opción | Impacto |
|---|---|
| Cifrado (por defecto) | Lo recomendado. El gateway tiene que haber publicado su certificado antes de generar el comando. |
| **Sin cifrar (no recomendado)** | El token del servidor y sus datos viajan en claro por tu red. Pensado solo para casos donde el gateway no puede tener certificado. El portal lo señala en el servidor, y para cifrar hay que reinstalar sin esa opción. |

## Lista permitida de chequeos internos

Lymen puede pedirle a un gateway que pruebe un servicio de tu red (una URL o un puerto). Para que **nadie, ni siquiera Lymen, pueda mandar al gateway a probar cualquier cosa**, esa lista la definís vos en un archivo del propio gateway. Todo lo que no figura se rechaza.

| Sistema | Archivo |
|---|---|
| Linux | `/etc/lymen-agent/gateway-permitidos.yaml` (dueño root) |
| Windows | `C:\ProgramData\lymen-agent\permitidos\gateway-permitidos.yaml` (solo Administradores pueden modificarlo) |

El archivo se lee en cada chequeo: **no hace falta reiniciar** nada. Si no existe, está vacío o tiene un error de formato (por ejemplo, un campo que no existe), **se rechaza todo**.

### Campos de cada entrada de `chequeos`

| Campo | Para qué sirve | Por defecto | Valores válidos | Impacto |
|---|---|---|---|---|
| `tipo` | Tipo de chequeo. | — (obligatorio) | `http` o `tcp` | Define qué otros campos se usan. |
| `url` | (http) Dirección permitida. | — | `http://` o `https://`, sin usuario ni fragmento. Exacta, o con `*` al final para permitir cualquier ruta que empiece así. | Con `*` abrís todo un tramo del servidor: poné la ruta más específica posible. |
| `metodos` | (http) Métodos permitidos. | `[GET]` | `GET`, `HEAD` | Solo se ejecutan GET y HEAD. Nunca se envía un cuerpo. |
| `tls_inseguro` | (https) Acepta certificados propios o vencidos. | `false` | `true` / `false` | **Seguridad.** En `true` el chequeo no verifica con quién habla. Usalo solo para un servicio interno con certificado propio. |
| `consulta` | (http) Permite que la URL lleve parámetros (`?a=b`). | `false` | `true` / `false` | Sin esto, una URL con parámetros se rechaza. |
| `credenciales` | (http) Ids de credenciales del Llavero (alcance "Solo en tu red") que se pueden usar contra *esta* dirección. | Ninguna | Lista de ids | **Seguridad.** Sin la lista, no se usa ninguna credencial. Una credencial solo viaja a las direcciones que le habilitaste. |
| `destino` | (tcp) Servidor y puerto a probar. | — | `host:puerto` | Solo comprueba que se pueda abrir la conexión; no manda datos. |

Reglas fijas: tiempo máximo de 30 segundos por chequeo (10 si no se indica), no se siguen redirecciones y **nunca se devuelve el cuerpo de la respuesta**: Lymen solo recibe si anduvo, el código, cuánto tardó y los días que le quedan al certificado.

### Ejemplo

```yaml
chequeos:
  - tipo: http
    url: http://intranet.local:8080/salud
    metodos: [GET]
  - tipo: http
    url: https://agenda.clinica.local/api/*
    tls_inseguro: true       # certificado propio
  - tipo: tcp
    destino: 10.0.0.5:5432
```

## Problemas comunes

| Síntoma | Qué hacer |
|---|---|
| Un chequeo vuelve "no está en la lista permitida de este gateway" | Agregá esa URL o ese destino al archivo. Revisá puerto y esquema (`http` y `https` son distintos). |
| "este gateway no tiene lista permitida" | El archivo no existe o tiene un error de formato. Revisá la sangría y que los campos existan. |
| Los servidores no llegan al gateway | Abrí el puerto (4390 por defecto) en el firewall del gateway y probá la dirección desde el servidor. |
| "todavía no publicó su certificado" | Esperá un minuto desde que el gateway arrancó. |
| "esa credencial no está permitida para esta dirección" | Agregá el id de la credencial en `credenciales` de esa entrada. |
