Anch'io ho dovuto fare una cosa simile di recente, e nella ricerca è arrivata questa risposta. Sfortunatamente, la risposta di Nafe utilizza ipfwche ora è obsoleta e non disponibile in OSX; e la risposta di Kevin Leary è davvero un po 'hacker. Quindi ho dovuto fare qualcosa di meglio (più pulito) e ho deciso di condividerlo qui per i posteri. Questa risposta si basa in gran parte sull'approccio citato in questa sintesi .
Come menziona OP, puntare un browser su 192.168.99.100 dovrebbe ottenere una risposta da un server su localhost: 8000. Aggiungere un alias a ifconfignon è davvero necessario, pfctlda solo è sufficiente: per raggiungere questo obiettivo il pf.conffile /etc/pf.confdeve essere modificato.
Per prima cosa creiamo (con sudo) un nuovo file di ancoraggio (chiamiamolo redirection) a: /etc/pf.anchors/redirection. Questo è fondamentalmente un normale file di testo e contiene la seguente riga (proprio come nella risposta di 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 volta creato il nuovo file di ancoraggio, è necessario fare riferimento a esso all'interno del pf.conffile. Apri il pf.conffile con sudo e aggiungi rdr-anchor "redirection"dopo l'ultima rdr-anchor line (che è rdr-anchor "com.apple/*") e aggiungi load anchor "redirection" from "/etc/pf.anchors/redirection"alla fine.
In definitiva, ecco come dovrebbe apparire il file 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
E questo è quasi. Basta riavviare pfctlemettendo sudo pfctl -dper disabilitarlo prima e poi sudo pfctl -fe /etc/pf.confper riavviarlo.
Ora, se è necessario che ciò avvenga automaticamente dopo ogni riavvio, è necessario eseguire un altro pezzettino di lavoro: il daemon di avvio per pfctldeve essere aggiornato (l'essenza di riferimento menziona che pf è abilitato automaticamente all'avvio, tuttavia questo non sembra essere il caso guardando il codice). Apri (con sudo) System/Library/LaunchDaemons/com.apple.pfctl.pliste cerca questo:
<array>
<string>pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
e aggiungi la linea <string>-e</string>per renderla alla fine così:
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
Questo dovrebbe farlo.
Avvertenza : Apple non consente più di modificare i file di demone di lancio in questo modo (non con sudo, né chmod, né altro). L' unico modo è armeggiare con le impostazioni di Protezione integrità del sistema : avviare in modalità di ripristino e avviare il terminale. Controllare lo stato SIP con csrutil status, in genere dovrebbe essere abilitato. Disabilitarlo con csrutil disablee riavviare in modalità normale, quindi apportare le modifiche al file plist come discusso sopra. Una volta fatto, torna alla modalità di ripristino e riattiva la protezione (è attiva per una buona ragione) emettendo csrutil enable.
Spiegazione: È possibile verificare emettendo il ifconfigcomando che 127.0.0.1è già l'alias (predefinito) per localhost lo0 - questo fatto viene utilizzato per evitare di dover aggiungere un alias aggiuntivo per localhost e utilizzare semplicemente l'indirizzo predefinito nel pf.conffile.
AGGIORNAMENTO: Sfortunatamente, sembra che il caricamento del file all'avvio non funzioni. Sto ancora cercando di ottenere aiuto per risolverlo. Fino ad allora, correre sudo pfctl -f /etc/pf.confdopo l'avvio fa il trucco.