Das alte Dienstprogramm ipfw
wurde in den letzten Versionen von Mac OS X entmutigt und ist jetzt aus El Capitan verschwunden.
Was ist die moderne Methode zur Portweiterleitung in El Capitan?
Ich möchte einfach, dass Port 80 an Port 8080 weitergeleitet wird.
Um den gesamten Datenverkehr von Port 80 an Port 8080 weiterzuleiten, können Sie Folgendes in der Terminal-Befehlszeile eingeben.
echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
Entnommen von https://salferrarello.com/mac-pfctl-port-forwarding/
Die moderne Methode zum Weiterleiten von Ports in El Capitan verwendet pf
. Im Beispiel unten werden alle Anfragen von Port 80 an Port 8080 auf demselben Host weitergeleitet. Bitte passen Sie die Umleitungen Ihren Bedürfnissen an.
Erstellen Sie eine Ankerdatei org.user.forwarding in /private/etc/pf.anchors
sudo touch /private/etc/pf.anchors/org.user.forwarding
mit folgendem Inhalt und einer abschließenden Leerzeile
rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr pass on en0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr pass on en1 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
oder
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
Ändern Sie die Datei /private/etc/pf.conf, aber behalten Sie eine abschließende leere Zeile bei
Originaldatei:
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
zu
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "org.user.forwarding"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "org.user.forwarding" from "/etc/pf.anchors/org.user.forwarding"
Analysieren und testen Sie Ihre Ankerdatei, um sicherzustellen, dass keine Fehler vorhanden sind:
sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
Ändern Sie nun /System/Library/LaunchDaemons/com.apple.pfctl.plist von
<array>
<string>pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
zu
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
Dazu müssen Sie den Systemintegritätsschutz deaktivieren. Aktivieren Sie nach dem Bearbeiten der Datei SIP erneut. Nach dem Neustart Ihres Mac wird pf aktiviert (das ist die Option -e).
In macOS 10.15 Catalina (und seinem schreibgeschützten Systemvolume) müssen Sie den Start-Daemon im Wiederherstellungsmodus bearbeiten. SIP ist im Wiederherstellungsmodus standardmäßig deaktiviert - daher muss csrutil nicht ausgeführt werden :
/Volumes/Name_of_boot_volume/usr/bin/nano /Volumes/Name_of_boot_volume/System/Library/LaunchDaemons/com.apple.pfctl.plist
mit dem standardmäßigen Boot-Volume-Namen Macintosh HD ist dies:
/Volumes/Macintosh\ HD/usr/bin/nano /Volumes/Macintosh\ HD/System/Library/LaunchDaemons/com.apple.pfctl.plist
Alternativ können Sie Ihren eigenen Start-Daemon ähnlich der Antwort hier erstellen: Using Server 5.0.15 to share internet WITHOUT internet sharing .
Nach einem System-Update oder -Upgrade wurden möglicherweise einige der oben genannten Originaldateien ersetzt und Sie müssen alle Änderungen erneut anwenden.
Wenn Sie über verschiedene Schnittstellen weiterleiten möchten, müssen Sie dies in /etc/sysctl.conf aktivieren:
net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
ping
es ist Ihr Freund bei der Diagnose von Netzwerkproblemen.9283
. Ich habe org.user.forwarding
: rdr pass on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 9283
und die relativen Anker in pf.conf hinzugefügt und sie mit den Befehlen neu gestartet sudo pfctl -f /etc/pf.conf
. Aber wenn ich versuche, auf die Website über zuzugreifen mywebsite.dev
, erhalte ich keine Serverantwort. Aber wenn ich den Port explizit schreibe, funktioniert es. Was könnte mir hier vielleicht fehlen?/System/Library/LaunchDaemons/com.apple.pfctl.plist
funktioniert in Catalina aufgrund des schreibgeschützten Dateisystems nicht (auch bei deaktiviertem SIP)Um die Lösung von @sal-ferrarello answer zu erweitern, habe ich zwei sehr einfache Shell-Skripts erstellt, um die Umleitung zu aktivieren oder zu deaktivieren, ohne bereits vorhandene Einträge in pf
.
I. Finden Sie zuerst heraus, welche Einträge Sie bereits haben mit:
sudo pfctl -s nat
Meine Ausgabe war wie:
No ALTQ support in kernel
ALTQ related functions disabled
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all
Was uns interessiert, sind tatsächliche Einträge, also lassen Sie die ersten beiden Infozeilen weg.
II. enable.sh
Skript erstellen :
#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
sudo pfctl -s nat
Die ersten beiden Zeilen danach echo
sind die Einträge, die bereits vorhanden waren. Dritte Zeile ist mit neuer Umleitung – in diesem Fall 80 auf 8080. Am Ende rufen wir an, um sudo pfctl -s nat
zu sehen, ob Änderungen übernommen wurden.
III. disable.sh
Skript erstellen :
Ähnlich wie enable.sh
wir Skript erstellen, aber ohne 80->8080-Redirect, aber mit vorher schon vorhandenen Einträgen:
#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
" | sudo pfctl -ef -
sudo pfctl -s nat
Anupam Jain
Brad Parks
sudo pfctl -F all -f /etc/pf.conf
, und um Ihre aktuellen Portweiterleitungsregeln anzuzeigen,sudo pfctl -s nat
Guido Tarsia
pf.conf
Datei