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

56

La antigua utilidad ipfwfue desaconsejada en las versiones recientes de Mac OS X y ahora se ha ido de El Capitan.

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

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

Albahaca Bourque
fuente
Por favor acepte una respuesta.
Efren

Respuestas:

79

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/

Sal Ferrarello
fuente
1
Funcionó perfectamente!
Anupam Jain
17
y del artículo mencionado, para eliminarlo sudo pfctl -F all -f /etc/pf.confy para mostrar sus reglas actuales de reenvío de puertos,sudo pfctl -s nat
Brad Parks
44
tenga en cuenta que esta solución no agrega reglas, sino que reemplaza cualquier otra regla cargada anteriormente, incluido el pf.confarchivo
erandros
36

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. Por favor, ajuste las redirecciones a sus necesidades.

  1. Cree un archivo de anclaje 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 de anclaje 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>
    

    Tiene que 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 tu Mac, se habilitará pf (esa es la opción -e).

    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 o actualización del sistema, 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 habilitar esto en /etc/sysctl.conf:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
klanomath
fuente
77
¿Por qué ya no hay un comando simple para hacer esto? Es muy complicado ahora.
Dr.Knowitall
@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 Windows vm que se ejecuta en el escritorio de Paralles, ¿alguna idea? Aquí está mi pregunta stackoverflow.com/questions/40695684/…
Sudhir N
No parece funcionar al reenviar el puerto a una máquina virtual que se ejecuta en el escritorio paralelo
Sudhir N
@sudhir No ha realizado un enlace exitoso a su nueva Pregunta. Por defecto, una VM Parallels no es visible para la red, como medida de seguridad. Puede cambiar una configuración en la configuración de la VM para hacerla visible. Y recuerde, pinges su amigo en el diagnóstico de problemas de red.
Basil Bourque
1
Pregunta de @ suhir: apple.stackexchange.com/questions/262708/…
Efren
3

Para extender la solución de @ sal-ferrarello respuesta, he creado dos secuencias de comandos súper básica Shell para habilitar o deshabilitar el redireccionamiento sin comprometer las entradas existentes en pf.

I. Primero encuentre las entradas que 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.shscript:

#!/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.

III. Crear disable.shscript:

Similar a enable.shcrear script, pero sin redireccionamiento 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
cadavre
fuente