Proxy è configurato (correttamente, credo). Appstore e Safari funzionano bene. Ma il traffico di rete sul terminale non funziona

1

Imposta HTTP, HTTPS, FTP, SOCKS, Streaming, Gopher su 10.11.0.1 e porta 8080, senza nome utente e password. E funziona per Safari e App Store. E imposta le stesse voci su Firefox e funziona anche senza problemi.

Come faccio a impostare il proxy per reti particolari in modo che funzioni correttamente su ogni app?

    
posta gaidink 14.08.2018 - 09:50
fonte

2 risposte

1

How do I set the proxy for particular networks so that it works fine on every apps?

Hai configurato diversi proxy in Preferenze di Sistema, e questo è il modo giusto per farlo (ecco perché l'app App Store e Safari funzionano correttamente). Sfortunatamente, Terminal è un'eccezione e necessita delle proprie impostazioni proxy.

Perché è così? Terminal è semplicemente un contenitore che esegue una shell . Una shell un programma che, semplicemente, visualizza un prompt e attende pazientemente che tu esegua comandi come ls e rm .

Le conchiglie sono precedenti ai macOS e hanno le loro regole per la configurazione dei proxy . Le conchiglie non sanno nulla delle impostazioni del proxy in Preferenze di Sistema e devono essere configurate separatamente.

La shell predefinita di macOS è Bash (puoi scoprire quale shell stai eseguendo eseguendo echo $0 al prompt) quindi spiegherò come impostare il proxy in Bash.

La soluzione semplice

  1. Avvia Terminal e digita questo comando per cambiare la directory nella nostra home directory:

    cd ~
    
  2. Digita questi comandi per aprire .bash_profile con TextEdit:

    touch .bash_profile
    open -a TextEdit .bash_profile
    
  3. Imposta le variabili di ambiente del proxy digitando il testo seguente in TextEdit e sostituisci <your http proxy> , <your https proxy> e <your ftp proxy> con il tuo server proxy (se TextEdit contiene già del testo, aggiungi il testo sotto alla fine del file):

    export HTTP_PROXY="<your http proxy>"
    export http_proxy=$HTTP_PROXY
    export HTTPS_PROXY="<your https proxy>"
    export http_proxy=$HTTP_PROXY
    export FTP_PROXY="<your ftp proxy>"
    export ftp_proxy=$FTP_PROXY
    

    Se hai configurato in Preferenze di Sistema un elenco di host e domini che devono essere contattati ignorando direttamente il proxy, aggiungili in questo modo:

    export NO_PROXY="<comma-separated list of hosts>"
    export no_proxy=$NO_PROXY
    

    Ad esempio:

    export HTTP_PROXY="http://10.11.0.1:8080"
    export http_proxy=$HTTP_PROXY
    export HTTPS_PROXY="http://10.11.0.1:8080"
    export http_proxy=$HTTP_PROXY
    export FTP_PROXY="http://10.11.0.1:8080"
    export ftp_proxy=$FTP_PROXY
    export NO_PROXY="localhost,127.0.0.1"
    export no_proxy=$NO_PROXY
    
  4. Salva il file con S e chiudi TextEdit.

  5. Chiudi il terminale e riaprilo. Ora le impostazioni del proxy dovrebbero funzionare correttamente.

Una soluzione più elaborata

Il metodo di cui sopra ha uno svantaggio : devi mantenere due configurazioni, quella in Preferenze di sistema e quella in .bash_profile .

Fortunatamente, come spiegato su blog di Derek Morgan , puoi fare in modo che Bash importi Impostazioni proxy delle Preferenze di sistema utilizzando il comando scutil . Segui semplicemente i passaggi descritti nella sezione precedente, ma nel passaggio 3 imposta le variabili di ambiente proxy http / https / ftp come segue:

export HTTP_PROXY=$(scutil --proxy | awk '\
/HTTPEnable/ { enabled = $3; } \
/HTTPProxy/ { server = $3; } \
/HTTPPort/ { port = $3; } \
END { if (enabled == "1") { print "http://" server ":" port; } }')
export http_proxy=$HTTP_PROXY

export HTTPS_PROXY=$(scutil --proxy | awk '\
/HTTPSEnable/ { enabled = $3; } \
/HTTPSProxy/ { server = $3; } \
/HTTPPort/ { port = $3; } \
END { if (enabled == "1") { print "http://" server ":" port; } }')
export https_proxy=$HTTP_PROXY

export FTP_PROXY=$(scutil --proxy | awk '\
/FTPEnable/ { enabled = $3; } \
/FTPProxy/ { server = $3; } \
/FTPPort/ { port = $3; } \
END { if (enabled == "1") { print "http://" server ":" port; } }')
export ftp_proxy=$FTP_PROXY

Nelle definizioni precedenti, ho impostato http:// come schema per tutti i server proxy, potrebbe essere necessario modificarli in socks5:// per SOCKS o https:// per HTTPS se necessario.

    
risposta data 14.08.2018 - 17:33
fonte
1

Partendo dal presupposto che vuoi dire che applicazioni / protocolli come ssh non riescono a connettersi a causa del proxy.

Per connetterti devi "tunnel" attraverso il proxy HTTP

ssh USERNAME@REMOTEHOST -o "ProxyCommand=nc -X connect -x PROXY:PORT %h %p"

Sostituisci USERNAME, REMOTEHOST, PROXY e PORT con i rispettivi valori.

Se questo è qualcosa che devi fare più di una volta, è utile aggiungere una voce statica al tuo file ~/.ssh/config . Ad esempio:

Host remotehost.foo.bar
    ProxyCommand          nc -X connect -x proxyhost:proxyport %h %p
    ServerAliveInterval   10

Il ServerAliveInternal è lì perché la maggior parte dei proxy abbandonerà la connessione se non ci sono attività per un certo periodo di tempo.

Quindi, per connetterti, tutto ciò che devi fare è:

ssh remotehost.foo.bar
    
risposta data 14.08.2018 - 18:51
fonte

Leggi altre domande sui tag