¿Cuál es la forma moderna de hacer el reenvío de puertos en El Capitán? (reenviar puerto 80 a 8080)

La antigua utilidad ipfwse desaconsejó en las versiones recientes de Mac OS X y ahora ya no está en El Capitan.

¿Cuál es la forma moderna de hacer el reenvío de puertos en El Capitán?

Simplemente quiero que el puerto 80 se reenvíe al puerto 8080.

Respuestas (3)

Para reenviar todo el tráfico del puerto 80 al puerto 8080, puede ingresar lo siguiente desde la línea de comando de la Terminal.

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

Tomado de https://salferrarello.com/mac-pfctl-port-forwarding/

¡Funcionó perfectamente!
y del artículo mencionado, para eliminarlo sudo pfctl -F all -f /etc/pf.conf, y para mostrar sus reglas actuales de reenvío de puertos,sudo pfctl -s nat
tenga en cuenta que esta solución no agrega reglas sino que reemplaza cualquier otra regla cargada antes, incluido el pf.confarchivo

La forma moderna de reenviar puertos en El Capitán está utilizando pf. En el siguiente ejemplo, todas las solicitudes del puerto 80 se reenvían al puerto 8080 en el mismo host. Ajuste las redirecciones a sus necesidades.

  1. Cree un archivo ancla org.user.forwarding en /private/etc/pf.anchors

    sudo touch /private/etc/pf.anchors/org.user.forwarding
    

    con el siguiente contenido y una línea vacía al final

    rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    rdr pass on en0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    rdr pass on en1 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    

    o

    rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    
  2. Modifique el archivo /private/etc/pf.conf pero mantenga una línea vacía al final

    archivo original:

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    

    a

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    rdr-anchor "org.user.forwarding"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    load anchor "org.user.forwarding" from "/etc/pf.anchors/org.user.forwarding"
    
  3. Analice y pruebe su archivo ancla para asegurarse de que no haya errores:

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    
  4. Ahora modifique /System/Library/LaunchDaemons/com.apple.pfctl.plist desde

    <array>
        <string>pfctl</string>
        <string>-f</string>
        <string>/etc/pf.conf</string>
    </array>
    

    a

    <array>
        <string>pfctl</string>
        <string>-e</string>
        <string>-f</string>
        <string>/etc/pf.conf</string>
    </array>
    

    Debe deshabilitar la Protección de integridad del sistema para lograr esto. Después de editar el archivo, vuelva a habilitar SIP. Después de reiniciar su Mac, se habilitará pf (esa es la opción -e).

    En macOS 10.15 Catalina (y su volumen del sistema de solo lectura), debe editar el demonio de inicio en modo de recuperación. SIP está deshabilitado de forma predeterminada en el modo de recuperación, por lo que no es necesario ejecutar csrutil :

    /Volumes/Name_of_boot_volume/usr/bin/nano /Volumes/Name_of_boot_volume/System/Library/LaunchDaemons/com.apple.pfctl.plist
    

    con el nombre de volumen de arranque predeterminado Macintosh HD esto es:

    /Volumes/Macintosh\ HD/usr/bin/nano /Volumes/Macintosh\ HD/System/Library/LaunchDaemons/com.apple.pfctl.plist
    

    Alternativamente, puede crear su propio demonio de lanzamiento similar a la respuesta aquí: Uso del servidor 5.0.15 para compartir Internet SIN compartir Internet .

Después de una actualización del sistema o una mejora, algunos de los archivos originales anteriores pueden haber sido reemplazados y debe volver a aplicar todos los cambios.

Si desea reenviar a través de diferentes interfaces, debe habilitarlo en /etc/sysctl.conf:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
¿Por qué ya no hay un comando simple para hacer esto? Es demasiado complicado ahora.
@klanomath: esto funciona y puedo reenviar el puerto x al puerto y en 127.0.0.1, etc., pero no puedo reenviar los puertos a mi máquina virtual de Windows que se ejecuta en el escritorio de Paralles, ¿alguna idea? aquí está mi pregunta stackoverflow.com/questions/40695684/…
No parece funcionar cuando se reenvía el puerto a una máquina virtual que se ejecuta en un escritorio paralelo
@sudhir No se vinculó con éxito a su nueva pregunta. De forma predeterminada, una máquina virtual de Parallels no está visible para la red, como medida de seguridad. Puede cambiar una configuración en la configuración de la VM para que la VM sea visible. Y recuerda, pinges tu amigo en el diagnóstico de problemas de red.
@klanomath ¿Cuál es el "comando único" que deberíamos "ver a continuación"? No sigo.
@BasilBourque Cuando escribí el comentario, la respuesta de Sal Ferrarello tuvo menos votos positivos que la mía ;-). Sin embargo, no sobrevive a un reinicio y debe ingresarlo nuevamente después de un reinicio ...
@klanomath Gracias. FYI, puede vincular a otra Respuesta usando la URL que se encuentra en el enlace "compartir" en esa Respuesta. Ej: Ver la respuesta de Sal Ferrarello
@BasilBourque Probablemente tenía prisa y acabo de escribir un comentario rápido y sucio (sin un enlace adecuado)...
Estoy ejecutando Puma-dev, que ejecuta su HTTPS en 9283. Agregué org.user.forwarding: rdr pass on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 9283y los anclajes relativos en pf.conf, los reinicié con los comandos sudo pfctl -f /etc/pf.conf. Pero cuando intento acceder al sitio web mywebsite.devno obtengo respuesta del servidor. Pero si escribo explícitamente el puerto, funciona. ¿Qué acaso podría estar perdiéndome aquí?
Estoy en High Sierra y obtengo un error de sintaxis cuando pruebo (paso n. ° 3): copié / pegué lo anterior en /private/etc/pf.anchors/org.user.forwarding - alguna sugerencia sobre qué buscar ?
@allicarn ¿Agregó una nueva línea vacía (tecla 1x enter) al final de ambos archivos?
¡Eso fue todo! Lo siento, me lo perdí en tus instrucciones. ¡Gracias!
El método de edición /System/Library/LaunchDaemons/com.apple.pfctl.plistno funciona en Catalina debido al sistema de archivos de solo lectura (incluso con SIP deshabilitado)
@JamesCushing ¡En Catalina puedes editarlo arrancado en modo de recuperación! Agregué una descripción en mi respuesta ...

Para extender la solución de la respuesta de @sal-ferrarello, creé dos scripts de Shell súper básicos para habilitar o deshabilitar la redirección sin comprometer las entradas ya existentes en pf.

I. Primero busque qué entradas ya tiene con:

sudo pfctl -s nat

Mi salida fue como:

No ALTQ support in kernel
ALTQ related functions disabled
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all

Lo que nos interesa son las entradas reales, así que omita las dos primeras líneas de información.

II. Crear enable.shguión:

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
sudo pfctl -s nat

Las primeras dos líneas después echoson las entradas que ya estaban allí. La tercera línea es con nueva redirección, en este caso 80 a 8080. Al final, llamamos sudo pfctl -s natpara ver si se aplicaron los cambios.

tercero Crear disable.shguión:

Similar a enable.shwe create script, pero sin redirección 80->8080, pero con entradas anteriores ya existentes:

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
" | sudo pfctl -ef -
sudo pfctl -s nat