Puede configurar el reenvío de puertos de red en todas las versiones de Windows sin necesidad de utilizar herramientas de terceros. Mediante una regla de reenvío de puertos, puede redirigir una conexión TCP entrante (IPv4 o IPv6) desde el puerto TCP local a cualquier otro número de puerto, o incluso a un puerto de un equipo remoto. Además, no es necesario que Windows tenga un servicio que escuche en un puerto TCP específico. El reenvío de puertos de Windows se utiliza más comúnmente para eludir los cortafuegos o para ocultar un host o servicio interno de la red externa (NAT/PAT).
En el mundo de Linux, el reenvío de puertos se configura de forma bastante sencilla utilizando iptables o firewalld. En los sistemas Windows Server, se suele utilizar el Servicio de Enrutamiento y Acceso Remoto (RRAS) para configurar los redireccionamientos de puertos. Sin embargo, hay una forma más sencilla de configurar el redireccionamiento de puertos, que funciona bien en cualquier versión de Windows.
¿Cómo configurar el redireccionamiento de puertos en Windows 10 usando Netsh Portproxy?
Puedes configurar el redireccionamiento de puertos en Windows usando el modo Portproxy del comando Netsh. La sintaxis del comando es la siguiente:
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
donde
- listenaddress – es una dirección IP local para escuchar la conexión entrante (útil si tiene múltiples NICs o múltiples direcciones IP en una interfaz);
- listenport – número de puerto TCP local de escucha (la conexión está esperando);
- connectaddress – es una dirección IP local o remota (o nombre DNS) a la que desea redirigir la conexión entrante;
- connectport – es un puerto TCP al que se reenvía la conexión de
listenport
.
netsh interface portproxy add
v4tov6
v6tov4
v6tov6
, puedes crear reglas de reenvío de puertos entre direcciones IPv4 e IPv6.Supongamos que nuestra tarea i es hacer que el servicio RDP responda en un puerto no estándar, por ejemplo el 3340 (el puerto se puede cambiar en la configuración del servicio de Escritorio Remoto, pero estamos usando RDP para que sea más fácil demostrar el reenvío de puertos). Para ello, tenemos que redirigir el tráfico entrante del puerto TCP 3340 a otro puerto local – 3389 (este es el número de puerto RDP por defecto).
netstat -na|find "3340"
Alternativamente, puede comprobar que el puerto no está escuchando localmente utilizando el cmdlet de PowerShell Test-NetConnection:
Test-NetConnection -ComputerName localhost -Port 3340
Para crear una regla de reenvío de puertos en Windows 10, ejecuta un símbolo del sistema como administrador y ejecuta el siguiente comando:
netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.1.1.110 connectport=3389 connectaddress=10.1.1.110
Donde 10.10.1.110 – la dirección IP actual de este equipo.
Ahora, utilice la herramienta netstat para comprobar que Windows está ahora escuchando en el puerto local 3340:
netstat -ano | findstr :3340
El soporte de IPv6 debe estar habilitado en la interfaz de red para la que se crea la regla de reenvío de puertos.
Estos son los requisitos previos para el correcto funcionamiento del reenvío de puertos. Sin el servicio IP Helper y sin el soporte IPv6 habilitado, la redirección de puertos no funcionará.
Para que el reenvío de puertos funcione en Windows Server 2003/XP, debe establecer adicionalmente el parámetro IPEnableRouter a 1 en la clave de registro HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters.
Puede averiguar qué proceso está escuchando en el puerto especificado utilizando su PID (en nuestro ejemplo, el PID es 636):
tasklist | findstr 636
Intentemos conectarnos a este puerto desde un equipo remoto utilizando cualquier cliente RDP. El puerto 3340 debe ser especificado como el número de puerto RDP. Se especifica después de los dos puntos que siguen a la dirección del servidor RDP. Por ejemplo, 10.10.1.110:3340