Eu também tive que fazer uma coisa semelhante recentemente, e na busca encontrei esta resposta. Infelizmente, a resposta dos usos do Nafe, ipfwque agora está obsoleta e indisponível no OSX; e a resposta de Kevin Leary é realmente um pouco tola. Então eu tive que fazer algo melhor (mais limpo) e decidi compartilhá-lo aqui para a posteridade. Esta resposta é amplamente baseada na abordagem mencionada nesta essência .
Como o OP menciona, apontar um navegador para 192.168.99.100 deve obter uma resposta de um servidor em localhost: 8000. Adicionar um alias a ifconfignão é realmente necessário, por pfctlsi só é suficiente: para conseguir isso, o pf.confarquivo /etc/pf.confprecisa ser modificado.
Primeiro criamos (com sudo) um novo arquivo de âncora (vamos chamá-lo redirection) em: /etc/pf.anchors/redirection. Este é basicamente um arquivo de texto regular e contém a seguinte linha (assim como na resposta 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. Depois que o novo arquivo âncora for criado, ele precisará ser referenciado dentro do pf.confarquivo. Abra o pf.confarquivo com sudo e adicione rdr-anchor "redirection"após a última linha rdr-anchor (que é rdr-anchor "com.apple/*") e adicione load anchor "redirection" from "/etc/pf.anchors/redirection"no final.
Por fim, é assim que o arquivo pf.conf deve se parecer:
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
E é quase isso. Basta reiniciar pfctlemitindo sudo pfctl -dpara desativá-lo primeiro e depois sudo pfctl -fe /etc/pf.confiniciá-lo novamente.
Agora, se você precisar que isso aconteça automaticamente após cada reinicialização, outro pequeno trabalho precisará ser feito: o daemon de inicialização pfctlprecisa ser atualizado (a essência referenciada menciona que o pf é ativado automaticamente na inicialização, no entanto, isso não parece ser caso de olhar para o código). Abra (com sudo) System/Library/LaunchDaemons/com.apple.pfctl.pliste procure o seguinte:
<array>
<string>pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
e adicione a linha <string>-e</string>para torná-lo assim:
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
Isso deve resolver.
Advertência : A Apple não permite mais alterar os arquivos demon de inicialização assim (não com sudo, nem chmod, nem qualquer outra coisa). A única maneira é mexer com as configurações da Proteção de integridade do sistema : inicialize no modo de recuperação e inicie o terminal. Verifique o status do SIP com csrutil status, geralmente ele deve estar ativado. Desative-o csrutil disablee reinicie-o no modo normal e faça as alterações no arquivo plist conforme discutido acima. Depois de concluído, volte ao modo de recuperação e reative a proteção (está em vigor por um bom motivo) emitindo csrutil enable.
Explicação: Pode-se verificar emitindo o ifconfigcomando que 127.0.0.1já é o alias (padrão) para localhost lo0 - esse fato está sendo usado para evitar a necessidade de adicionar um alias extra para localhost e simplesmente usar o endereço padrão no pf.confarquivo.
ATUALIZAÇÃO: Infelizmente, parece que carregar o arquivo na inicialização não funciona. Ainda estou tentando obter ajuda para classificá-lo. Até lá, correr sudo pfctl -f /etc/pf.confdepois de iniciar faz o truque.