In letzter Zeit musste auch ich etwas Ähnliches tun, und bei der Suche kam ich auf diese Antwort. Leider wird die Antwort von Nafe verwendet, ipfw
die in OSX mittlerweile veraltet und nicht mehr verfügbar ist. und die Antwort von Kevin Leary ist in der Tat ein bisschen hackisch. Also musste ich etwas besseres (saubereres) machen und entschied mich, es hier für die Nachwelt zu teilen. Diese Antwort basiert größtenteils auf dem Ansatz, der an dieser Stelle erwähnt wurde .
Wie OP erwähnt, sollte ein Browser, der auf 192.168.99.100 zeigt, eine Antwort von einem Server bei localhost erhalten: 8000. Das Hinzufügen eines Alias zu ifconfig
ist nicht wirklich erforderlich, pfctl
es reicht aus, um dies zu erreichen. Dazu muss die pf.conf
Datei /etc/pf.conf
unter geändert werden.
Zuerst erstellen wir (mit sudo) einen neuen Anker - Datei (nennen wir es redirection
) an: /etc/pf.anchors/redirection
. Dies ist im Grunde eine normale Textdatei und enthält die folgende Zeile (genau wie in der Antwort von Kevin Leary): rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000
. Nachdem die neue Ankerdatei erstellt wurde, muss sie in der pf.conf
Datei referenziert werden. Öffne die pf.conf
Datei mit sudo und füge sie rdr-anchor "redirection"
nach der letzten rdr-anchor-Zeile rdr-anchor "com.apple/*"
hinzu und füge sie load anchor "redirection" from "/etc/pf.anchors/redirection"
am Ende hinzu.
Letztendlich sollte die pf.conf-Datei so aussehen:
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
Und das war's auch schon. Starten Sie einfach neu, pfctl
indem Sie ausgeben sudo pfctl -d
, um es zuerst zu deaktivieren, und es dann erneut sudo pfctl -fe /etc/pf.conf
zu starten.
Wenn dies nach jedem Neustart automatisch geschehen soll, muss noch ein winziger Arbeitsschritt erledigt werden: Der pfctl
Startdämon für muss aktualisiert werden (in der Referenz wird erwähnt, dass pf beim Start automatisch aktiviert wird, dies scheint jedoch nicht der Fall zu sein der Fall vom Betrachten des Codes). Öffne (mit sudo) System/Library/LaunchDaemons/com.apple.pfctl.plist
und suche danach:
<array>
<string>pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
und füge die Zeile hinzu <string>-e</string>
, um es letztendlich so zu machen:
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
Das sollte es tun.
Vorsichtsmaßnahme : Apple erlaubt nicht mehr, die Start-Dämon-Dateien einfach so zu ändern (weder mit sudo, noch mit chmod, noch mit irgendetwas anderem). Die einzige Möglichkeit besteht darin, die Einstellungen für den Systemintegritätsschutz zu ändern : Starten Sie den Wiederherstellungsmodus und starten Sie das Terminal. Überprüfen Sie den SIP-Status mit csrutil status
, er sollte generell aktiviert sein. Deaktivieren Sie es mit csrutil disable
und starten Sie es im normalen Modus neu. Nehmen Sie dann die oben beschriebenen Änderungen an der plist-Datei vor. Wenn Sie fertig sind, kehren Sie in den Wiederherstellungsmodus zurück und aktivieren Sie den Schutz (der aus gutem Grund vorhanden ist) erneut, indem Sie ihn ausstellen csrutil enable
.
Erläuterung: Sie können dies überprüfen, indem Sie den ifconfig
Befehl 127.0.0.1
absetzen , der bereits der (Standard-) Alias für localhost lo0 ist. Diese Tatsache wird verwendet, um das Hinzufügen eines zusätzlichen Alias für localhost zu vermeiden und einfach die Standardadresse in der pf.conf
Datei zu verwenden.
UPDATE: Leider scheint das Laden der Datei beim Start nicht zu funktionieren. Ich versuche immer noch, Hilfe zu bekommen, um es zu sortieren. Bis dahin sudo pfctl -f /etc/pf.conf
macht das Laufen nach dem Start den Trick.