Protocolo 47 frente al puerto TCP 47: dos cabeceras, dos reglas
Un número de protocolo y un puerto viven en cabeceras distintas, así que una regla no puede sustituir a la otra. PPTP separa ambos, y una casilla de puerto no puede expresar GRE.
Las redes de hotel y los cortafuegos de conferencias suelen mostrar una casilla de permiso personalizada, y alguien escribe 47 en ella esperando que PPTP funcione. La regla se crea, el túnel sigue fallando y el siguiente intento usa otro número. Lo que salió mal está en el propio paquete: IPv4 tiene un campo de protocolo que nombra lo que sigue a la cabecera IP, mientras que TCP y UDP tienen campos de puerto que solo existen cuando ya estás dentro de una de esas cabeceras. No son dos formas de escribir el mismo permiso.
La cabecera IPv4 nombra el protocolo siguiente
El campo de protocolo es un byte de la cabecera IPv4 y contiene un número que describe la carga útil: 6 para TCP, 17 para UDP, 47 para GRE, 50 para ESP. Todo lo que filtra paquetes lee ese valor antes de mirar más adentro, porque la cabecera más interna solo tiene sentido una vez conocido el tipo. Cambia un puerto más adelante en la conversación y este campo no se ha movido.
Por tanto, una regla escrita contra el protocolo 47 describe la capa IP. Ningún puerto participa en la decisión.
Los puertos existen dentro de TCP y UDP, en ningún otro sitio
Los puertos son identificadores de dieciséis bits dentro de las cabeceras TCP y UDP, y su tarea es separar conversaciones que comparten una dirección. Una cabecera GRE lleva un valor de tipo de protocolo, a menudo un EtherType, más claves opcionales para la multiplexación. Por eso la expresión puerto 47 no nombra nada con lo que un paquete GRE pueda coincidir.
Las interfaces de cortafuegos difieren en cuánto de esto exponen. Algunas aceptan un número de protocolo, otras ofrecen una lista con nombres y unas pocas solo aceptan TCP o UDP con puertos.
PPTP usa las dos capas a la vez
PPTP es el ejemplo más claro porque reparte deliberadamente su trabajo entre las dos. La conexión de control es una sesión TCP al puerto 1723, y la ruta de datos es GRE, protocolo 47, sin ningún puerto en parte alguna. Un cortafuegos que permite 1723 y nada más deja que empiece la negociación y luego descarta la carga útil. El túnel parece quedarse colgado tras la autenticación en lugar de no conectar, y por eso el síntoma se reporta a menudo como un problema de contraseña.
| Path | Outer protocol | Port |
|---|---|---|
| Control channel | TCP, protocol 6 | 1723 |
| Data channel | GRE, protocol 47 | None |
Lee las dos filas por separado al escribir la regla, y comprueba cada una contra la sintaxis del fabricante. Una fila necesita un puerto, la otra necesita un número de protocolo, y ninguna entrada única cubre ambas.
Por qué una página de redirección de puertos no puede expresar GRE
Un formulario de redirección que solo acepta TCP y UDP no puede describir GRE, se llame como se llame el formulario. La traducción de direcciones añade una segunda dificultad, porque GRE no tiene puertos y el traductor debe seguir en su lugar el identificador de llamada. Algunos routers domésticos incluyen un asistente que lo resuelve; muchos no, y ninguna entrada adicional de permiso TCP creará ese comportamiento.
Cuando el requisito real es un túnel moderno, elige un diseño que use TCP o UDP a propósito en lugar de esperar que un traductor adivine bien.
La encapsulación decide qué ve el filtro
La encapsulación cambia el paquete externo, y el paquete externo es lo que una regla hace coincidir. El ESP nativo es el protocolo 50, mientras que el tránsito por NAT envuelve ESP dentro de UDP 4500 para que sobreviva a la traducción de direcciones. Un filtro que permite UDP 4500 nunca ve el protocolo 50, y un filtro escrito para el protocolo 50 nunca coincide con la forma envuelta.
Pregunta en qué encapsulación se pusieron de acuerdo el cliente y la puerta de enlace, y luego escribe la regla para esa forma externa y nada más.
Escribe la regla para que alguien pueda comprobarla
Expresa cada regla como familia de direcciones, protocolo externo, puertos de transporte si los hay, dirección y ambos extremos. Un revisor puede comparar esa frase con una captura de paquetes y llegar a un veredicto. Una instrucción de abrir 47 no la puede comprobar nadie, y así sobrevive años en los manuales de procedimientos.
Añade la prueba que lo demuestra: conéctate mientras capturas en la interfaz externa y confirma el protocolo externo y el puerto que aparecen realmente en la traza.