Documenta el NAT de retorno y la IP fija de la linea

La regla de que la red local entra siempre no sirve para el porton, y es
lo que mas despista: una peticion al dominio desde la propia red sale al
router y vuelve reescrita, asi que al proxy le llega con la IP publica.
Sin esa direccion en la lista, uno ve su propia pagina de espera en su
propio ordenador y no hay forma de entender por que.

La IP es fija y contratada, asi que la lista no hay que revisarla.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
master
dev 4 weeks ago
parent e26acff89e
commit d4302527dd

@ -71,6 +71,11 @@ ORIGIN=http://localhost:3000
# otro sitio, la de quien tenga que revisar. Direcciones sueltas o rangos: # otro sitio, la de quien tenga que revisar. Direcciones sueltas o rangos:
# PROXIMAMENTE_PERMITIDAS=89.46.247.16,85.60.0.0/16 # PROXIMAMENTE_PERMITIDAS=89.46.247.16,85.60.0.0/16
# #
# En este montaje hay que poner ahí la IP pública de la propia línea —fija y
# contratada como tal— aunque se mire desde casa: el router hace NAT de retorno,
# así que una petición al dominio desde la red local llega al proxy con la IP
# pública y no con la 192.168. Sin ella verías tu propia página de espera.
#
# IMPORTANTE: con un proxy delante hay que poner también ADDRESS_HEADER y # IMPORTANTE: con un proxy delante hay que poner también ADDRESS_HEADER y
# XFF_DEPTH, aquí abajo. Sin ellas todas las peticiones parecen venir del proxy # XFF_DEPTH, aquí abajo. Sin ellas todas las peticiones parecen venir del proxy
# —una IP local—, así que el portón deja pasar a todo el mundo y no se nota. # —una IP local—, así que el portón deja pasar a todo el mundo y no se nota.

@ -144,14 +144,47 @@ Proxy Manager, y es ahí donde hay que mirar:
journalctl -u senzapaura -n 50 --no-pager journalctl -u senzapaura -n 50 --no-pager
``` ```
## El portón de «muy pronto»
Mientras la web no esté abierta al público, en el `.env` del servidor:
```sh
PROXIMAMENTE=1
PROXIMAMENTE_PERMITIDAS=89.46.247.16
```
Esa dirección es la IP pública fija de la línea —contratada como fija, no
depende de renovaciones—, así que la lista no hay que revisarla.
Y ahí está lo que despista: **hace falta ponerla aunque estés en casa.**
La regla «la red local entra siempre» no sirve para esto. Cuando desde la propia
red se pide `senzapaura.es`, el nombre resuelve a la IP pública, la petición
sale al router y vuelve, y el router la reescribe: al proxy le llega como
`89.46.247.16`, no como `192.168.18.x`. Es NAT de retorno, y lo hacen casi todos
los routers domésticos. Sin la IP pública en la lista, verías tu propia página
de espera en tu propio ordenador y no habría forma de entender por qué.
Se comprueba en el registro del proxy:
```sh
tail -3 /data/logs/proxy-host-5_access.log # [Client 89.46.247.16]
```
De paso, algo que conviene saber que funciona: mandar a mano un
`X-Forwarded-For: 8.8.8.8` **no abre el portón**. El proxy añade la dirección
real al final de la cabecera y `XFF_DEPTH=1` es la que se lee. Por eso el número
tiene que ser exacto: si algún día se mete otro proxy delante y no se sube a 2,
la dirección pasa a ser la que mande quien pide.
## Si el operador bloquea el 80 y el 443 ## Si el operador bloquea el 80 y el 443
Avatel es fibra residencial, y ahí es habitual encontrarse los puertos de No es el caso aquí: la línea tiene IP pública fija contratada y los puertos 80
entrada cerrados o direcciones compartidas entre varios clientes (CGNAT). El y 443 llegan. Queda escrito por si algún día se mueve el montaje a otra
síntoma es claro: el DNS resuelve bien, desde dentro de casa se ve, y desde conexión, porque el síntoma es de los que se confunden con un fallo de
fuera —desde datos del móvil, por ejemplo— no responde nada. configuración: el DNS resuelve bien, desde dentro de casa se ve, y desde fuera
—desde los datos del móvil, por ejemplo— no responde nada.
Si pasa, hay dos salidas: pedirles IP pública sin filtrar, o montar un túnel Si eso pasara, hay dos salidas: pedir al operador la IP pública sin filtrar, o
—Cloudflare Tunnel es lo más directo— que sale desde la red hacia fuera y no montar un túnel —Cloudflare Tunnel es lo más directo— que sale desde la red
necesita ningún puerto abierto. Con túnel, el paso 2 sobra y el certificado lo hacia fuera y no necesita ningún puerto abierto.
pone Cloudflare.

@ -8,9 +8,8 @@ import { afterEach, describe, expect, it, vi } from 'vitest';
const entorno = vi.hoisted(() => ({}) as Record<string, string | undefined>); const entorno = vi.hoisted(() => ({}) as Record<string, string | undefined>);
vi.mock('$env/dynamic/private', () => ({ env: entorno })); vi.mock('$env/dynamic/private', () => ({ env: entorno }));
const { esRutaLibre, permitidas, porton, puedeEntrar, robotsCerrado, RUTA_ESPERA } = await import( const { esRutaLibre, permitidas, porton, puedeEntrar, robotsCerrado, RUTA_ESPERA } =
'./proximamente' await import('./proximamente');
);
afterEach(() => { afterEach(() => {
for (const clave of Object.keys(entorno)) delete entorno[clave]; for (const clave of Object.keys(entorno)) delete entorno[clave];

Loading…
Cancel
Save

Powered by TurnKey Linux.