Configurar el reenvío de puertos en Windows

Puedes configurar reenvío de puertos de red en todas las versiones de Windows sin utilizar herramientas de terceros. Con 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 en una computadora remota. 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 usa más comúnmente para eludir firewalls u ocultar un host o servicio interno de la red externa (NAT / PAT).

En el mundo de Linux, el reenvío de puertos se configura simplemente usando iptables o firewalld. En los sistemas Windows Server, el Servicio de enrutamiento y acceso remoto (RRAS) se usa generalmente para configurar redirecciones de puertos. Sin embargo, existe una forma más sencilla de configurar el reenvío de puertos, que funciona bien en cualquier versión de Windows.

¿Cómo configurar el reenvío de puertos en Windows 10 usando Netsh Portproxy?

Puede configurar el reenvío de puertos en Windows usando el Portproxy modo de la Netsh mando. La sintaxis del comando es la siguiente:

netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
dónde

  • escuchar direccion – es una dirección IP local para escuchar la conexión entrante (útil si tiene varias NIC o varias direcciones IP en una interfaz);
  • puerto de escucha – número de puerto TCP de escucha local (la conexión está en espera);
  • dirección de conexión – 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 la conexión desde listenport se reenvía a.

Utilizando el netsh interface portproxy add v4tov6/v6tov4/v6tov6 opciones, puede crear reglas de reenvío de puertos entre direcciones IPv4 e IPv6.

Supongamos que nuestra tarea es hacer que el servicio RDP responda en un puerto no estándar, por ejemplo 3340 (el puerto se puede cambiar en la configuración del servicio Escritorio remoto, pero estamos usando RDP para facilitar la demostración del puerto reenvío). Para hacer esto, necesitamos redirigir el tráfico entrante desde el puerto TCP 3340 a otro puerto local – 3389 (este es el número de puerto RDP predeterminado).

Tenga en cuenta que el número de puerto local que especificó en listenport no debe ser escuchado (usado) por otro servicio o proceso. Compruebe que no se utilice el número de puerto:

netstat -na|find "3340"

Alternativamente, puede verificar que el puerto no esté escuchando localmente usando el cmdlet Test-NetConnection de PowerShell:

Test-NetConnection -ComputerName localhost -Port 3340

comprobar el estado de escucha local en Windows 10

Para crear una regla de reenvío de puertos en Windows 10, ejecute un símbolo del sistema como administrador y ejecute el siguiente comando:

netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.1.1.110 connectport=3389 connectaddress=10.1.1.110

regla de reenvío de puertos de Windows usando la interfaz netsh portproxy add

Donde 10.10.1.110 – la dirección IP actual de esta computadora.

Ahora, use la herramienta netstat para verificar que Windows esté escuchando en el puerto local 3340:

netstat -ano | findstr :3340

netstat -ano - Obtiene el PID del proceso

Nota. Si este comando no devuelve nada y el reenvío de puertos a través de la interfaz netsh portproxy no funciona, asegúrese de tener el iphlpsvc (IP Helper) ejecutándose en su computadora.

 Servicio iphlpsvc (IP Helper)

La compatibilidad con IPv6 debe estar habilitada en la interfaz de red para la que se crea la regla de reenvío de puertos.

protocolo ipv6 habilitado

Estos son los requisitos previos para el correcto funcionamiento del reenvío de puertos. Sin el servicio IP Helper y sin la compatibilidad con IPv6 habilitada, la redirección de puertos no funcionará.

Para que el reenvío de puertos funcione en Windows Server 2003 / XP, debe configurar adicionalmente el IPEnableRouter parámetro a 1 en la clave de registro HKLM SYSTEM ControlSet001 Services Tcpip Parameters.

Puede averiguar qué proceso está escuchando en el puerto especificado usando su PID (en nuestro ejemplo, el PID es 636):

tasklist | findstr 636

Intentemos conectarnos a este puerto desde una computadora remota usando cualquier cliente RDP. El puerto 3340 debe especificarse como 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

El cliente RDP se conecta a un puerto diferente

La conexión RDP debe establecerse correctamente.

Si desea reenviar una conexión TCP entrante a una computadora remota, use el siguiente comando:

netsh interface portproxy add v4tov4 listenport=3389 listenaddress=0.0.0.0 connectport=3389 connectaddress=192.168.100.101

Esta regla redirigirá todo el tráfico RDP entrante (desde el puerto TCP local 3389) desde esta computadora a un host remoto con una dirección IP 192.168.1.100.

Administrar reglas de reenvío de puertos en Windows

Importante. Asegúrese de que su firewall (Firewall de Microsoft Windows Defender o un firewall de terceros que a menudo se incluye en un software antivirus) permita conexiones entrantes al nuevo puerto. Puede agregar una nueva regla de permiso al Firewall de Windows Defender con el comando:

netsh advfirewall firewall add rule name=”forwarded_RDPport_3340” protocol=TCP dir=in localip=10.1.1.110  localport=3340 action=allow

O usando el cmdlet de PowerShell New-NetFirewallRule:
New-NetFirewallRule -DisplayName "forwarder_RDP_3340" -Direction Inbound -Protocol TCP –LocalPort 3340 -Action Allow

