Yo también tuve que hacer algo similar recientemente, y al buscar encontré esta respuesta. Desafortunadamente, la respuesta de Nafe utiliza ipfwque 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 ifconfigno es realmente necesario, pfctlsolo es suficiente: para lograr esto, el pf.confarchivo /etc/pf.confdebe 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.confarchivo. Abra el pf.confarchivo 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 pfctlemitiendo sudo pfctl -dpara deshabilitarlo primero y luego sudo pfctl -fe /etc/pf.confpara 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 pfctldebe 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.plisty 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 disabley 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 ifconfigcomando que 127.0.0.1ya 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.confarchivo.
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.confdespués de arrancar hace el truco.