Was ist die moderne Methode zur Portweiterleitung auf El Capitan? (Port 80 auf 8080 weiterleiten)

Das alte Dienstprogramm ipfwwurde 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.

Antworten (3)

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/

Hat perfekt funktioniert!
und aus dem erwähnten Artikel, um es zu entfernen sudo pfctl -F all -f /etc/pf.conf, und um Ihre aktuellen Portweiterleitungsregeln anzuzeigen,sudo pfctl -s nat
Denken Sie daran, dass diese Lösung keine Regeln hinzufügt, sondern alle anderen zuvor geladenen Regeln ersetzt, einschließlich der pf.confDatei

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.

  1. 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
    
  2. Ä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"
    
  3. Analysieren und testen Sie Ihre Ankerdatei, um sicherzustellen, dass keine Fehler vorhanden sind:

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    
  4. Ä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
Warum gibt es dafür keinen einfachen Befehl mehr? Das ist jetzt zu kompliziert.
@klanomath - das funktioniert und ich kann Port x an Port y auf 127.0.0.1 usw. weiterleiten, aber ich kann keine Ports an meine Windows-VM weiterleiten, die auf einem parallelen Desktop ausgeführt wird. Irgendeine Idee? hier ist meine Frage stackoverflow.com/questions/40695684/…
Scheint nicht zu funktionieren, wenn der Port an eine VM weitergeleitet wird, die auf Parallels Desktop ausgeführt wird
@sudhir Sie haben Ihre neue Frage nicht erfolgreich verlinkt. Standardmäßig ist eine Parallels-VM aus Sicherheitsgründen für das Netzwerk nicht sichtbar. Sie können eine Einstellung in der Konfiguration der VM ändern, um die VM sichtbar zu machen. Und denken Sie daran, pinges ist Ihr Freund bei der Diagnose von Netzwerkproblemen.
@klanomath Was ist der "eine Befehl", den wir "unten sehen" sollten? Ich folge nicht.
@BasilBourque Als ich den Kommentar schrieb, hatte Sal Ferrarellos Antwort weniger positive Stimmen als meine ;-). Einen Neustart überlebt es allerdings nicht und man muss es nach einem Neustart erneut eingeben...
@klanomath Danke. Zu Ihrer Information, Sie können auf eine andere Antwort verlinken, indem Sie die URL verwenden, die Sie im Link „Teilen“ dieser Antwort finden. Beispiel : Siehe die Antwort von Sal Ferrarello
@BasilBourque Ich war wahrscheinlich in Eile und habe gerade einen schnellen und schmutzigen Kommentar geschrieben (ohne richtigen Link) ...
Ich verwende Puma-dev, das sein HTTPS auf 9283. Ich habe org.user.forwarding: rdr pass on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 9283und 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?
Ich bin auf High Sierra und bekomme einen Syntaxfehler, wenn ich teste (Schritt #3) - ich habe das Obige kopiert/eingefügt in /private/etc/pf.anchors/org.user.forwarding - irgendwelche Vorschläge, wonach ich suchen soll ?
@allicarn Hast du am Ende beider Dateien eine leere neue Zeile (1x Eingabetaste) hinzugefügt?
Das war's! Entschuldigung, ich habe es in Ihrer Anleitung übersehen. Danke!
Die Bearbeitungsmethode /System/Library/LaunchDaemons/com.apple.pfctl.plistfunktioniert in Catalina aufgrund des schreibgeschützten Dateisystems nicht (auch bei deaktiviertem SIP)
@JamesCushing In Catalina können Sie es bearbeiten, wenn es im Wiederherstellungsmodus gestartet wurde! Beschreibung in meiner Antwort hinzugefügt ...

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.shSkript 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 echosind 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 natzu sehen, ob Änderungen übernommen wurden.

III. disable.shSkript erstellen :

Ähnlich wie enable.shwir 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