Al crear una regla de firewall entrante para el puerto 3340 a través de la interfaz gráfica de Firewall de Windows Defender, no es necesario asociar ningún programa con ella. Este puerto solo lo escucha el controlador de red.

Puede crear cualquier número de reglas de reenvío de puertos de Windows. Todas las reglas de proxy de puerto de la interfaz netsh son persistentes y se almacenan en el sistema después de reiniciar Windows.

Además, hubo casos en los que en Windows Server 2012 R2 las reglas de reenvío de puertos se restablecieron después de reiniciar el servidor. En este caso, debe verificar si hay una desconexión periódica en la interfaz de red y si la dirección IP cambia cuando se inicia el sistema operativo (es mejor usar una IP estática en lugar de DHCP dinámico). Como solución temporal, tuve que agregar un script por lotes al Programador de tareas de Windows con las reglas de proxy de puerto de la interfaz netsh que se ejecutan al iniciar el sistema.

Para mostrar una lista de todas las reglas de reenvío de puertos TCP activas en Windows, ejecute el comando:

netsh interface portproxy show all

En nuestro caso, solo hay una regla de reenvío del puerto local 3340 al 3389:

Listen on ipv4:             Connect to ipv4:
Address         Port        Address         Port
--------------- ----------  --------------- ----------
10.1.1.110     3340        10.1.1.110     3389

Mostrar todas las reglas de reenvío de puertos

Propina. También puede enumerar la configuración de reenvío de puertos en portproxy de la siguiente manera:

netsh interface portproxy dump

#========================
# Port Proxy configuration
#========================
pushd interface portproxy
reset
add v4tov4 listenport=3340 connectaddress=10.1.1.110 connectport=3389
popd
# End of Port Proxy configuration

volcado de puerto de interfaz netsh

Para eliminar una regla de reenvío de puertos específica:

netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.1.1.110

Para eliminar todas las reglas de asignación existentes y borrar completamente la tabla de reglas de reenvío de puertos:

netsh interface portproxy reset

Importante. Este esquema de reenvío solo funciona para puertos TCP. No podrá reenviar puertos UDP de esta manera. Además, no puede utilizar la interfaz de bucle invertido 127.0.0.1 como connectaddress.

Puede usar Windows Server con la función RRAS y NAT instalada para configurar el reenvío de puertos para el tráfico UDP. Puede configurar el reenvío de puertos entre interfaces de servidor mediante el complemento gráfico (rrasmgmt.msc) o con el comando:

netsh routing ip nat add portmapping Ethernet1 udp 0.0.0.0 53 192.168.100.100 53

Otra característica de puerto proxy es la oportunidad de hacer que parezca que cualquier servicio de red remota se está ejecutando localmente.

Por ejemplo, redirigamos la conexión desde el puerto local 5555 a un servidor HTTP remoto con la dirección IP 157.166.226.25 (sitio web de CNN):

netsh interface portproxy add v4tov4 listenport=5555 connectport=80 connectaddress= 157.166.226.25 protocol=tcp

Ahora si vas a http: // localhost: 5555 / en su navegador, se abrirá la página de inicio de CNN. Entonces, a pesar de que el navegador está accediendo a la computadora local, abre una página desde un servidor web externo.

localhost: 5555 abre la página remota en localhost

Las reglas de reenvío de puertos también se pueden utilizar para reenviar un puerto desde la dirección IP externa de una NIC física a un puerto de una máquina virtual que se ejecuta en el mismo host. En Hyper-V, puede configurar el reenvío de puertos en un nivel de conmutador virtual (consulte a continuación).

Windows no puede reenviar un rango de puertos TCP. Si necesita reenviar varios puertos, tendrá que crear manualmente varias reglas de reenvío de proxy de puerto. La forma más sencilla es generar una lista de netsh interface portproxy add comandos con diferentes números de puerto en el bloc de notas y luego pégalos en el símbolo del sistema para su ejecución.

Reenvío de puertos en el servidor Hyper-V

Al usar la función Hyper-V en su computadora (se puede instalar tanto en Windows 10 como en Windows Server, o como un servidor Hyper-V gratuito), puede configurar las reglas de reenvío de puertos DNAT usando PowerShell. Suponga que desea redirigir todo el tráfico https que recibe su host Hyper-V a la dirección IP de la máquina virtual que se ejecuta en el host. Para hacer esto, use los comandos de Hyper-V StaticMapping.

Primero debe crear un conmutador virtual con NAT:

New-VMSwitch -Name "HTTPS-NAT" -SwitchType NAT -NATSubnetAddress 192.168.100.0/24

Luego, debe conectar la máquina virtual necesaria al conmutador virtual especificado y habilitar la regla de traducción de direcciones para todas las máquinas virtuales conectadas a través de este conmutador virtual de Hyper-V:

New-NetNat -Name HTTPS-NAT -InternalIPInterfaceAddressPrefix 192.168.100.0/24
Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/24" -ExternalPort 443 -Protocol TCP -InternalIPAddress "192.168.100.77" -InternalPort 443 -NatName HTTPS-NAT

Después de ejecutar estos comandos de PowerShell, todo el tráfico HTTPS que llega al puerto 443 del host de Hyper-V se reenviará a la dirección IP privada de la máquina virtual.

 

Artículos Interesantes