Qual è il modo moderno di fare il port forwarding su El Capitan? (porta diretta da 80 a 8080)


56

La vecchia utility è ipfwstata scoraggiata nelle recenti versioni di Mac OS X ed è ora scomparsa da El Capitan.

Qual è il modo moderno di effettuare il port forwarding a El Capitan?

Voglio semplicemente che la porta 80 si inoltri alla porta 8080.


Si prega di accettare una risposta
Efren,

Risposte:


79

Per inoltrare tutto il traffico della porta 80 alla porta 8080, è possibile immettere quanto segue dalla riga di comando Terminale.

echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -

Tratto da https://salferrarello.com/mac-pfctl-port-forwarding/


1
Ha funzionato perfettamente!
Anupam Jain,

17
e dall'articolo citato, per rimuoverlo sudo pfctl -F all -f /etc/pf.confe per visualizzare le tue attuali regole di port forwarding,sudo pfctl -s nat
Brad Parks

4
tieni presente che questa soluzione non aggiunge regole ma sostituisce qualsiasi altra regola caricata prima, incluso il pf.conffile
erandros,

36

Il modo moderno di inoltrare i porti a El Capitan sta usando pf. Nell'esempio seguente tutte le richieste della porta 80 vengono inoltrate alla porta 8080 sullo stesso host. Si prega di adattare i reindirizzamenti alle proprie esigenze.

  1. Creare un file di ancoraggio org.user.forwarding in /private/etc/pf.anchors

    sudo touch /private/etc/pf.anchors/org.user.forwarding
    

    con il seguente contenuto e una riga vuota finale

    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
    

    o

    rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    
  2. Modifica il file /private/etc/pf.conf ma mantieni una riga vuota finale

    file originale:

    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"
    

    per

    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. Analizza e testa il tuo file di ancoraggio per assicurarti che non ci siano errori:

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    
  4. Ora modifica /System/Library/LaunchDaemons/com.apple.pfctl.plist da

    <array>
        <string>pfctl</string>
        <string>-f</string>
        <string>/etc/pf.conf</string>
    </array>
    

    per

    <array>
        <string>pfctl</string>
        <string>-e</string>
        <string>-f</string>
        <string>/etc/pf.conf</string>
    </array>
    

    A tal fine è necessario disabilitare la protezione dell'integrità del sistema. Dopo aver modificato il file riattivabile SIP. Dopo aver riavviato il tuo Mac, pf sarà abilitato (questa è l'opzione -e).

    In alternativa, puoi creare il tuo demone di lancio simile alla risposta qui: utilizzando Server 5.0.15 per condividere Internet SENZA condivisione Internet .

Dopo un aggiornamento o aggiornamento del sistema alcuni dei file originali sopra potrebbero essere stati sostituiti e devi riapplicare tutte le modifiche.

Se vuoi inoltrare attraverso diverse interfacce devi abilitarlo in /etc/sysctl.conf:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

7
Perché non c'è più un semplice comando per farlo più? Adesso è troppo complicato.
Dr.Knowitall,

@klanomath - funziona e posso inoltrare la porta x alla porta y su 127.0.0.1 ecc., ma non sono in grado di inoltrare le porte a Windows VM in esecuzione su desktop paralleli, Qualche idea? ecco la mia domanda stackoverflow.com/questions/40695684/…
Sudhir N

Non sembra funzionare quando si inoltra la porta a una VM che è in esecuzione su desktop paralleli
Sudhir N

@sudhir Non hai collegato correttamente la tua nuova domanda. Per impostazione predefinita, una macchina virtuale Parallels non è visibile alla rete, come precauzione di sicurezza. È possibile modificare un'impostazione nella configurazione della VM per renderla visibile. E ricorda, pingè tuo amico nella diagnosi dei problemi di rete.
Basil Bourque,


3

Per estendere la soluzione dalla risposta di @ sal-ferrarello, ho creato due script di shell super-base per abilitare o disabilitare il reindirizzamento senza compromettere voci già esistenti in pf.

I. Per prima cosa scopri quali voci hai già con:

sudo pfctl -s nat

La mia uscita è stata come:

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

Ciò che ci interessa sono le voci effettive, quindi prendi le prime due righe informative.

II. Crea enable.shscript:

#!/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

Le prime due righe dopo echosono le voci che erano già lì. La terza riga è con un nuovo reindirizzamento - in questo caso da 80 a 8080. Alla fine chiamiamo sudo pfctl -s natper vedere se sono state applicate le modifiche.

III. Crea disable.shscript:

Simile a enable.shnoi creiamo script, ma senza reindirizzamento 80-> 8080, ma con voci già esistenti:

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
" | sudo pfctl -ef -
sudo pfctl -s nat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.