Porta di mappatura da 80 a 8080 ma mantiene l'accesso 8080 esplicito

1

Ho seguito le istruzioni in questa risposta per mappare la porta 8080-80 sul mio Mac. Questo funziona, a parte il fatto che non posso più accedere a http://localhost:8080 esplicitamente tramite Chrome (non risponde mai).

In modo diverso, posso avviare un server http sulla mia macchina in ascolto sulla porta 8080, che, dopo aver rimappato le mie porte funzionerà quando navirò a localhost nel mio browser, ma non lavoro se navighi su localhost:8080 .

Ciò causa problemi con determinati codici di libreria che includono esplicitamente la porta del server nelle sue richieste http.

Come configuro il port forwarding in modo che entrambi localhost:8080 e localhost inviino richieste al mio server locale?

    
posta Ed Hinchliffe 27.07.2018 - 10:39
fonte

1 risposta

2

Prima di rispondere alla tua domanda, permettimi di fornire alcune informazioni di base per chi non conosce il port forwarding su macOS : il port forwarding implica la sostituzione degli indirizzi di destinazione e delle porte dei pacchetti in ingresso per reindirizzare le connessioni a host diversi e / o porti. macOS ottiene il port forwarding applicando le regole rdr (reindirizzamento) al dispositivo di filtraggio pacchetti /dev/pf . Ad esempio, questa regola:

rdr pass inet proto tcp from any to 213.32.64.5 port 80 -> 10.4.1.2 port 8080

inoltra i pacchetti IPv4 in entrata inviati a 213.32.64.5:80 a 10.4.1.2:8080 (la parola chiave pass impedisce il blocco dei pacchetti reindirizzati dalle regole di filtro, vedi qui per ulteriori informazioni). Per applicare la regola, puoi utilizzare pfctl o modificare /etc/pf.conf , come spiegato qui . Per ulteriori informazioni sulle regole rdr , consulta man pf.conf .

Ora alla tua domanda:

How do I configure port forwarding in such a way that both localhost:8080 and localhost will send requests to my local server?

Per poter accedere in modo affidabile sia alla porta originale sia a quella reindirizzata , devi escludere l'indirizzo di destinazione e la porta (127.0.0.1:8080) dal reindirizzamento:

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

(Testato su un'installazione pulita di macOS High Sierra 10.13.6.)

Il comando sopra sovrascriverà tutte le regole esistenti, quindi lo consiglierei solo per il test. Puoi quindi ricaricare le regole del filtro di pacchetto predefinito del tuo Mac con sudo pfctl -F all -ef /etc/pf.conf e aggiungere le regole:

no rdr inet proto tcp from 127.0.0.1 port 8080
rdr inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080

a pf.conf come spiegato qui .

I followed the instructions in this answer to map port 8080 to 80 on my mac. This works a treat, except for the fact that I can no longer access http://localhost:8080 explicitly through Chrome (it never responds).

Questo commento sul blog di Sal Ferrarello descrive un comportamento simile. Sono riuscito a riprodurlo, ma nei miei test la connessione alla porta 8080 funzionava in modo intermittente, o più precisamente: potevo caricare collegamento , ma dopo a quel primo collegamento, facendo clic su qualsiasi collegamento sul sito Web scaduto. Qualche tempo dopo, però, sono riuscito a connettermi ancora una volta, solo per sperimentare in tutte le connessioni successive gli stessi time-out di prima.

Ho dovuto fare un bel po 'di sniffing dei pacchetti, mi piacerebbe condividere i comandi che ho usato per registrare i pacchetti che corrispondono alla regola rdr (questo è ciò che log parametro qui sotto è per) utilizzando lo pseudo-dispositivo" pflog0 "(vedi man pflog e man pf.conf per i dettagli):

echo 'no rdr log inet proto tcp from 127.0.0.1 port 8080
rdr inet log proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080
' | sudo pfctl -ef -
sudo ifconfig pflog0 create
sudo tcpdump -X -n -e -i pflog0
    
risposta data 01.08.2018 - 09:22
fonte

Leggi altre domande sui tag