1 votos

Mapear el puerto 80 al 8080 pero mantener el acceso explícito al 8080

He seguido las instrucciones de esta respuesta para asignar el puerto 8080 a 80 en mi mac. Esto funciona de maravilla, excepto por el hecho de que ya no puedo acceder a http://localhost:8080 explícitamente a través de Chrome (nunca responde).

Dicho de otra manera, puedo iniciar un servidor http en mi máquina escuchando en el puerto 8080, que, habiendo reasignado mis puertos funcionará cuando navegue a localhost en mi navegador, pero no lo hace funcionan si navego a localhost:8080 .

Esto causa problemas con cierto código de biblioteca que incluye explícitamente el puerto del servidor en sus peticiones http.

¿Cómo puedo configurar el reenvío de puertos de manera que ambos localhost:8080 y localhost enviará las peticiones a mi servidor local?

0 votos

Si desactiva el reenvío de puertos hace la conexión a localhost:8080 ¿trabajar de nuevo?

0 votos

@nohillside ¿hay un comando para desactivar el reenvío de puertos rápidamente sin desactivar el SIP, etc.?

1 votos

/private/etc/pf.anchors/org.user.forwarding se puede editar con el SIP activado

5voto

Phill Puntos 126

Antes de responder a su pregunta, permítame proporcionarle algunos antecedentes para aquellos que no estén familiarizados con el reenvío de puertos en MacOS El reenvío de puertos implica la sustitución de las direcciones y puertos de destino de los paquetes entrantes para redirigir las conexiones a diferentes hosts y/o puertos. MacOS consigue el reenvío de puertos aplicando rdr (redirección) al dispositivo de filtrado de paquetes /dev/pf . Por ejemplo, esta regla:

rdr pass inet proto tcp from any to 213.32.64.5 port 80 -> 10.4.1.2 port 8080

reenvía los paquetes IPv4 entrantes enviados a 213.32.64.5:80 a 10.4.1.2:8080 (el pass evita que los paquetes redirigidos sean bloqueados por las reglas de filtrado, véase aquí para más información). Para aplicar la regla, puede utilizar pfctl o modificar /etc/pf.conf como se explica aquí . Para más información sobre rdr normas, véase man pf.conf .

Ahora a su pregunta:

¿Cómo puedo configurar el reenvío de puertos de tal manera que tanto localhost:8080 y localhost envíen peticiones a mi servidor local?

Para poder acceder tanto al puerto original como al redirigido de forma fiable , debe excluir la dirección y el puerto de destino (127.0.0.1:8080) de la redirección:

echo 'no rdr inet proto tcp from 127.0.0.1 port 8080
rdr inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080
' | sudo pfctl -ef -

(Probado en una instalación limpia de MacOS High Sierra 10.13.6.)

El comando anterior sobrescribirá todas las reglas existentes, por lo que lo recomiendo sólo para pruebas. A continuación, puede recargar las reglas de filtrado de paquetes por defecto de su Mac con sudo pfctl -F all -ef /etc/pf.conf y añadir las reglas:

no rdr inet proto tcp from 127.0.0.1 port 8080
rdr inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080

a pf.conf como se explica aquí .

He seguido las instrucciones en esta respuesta para asignar el puerto 8080 a 80 en mi mac. Esto funciona de maravilla, excepto por el hecho de que ya no puedo acceder a http://localhost:8080 explícitamente a través de Chrome (nunca responde).

Este comentario en el blog de Sal Ferrarello describe un comportamiento similar. He podido reproducirlo, pero en mis pruebas la conexión al puerto 8080 funcionaba de forma intermitente, o más exactamente: Podía cargar http://127.0.0.1:8080 pero después de esa primera conexión, al hacer clic en cualquier enlace de la página web se agota el tiempo. Un tiempo después, sin embargo, pude conectarme una vez más, sólo para experimentar en cualquier conexión posterior los mismos tiempos de espera que antes.

Tuve que hacer un poco de sniffing de paquetes, me gustaría compartir los comandos que utilicé para registrar los paquetes que coinciden con el rdr regla (eso es lo que la log parámetro más abajo) utilizando el pseudodispositivo "pflog0" (véase man pflog y man pf.conf para más detalles):

echo 'no rdr log inet proto tcp from 127.0.0.1 port 8080
rdr inet log proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080
' | sudo pfctl -ef -
sudo ifconfig pflog0 create
sudo tcpdump -X -n -e -i pflog0

0 votos

¡Gran respuesta y una solución que funciona! Gracias por el detalle adicional - realmente útil.

0 votos

@EdHinchliffe ¡Me alegro de que mi respuesta te haya resultado útil!

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X