Conjunto de protocolos de Internet |
---|
Capa de aplicación |
Transport layer |
Internet layer |
Link layer |
El Protocolo de Control de Puertos ( PCP ) es un protocolo de red informática que permite a los hosts en redes IPv4 o IPv6 controlar cómo se traducen y reenvían los paquetes IPv4 o IPv6 entrantes mediante un enrutador ascendente que realiza la traducción de direcciones de red (NAT) o el filtrado de paquetes . Al permitir que los hosts creen reglas explícitas de reenvío de puertos , el manejo del tráfico de red se puede configurar fácilmente para hacer que los hosts ubicados detrás de NAT o firewalls sean accesibles desde el resto de Internet (para que también puedan actuar como servidores de red ), lo que es un requisito para muchas aplicaciones. [1] [2]
Además, las reglas explícitas de reenvío de puertos disponibles a través de PCP permiten a los hosts reducir la cantidad de tráfico generado al eliminar soluciones alternativas en forma de mensajes de mantenimiento de NAT salientes , que son necesarios para mantener las conexiones con los servidores y para varias técnicas de cruce de NAT , como la perforación de agujeros TCP . Al mismo tiempo, un menor tráfico generado reduce el consumo de energía , lo que mejora directamente la duración de la batería de los dispositivos móviles . [1]
PCP se estandarizó en 2013 como sucesor del Protocolo de mapeo de puertos NAT (NAT-PMP), con el que comparte conceptos de protocolo y formatos de paquetes similares. [3] PCP agrega soporte para IPv6 y escenarios NAT adicionales.
En entornos en los que se utiliza un IGD UPnP en la red local, es necesario incorporar en el IGD una función de interfuncionamiento entre el IGD UPnP y el PCP. La función de interfuncionamiento entre el IGD UPnP y el PCP se especifica en RFC6970. [4]
Las opciones de DHCP (IPv4 e IPv6) para configurar hosts con direcciones IP de servidor de Protocolo de control de puertos (PCP) se especifican en RFC7291. [5] El procedimiento a seguir para seleccionar un servidor entre una lista de servidores PCP se analiza en RFC7488. [6]
En entornos donde se implementa NAT64, PCP permite conocer los prefijos IPv6 utilizados por un dispositivo NAT64 controlado por PCP para construir direcciones IPv6 convertidas a IPv4 mediante NAT64 (RFC7225). [7]
Muchas aplicaciones y equipos de red requieren que sus ubicaciones de red sean accesibles desde fuera de sus redes locales , siguiendo el modelo originalmente previsto de conectividad IP de extremo a extremo a través de Internet, de modo que puedan funcionar como servidores de red y aceptar conexiones de clientes remotos . Un ejemplo de dicho equipo es una cámara IP , que incluye un servidor de red que proporciona vigilancia remota a través de redes IP.
Por lo general, las implementaciones de equipos de red ubican los dispositivos detrás de enrutadores o firewalls que realizan NAT (para permitir compartir una dirección IPv4 , por ejemplo) o filtrado de paquetes (para mejorar la seguridad y protección de la red), terminando por romper la conectividad de extremo a extremo y haciendo que los equipos y aplicaciones sean inaccesibles desde el resto de Internet. [1] [3]
Para que el equipo implementado sea accesible, extendiendo su función de servidor más allá de la red local, se requiere la configuración manual del reenvío de puertos en la puerta de enlace de red (que normalmente es un CPE ) o soluciones alternativas a nivel de aplicación que inicien conexiones desde el equipo implementado a servidores intermedios adicionales utilizados para "fusionar" esas conexiones de "perforación del firewall" y las conexiones de los clientes reales. Ambos enfoques tienen sus desventajas: la configuración manual del CPE suele ser incómoda o imposible, mientras que el uso de servidores intermedios adicionales aumenta la complejidad y el costo. [2] [3]
Por ejemplo, un juego de computadora en línea (que actúa como un cliente) requiere comunicación con un servidor de juego para intercambiar datos de juego . Para que un servidor de juego pueda proporcionar datos a sus clientes, dichos clientes deben ser accesibles al servidor. Por lo general, los clientes inician conexiones con el servidor de juego para abrir canales de comunicación. Sin embargo, dichas conexiones abiertas pueden quedar inactivas y, posteriormente, pueden ser cerradas por las puertas de enlace de la red, lo que lleva a la necesidad de mantenerlas mediante el uso de una forma de mensajes de mantenimiento de conexión. [3] Los mensajes de mantenimiento de conexión son pequeños mensajes que se envían entre el cliente y el servidor que crean tráfico a través de un canal de comunicación y, por lo tanto, evitan que los servidores de puerta de enlace lo cierren. Por lo tanto, mantener una conexión activa requiere un intercambio constante de mensajes vacíos entre el cliente y el servidor. Esto aumenta la comunicación en la red, desperdicia ancho de banda de red y ciclos de CPU , y disminuye la autonomía de los dispositivos alimentados por batería .
Además, algunas aplicaciones de red (por ejemplo, FTP ) requieren la apertura dinámica de múltiples conexiones, lo que involucra puertas de enlace a nivel de aplicación (ALG) y además aumenta la complejidad. [2] [3]
PCP permite que los equipos y las aplicaciones creen asignaciones explícitas entre una dirección IP externa , un protocolo y un puerto , y una dirección IP interna, un protocolo y un puerto. Con estas asignaciones explícitas, la comunicación entrante puede llegar a los hosts detrás de un NAT o un cortafuegos, lo que expande sus funciones de servidor más allá de los límites de las redes locales o hace que el uso de varios servicios sea más sencillo y consuma menos recursos. Las asignaciones creadas son permanentes en la medida en que tienen una vida útil conocida que se puede extender, lo que es similar a la forma en que el Protocolo de configuración dinámica de host (DHCP) implementa sus arrendamientos . Al mismo tiempo, PCP permite que las aplicaciones creen asignaciones adicionales de forma dinámica según sea necesario, lo que reduce o elimina la necesidad de tener dispositivos NAT y cortafuegos habilitados para ALG . [1] [3]
Las asignaciones explícitas creadas tienen una vida útil conocida, normalmente de varias horas, sin necesidad de que se intercambien mensajes de mantenimiento de la conexión a nivel de aplicación entre los hosts y los servidores con el fin de preservar la asignación. Como resultado, se reduce el uso de la red y el consumo de energía, y ya no es necesario implementar la lógica de mantenimiento de la conexión a nivel de aplicación en los lados del cliente y del servidor. La respuesta de asignación de PCP proporciona a la aplicación parámetros visibles externamente asociados (dirección IP, protocolo y puerto) que luego se pueden anunciar a otros clientes de formas específicas de la aplicación para que se puedan establecer conexiones entrantes. Además, PCP puede informar a las aplicaciones cuando se cambia la dirección IP externa mientras ya se ha establecido una asignación. [1] [3]
PCP puede manejar varios tipos de NAT, brindando soporte para NAT64 , NAT66 y NAT44 ; también se admite la inclusión de PCP en dispositivos de firewall IPv4 e IPv6. PCP está diseñado para usarse tanto en puntos de agregación a gran escala (por ejemplo, como parte de NAT de nivel de operador ) como dentro de dispositivos de nivel de consumidor menos costosos . Se admiten asignaciones tanto a largo plazo (para una cámara IP o un sensor de temperatura que actúa como servidor, por ejemplo) como a corto plazo (mientras se juega un juego de computadora en línea, por ejemplo). [1] [2] [3]
PCP admite protocolos de capa de transporte que utilizan números de puerto de 16 bits (por ejemplo, TCP , UDP , Protocolo de transmisión de control de flujo (SCTP) o Protocolo de control de congestión de datagramas (DCCP). Los protocolos que no utilizan números de puerto (por ejemplo, Protocolo de reserva de recursos (RSVP), Carga útil de seguridad encapsulante (ESP), ICMP o ICMPv6 ) son compatibles con funciones de firewall IPv4, firewall IPv6 y NPTv6 (traducción de prefijo IPv6), pero no pueden ser compatibles con más de un cliente por dirección IP externa en el caso de NAT. [3]
La especificación PCP no define un mecanismo para tratar con redes multi-homed (que tienen múltiples puertas de enlace de red o rutas predeterminadas ). No obstante, es posible implementar PCP en dichas redes utilizando un mecanismo de coordinación como conntrackd . Sin embargo, si las diferentes redes tienen cada una su propia dirección IP externa, una asignación PCP dada solo puede utilizar una u otra porque el protocolo requiere que se proporcione una dirección IP externa específica al cliente. Si esa red dejara de estar disponible, la asignación PCP tendría que actualizarse para utilizar una dirección IP externa de la otra red. [3]
La especificación PCP no define un mecanismo para informar a las computadoras remotas sobre la dirección IP, el protocolo y el puerto de la conexión entrante. RFC6887 establece que PCP no proporciona ninguna función de encuentro y que esto debe hacerse de una manera específica para cada aplicación, como por ejemplo utilizando servidores de servicios de nombres externos.
PCP se estandarizó en 2013 como sucesor del Protocolo de mapeo de puertos NAT ( NAT-PMP ), con el que comparte conceptos de protocolo y formatos de paquetes similares. Una de las diferencias de diseño es que NAT-PMP está bastante limitado a la implementación en dispositivos de consumo, mientras que PCP está diseñado para admitir también equipos de nivel de operador . [3] : 50, 87 Desde 2005, NAT-PMP se ha implementado en varios productos de Apple . [8] : 1
PCP se relaciona con el Protocolo de Dispositivo de Puerta de Enlace de Internet (IPD-UPnP), que se estandarizó en 2001 como parte de la especificación UPnP . Mientras que el IPD-UPnP es complejo y está diseñado para una configuración manual, el PCP está diseñado para la simplicidad y el uso automatizado dentro de aplicaciones de software. La especificación NAT-PMP contiene una lista de los problemas con el IPD-UPnP que impulsaron la creación de NAT-PMP y, posteriormente, su sucesor, el PCP. [8] : 26–32
Excluyendo a los atacantes capaces de alterar los paquetes de red intercambiados mientras se crea una asignación PCP explícita (paquetes que contienen la negociación requerida para establecer una asignación explícita, que se intercambia entre hosts y dispositivos NAT o firewalls habilitados para PCP), se considera que PCP es seguro siempre que las asignaciones explícitas creadas no excedan el dominio de las asignaciones implícitas. En otras palabras, las asignaciones implícitas se crean como resultado de la forma en que los dispositivos NAT y firewalls manejan las conexiones salientes regulares de los clientes, lo que significa que PCP es seguro siempre que no se introduzcan nuevas posibilidades de asignación a través del mecanismo de asignación explícita. [3]
Desde el punto de vista de la seguridad , una característica importante de PCP es la opción de solicitud de mapeo THIRD_PARTY . Cuando se utiliza, esta opción significa que la dirección IP especificada adicionalmente como parte de la solicitud de mapeo debe usarse como la dirección interna para el mapeo explícito creado, en lugar de seguir el comportamiento predeterminado de usar la dirección IP de origen del paquete de solicitud de mapeo real para ese propósito. Tales solicitudes de mapeo pueden terminar con un dispositivo NAT habilitado para PCP o un firewall que otorga privilegios de mapeo explícito más altos que los permitidos por los mapeos implícitos debido a reglas desconocidas impuestas en otro lugar para la dirección IP especificada, lo que permite de esa manera que un atacante robe algo de tráfico o realice un ataque de denegación de servicio (DoS). [3]
Además, existen mecanismos de seguridad PCP explícitos disponibles como extensiones del protocolo PCP, que proporcionan mecanismos de autenticación y control de acceso mediante el uso de un canal de señalización en banda autenticado y con protección de integridad, que se basa en el Protocolo de autenticación extensible (EAP) para realizar la autenticación entre dispositivos involucrados en una sesión de negociación PCP. Dichos dispositivos NAT o cortafuegos habilitados para PCP pueden seguir aceptando solicitudes de mapeo no autenticadas; al mismo tiempo, siguen aplicándose todas las restricciones de mapeo explícitas descritas anteriormente. [1] [3] [11]
Internamente, el PCP funciona intercambiando mensajes de control entre los hosts y los dispositivos NAT o firewalls habilitados para PCP (denominados servidores), utilizando el Protocolo de datagramas de usuario (UDP) como protocolo subyacente. Esta comunicación consiste en solicitudes de mapeo de puertos creadas por los hosts que dan como resultado respuestas una vez enviadas y procesadas por los servidores. Siguiendo la naturaleza de falta de fiabilidad del UDP, lo que significa que los datagramas UDP se pueden perder, duplicar o reordenar, después de enviar una solicitud no hay garantía de recibir una respuesta de ningún tipo, por lo que las solicitudes del host también se denominan "pistas". Además de las respuestas directas, los servidores también generan notificaciones gratuitas, por ejemplo, notificaciones de unidifusión para informar a los hosts de los cambios en la dirección IP externa. [1] [3]
Código de operación | Descripción |
---|---|
MAPA | Crea o renueva una asignación para el reenvío entrante, lo que permite que un host actúe como servidor y reciba comunicación entrante. |
PAR | Crea o renueva un mapeo saliente, lo que permite que un host mantenga abierta su comunicación con un solo par. |
ANUNCIAR | Anuncia varios cambios en los hosts, incluidos reinicios del servidor y cambios en la dirección IP externa. |
Los mensajes intercambiados no contienen ningún medio para determinar ni la transacción a la que pertenecen ni la etapa de una "sesión" que representan. Este diseño simplificado se basa en que todos los mensajes se autodescriben y completan, sin necesidad de contexto adicional para que cada mensaje se procese correctamente. Los servidores pueden decidir ignorar silenciosamente las solicitudes del host, en caso de que no puedan procesarlas en ese momento; en tales casos, los hosts deben retransmitir la solicitud. Además, los hosts pueden decidir con seguridad ignorar silenciosamente cualquier respuesta de mapeo no deseada. [3]
Para crear solicitudes PCP, la dirección IP del servidor se configura manualmente en el host, se encuentra como parte de la concesión DHCP del host o se establece en la puerta de enlace predeterminada configurada del host . Los mensajes de solicitud del host se envían desde cualquier puerto UDP de origen en un cliente al puerto UDP 5351 del servidor que escucha; las notificaciones de servidor de multidifusión no solicitadas (como anuncios de reinicio del servidor) se envían desde el puerto UDP 5351 del servidor al puerto UDP 5350 en los hosts que escuchan. [3]
La longitud máxima de la carga útil UDP para todos los mensajes PCP es de 1100 octetos . Cada mensaje PCP consta de un encabezado de solicitud o respuesta que contiene un código de operación que determina la operación asociada, cualquier información relevante específica del código de operación (como qué puertos se deben asignar) y cero o más opciones (como la opción THIRD_PARTY descrita anteriormente). Los códigos de resultado se devuelven como parte de las respuestas del servidor; cada código de resultado tiene una duración asociada, que indica a los hosts cuándo se pueden volver a intentar o se deben repetir ciertas operaciones. Por ejemplo, las duraciones de los resultados pueden especificar cuánto tiempo se espera que persista una condición de falla o cuánto durará la asignación creada. [3]
{{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda )