Eu também tive que fazer uma coisa semelhante recentemente e, na busca, encontrei essa resposta. Infelizmente, a resposta do Nafe usa ipfw , que agora está obsoleto e indisponível no OSX; e a resposta de Kevin Leary é realmente um pouco hackish. 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 em esta questão .
Como OP menciona, apontar um navegador para 192.168.99.100 deve receber uma resposta de um servidor em localhost: 8000. Adicionar um alias a ifconfig não é realmente necessário, pfctl sozinho é suficiente: para conseguir isso, o arquivo pf.conf em /etc/pf.conf precisa ser modificado.
Primeiro, criamos (com sudo) um novo arquivo â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 precisa ser referenciado no arquivo pf.conf . Abra o arquivo pf.conf 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 ficar:
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 pfctl emitindo sudo pfctl -d para desativá-lo primeiro e, em seguida, sudo pfctl -fe /etc/pf.conf para iniciá-lo novamente.
Agora, se você precisar que isso aconteça automaticamente após cada reinicialização, outro pequeno trabalho precisa ser feito: o daemon de inicialização para pfctl precisa ser atualizado (a essência mencionada menciona que pf é ativado automaticamente na inicialização, no entanto isso não parece ser o caso de olhar para o código). Abra (com sudo) System/Library/LaunchDaemons/com.apple.pfctl.plist e procure por isso:
<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 ser feito.
Advertência : A Apple não permite mais alterar os arquivos de defesa do demônio da mesma forma (não com sudo, nem chmod, nem qualquer outra coisa). A maneira somente é mexer no sistema Configurações de proteção de integridade : inicialize no modo de recuperação e inicie o terminal. Verifique o status do SIP com csrutil status , ele geralmente deve estar ativado. Desative-o com csrutil disable e reinicialize no modo normal e faça as alterações no arquivo plist conforme discutido acima. Uma vez feito isso, volte ao modo de recuperação e reative a proteção (ela está em vigor por um bom motivo) emitindo csrutil enable .
Explicação: Pode-se verificar emitindo o comando ifconfig que 127.0.0.1 já é o alias (padrão) para localhost lo0 - este fato está sendo usado para evitar a necessidade de adicionar um alias extra para localhost e basta usar o endereço padrão no arquivo pf.conf .
UPDATE: Infelizmente, parece que carregar o arquivo na inicialização não funciona. Ainda estou tentando obter ajuda para resolver o problema. Até lá, executar sudo pfctl -f /etc/pf.conf após o início é o truque.