Was ist die moderne Art der Portweiterleitung auf El Capitan? (Forward-Port 80 bis 8080)


56

Das alte Dienstprogramm ipfwwurde in neueren Versionen von Mac OS X entmutigt und ist jetzt von El Capitan verschwunden.

Was ist die moderne Art der Port-Weiterleitung in El Capitan?

Ich möchte einfach, dass Port 80 an Port 8080 weitergeleitet wird.


Bitte akzeptieren Sie eine Antwort.
Efren

Antworten:


79

Um den gesamten Datenverkehr von Port 80 an Port 8080 weiterzuleiten, können Sie Folgendes über die 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 aus https://salferrarello.com/mac-pfctl-port-forwarding/


1
Perfekt funktioniert!
Anupam Jain

17
und aus dem genannten Artikel, um es zu entfernen sudo pfctl -F all -f /etc/pf.conf, und um Ihre aktuellen Portweiterleitungsregeln anzuzeigen,sudo pfctl -s nat
Brad Parks

4
Denken Sie daran, dass diese Lösung keine Regeln hinzufügt, sondern alle zuvor geladenen Regeln ersetzt, einschließlich der pf.confDatei
erandros

36

Die moderne Art, Häfen in El Capitan weiterzuleiten, ist die Verwendung von pf. Im folgenden Beispiel werden alle Anforderungen von Port 80 an Port 8080 auf demselben Host weitergeleitet. Bitte passen Sie die Weiterleitungen an Ihre Bedürfnisse 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 nachgestellten 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 lassen Sie eine Leerzeile am Ende

    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 vorliegen:

    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>
    

    Sie müssen den Systemintegritätsschutz deaktivieren, um dies zu erreichen. Nach dem Bearbeiten der Datei aktivieren Sie SIP erneut. Nach dem Neustart wird Ihr Mac pf aktiviert (das ist die Option -e).

    Alternativ können Sie einen eigenen Startdämon erstellen, der der Antwort hier ähnelt: Verwenden von Server 5.0.15 zum Teilen des Internets OHNE Internetfreigabe .

Nach einer Systemaktualisierung oder -aktualisierung 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

7
Warum gibt es dafür keinen einfachen Befehl mehr? Es ist jetzt zu kompliziert.
Dr.Knowitall

@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 Paralles Desktop ausgeführt wird. Irgendeine Idee? Hier ist meine Frage stackoverflow.com/questions/40695684/…
Sudhir N

Scheint nicht zu funktionieren, wenn der Port an eine VM weitergeleitet wird, die auf Parallels Desktop ausgeführt wird
Sudhir N,

@sudhir Du hast nicht erfolgreich auf deine neue Frage 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 pingSie daran, ist Ihr Freund bei der Diagnose von Netzwerkproblemen.
Basil Bourque


3

Um die Lösung von @ sal-ferrarello zu erweitern, habe ich zwei Super-Basic-Shell-Skripte erstellt, um die Umleitung zu aktivieren oder zu deaktivieren, ohne bereits vorhandene Einträge in zu gefährdenpf .

I. Finden Sie zuerst heraus, welche Einträge Sie bereits haben:

sudo pfctl -s nat

Meine Ausgabe war wie folgt:

No ALTQ support in kernel
ALTQ related functions disabled
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all

Was uns interessiert, sind aktuelle 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 nach echosind die Einträge, die bereits dort waren. Die dritte Zeile enthält eine neue Umleitung - in diesem Fall 80 bis 8080. Am Ende rufen wir auf, um sudo pfctl -s natzu prüfen, ob Änderungen vorgenommen wurden.

III. disable.shSkript erstellen :

Ähnlich wie beim enable.shErstellen eines Skripts, jedoch ohne 80-> 8080-Umleitung, jedoch mit bereits vorhandenen Einträgen:

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
" | sudo pfctl -ef -
sudo pfctl -s nat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.