Yo también tuve que hacer algo similar recientemente, y al buscar encontré esta respuesta. Desafortunadamente, la respuesta de Nafe utiliza ipfw
que ahora está en desuso y no está disponible en OSX; y la respuesta de Kevin Leary es de hecho un poco dura. Así que tuve que hacer algo mejor (más limpio) y decidí compartirlo aquí para la posteridad. Esta respuesta se basa en gran medida en el enfoque mencionado en esta esencia .
Como OP menciona, apuntar un navegador a 192.168.99.100 debería obtener una respuesta de un servidor en localhost: 8000. Agregar un alias ifconfig
no es realmente necesario, pfctl
solo es suficiente: para lograr esto, el pf.conf
archivo /etc/pf.conf
debe modificarse.
Primero creamos (con sudo) un nuevo archivo de anclaje (llamémosle redirection
) en: /etc/pf.anchors/redirection
. Esto es básicamente un archivo de texto normal y contiene la siguiente línea (al igual que en la respuesta de Kevin Leary): rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000
. Una vez que se ha creado el nuevo archivo de anclaje, debe ser referenciado dentro del pf.conf
archivo. Abra el pf.conf
archivo con sudo y agregue rdr-anchor "redirection"
después de la última línea rdr-anchor (que es rdr-anchor "com.apple/*"
) y agregue load anchor "redirection" from "/etc/pf.anchors/redirection"
al final.
En última instancia, así es como debería verse el archivo pf.conf:
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "redirection" #added for redirection/port forwarding
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "pow" from "/etc/pf.anchors/redirection" #added for redirection/port forwarding
Y eso es casi todo. Simplemente reinicie pfctl
emitiendo sudo pfctl -d
para deshabilitarlo primero y luego sudo pfctl -fe /etc/pf.conf
para iniciarlo nuevamente.
Ahora, si necesita que esto suceda automáticamente después de cada reinicio, debe realizarse otro pequeño trabajo: el daemon de lanzamiento pfctl
debe actualizarse (la esencia mencionada menciona que pf se habilita automáticamente en el arranque, sin embargo, esto no parece ser el caso de mirar el código). Abra (con sudo) System/Library/LaunchDaemons/com.apple.pfctl.plist
y busque esto:
<array>
<string>pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
y agregue la línea <string>-e</string>
para finalmente hacerlo así:
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
Deberias hacer eso.
Advertencia : Apple ya no permite cambiar los archivos de demonio de lanzamiento así (no con sudo, ni chmod, ni nada más). La única forma es jugar con la configuración de Protección de integridad del sistema : iniciar en modo de recuperación y ejecutar terminal. Verifique el estado de SIP con csrutil status
, generalmente debería estar habilitado. Deshabilítelo csrutil disable
y reinicie en modo normal y luego realice los cambios en el archivo plist como se discutió anteriormente. Una vez hecho esto, regrese al modo de recuperación y vuelva a habilitar la protección (está en su lugar por una buena razón) mediante la emisión csrutil enable
.
Explicación: Se puede verificar emitiendo el ifconfig
comando que 127.0.0.1
ya es el alias (predeterminado) para localhost lo0; este hecho se está utilizando para evitar tener que agregar un alias adicional para localhost y simplemente usar la dirección predeterminada en el pf.conf
archivo.
ACTUALIZACIÓN: Desafortunadamente, parece que cargar el archivo al inicio no funciona. Todavía estoy tratando de obtener ayuda para solucionarlo. Hasta entonces, correr sudo pfctl -f /etc/pf.conf
después de arrancar hace el truco.