Comment tunneler HTTP sur SSH via SOCKS?

21

Cela devrait être un problème simple à résoudre, mais pour une raison quelconque, cela ne fonctionne pas pour moi.

ssh vps fonctionne très bien (j'utilise des clés d'authentification)

J'ai installé le tunnel avec la commande:

ssh -C2TNv -D 8080 vps

Je modifie ensuite les paramètres réseau de Firefox:

  • configuration manuelle
    • Proxy http: localhost, port: 8080
    • utiliser ce serveur proxy pour tous les protocoles
    • SOCKS v5
  • à propos de: config
    • network.proxy.socks_remote_dns: true

Sortie borne:

$ ssh -C2TNv -D 8080 vps
OpenSSH_6.0p1, OpenSSL 1.0.1a 19 Apr 2012
debug1: Reading configuration data /home/ting/.ssh/config
debug1: /home/ting/.ssh/config line 47: Applying options for vps
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to vps.server.com [1.1.1.1] port 22.
debug1: Connection established.
debug1: identity file /home/ting/.ssh/id_rsa type 1
debug1: identity file /home/ting/.ssh/id_rsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.5p1 Debian-6+squeeze1
debug1: match: OpenSSH_5.5p1 Debian-6+squeeze1 pat OpenSSH_5*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.0
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 [email protected]
debug1: kex: client->server aes128-ctr hmac-md5 [email protected]
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA <removed>
debug1: Host 'vps.server.com' is known and matches the RSA host key.
debug1: Found key in /home/ting/.ssh/known_hosts:10
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/ting/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (publickey).
Authenticated to vps.server.com ([1.1.1.1]:22).
debug1: Local connections to LOCALHOST:8080 forwarded to remote address socks:0
debug1: Local forwarding listening on ::1 port 8080.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on 127.0.0.1 port 8080.
debug1: channel 1: new [port listener]
debug1: Requesting [email protected]
debug1: Entering interactive session.

J'essaie ensuite de visiter un site en utilisant Firefox, sortie SSH:

debug1: Connection to port 8080 forwarding to socks port 0 requested.
debug1: channel 2: new [dynamic-tcpip]
debug1: channel 2: free: dynamic-tcpip, nchannels 3
debug1: Connection to port 8080 forwarding to socks port 0 requested.
debug1: channel 2: new [dynamic-tcpip]
debug1: channel 2: free: dynamic-tcpip, nchannels 3

Malgré le proxy qui semble fonctionner, visiter n'importe quel site avec Firefox revient simplement avec l'erreur "La connexion a été réinitialisée".

wting
la source
as-tu essayé le curl. $ curl --socks4 127.0.0.1:8080 blah
barlop

Réponses:

27

Votre commande SSH avec -D est très bien (donc le SOCKS tunnelera c'est juste la connexion au SOCKS via HTTP, que vous devez trier)

J'obtiens une bonne sortie avec

curl --socks5 127.0.0.1:8080 http://blah

mais j'obtiens la même sortie erronée que vous obtenez si je le fais

 curl --proxy 127.0.0.1:8080 http://blah

Donc, Firefox se connecte comme s'il s'agissait d'un proxy HTTP

En regardant la fenêtre de Firefox

configuration manuelle OUI

vous avez dit que vous avez coché "utiliser ce serveur proxy pour tous les protocoles" C'est une décision totalement erronée! Vous souhaitez entrer un proxy SOCKS, et si vous le faites, la zone SOCKS est annulée / grisée et vous ne pouvez entrer qu'un proxy HTTP.

Alors ne cochez pas cela.

Et faites-le, entrez l'IP du proxy de chaussettes.

et supprimez là où il n'est pas indiqué de proxy pour 127.0.0.1, localhost. s'il dit cela, ce qui est par défaut.

barlop
la source
14
Merci d'avoir répondu. Cependant, je l'ai fait fonctionner en effaçant tout dans l'écran de configuration du proxy de Firefox, sauf le SOCKS Hostchamp. Si j'ajoutais quelque chose sur le HTTP Proxyterrain, cela cessait de fonctionner.
wting
@wting ou @barlop, je ne pourrais pas demander une description des drapeaux ssh -C2TN.
Mike HR
1
@ MikeH-R, je ne le connais pas très bien mais il se décomposerait en -C2 -T -N -v. en regardant man ssh, on dirait que -C2 est à voir avec la compression -C fait la compression et il mentionne l'inclusion d'un niveau donc par exemple. -C2 ce qu'il a fait. -T ou -N ou les deux -T et -N ont à voir avec la simplification du ssh dans le sens où, normalement lorsque vous ssh même avec la redirection de port, il ouvre une invite cmd et vous avez un shell donc ce qu'il a fait là s'arrête cela se produit donc il a juste la fonctionnalité de redirection de port qu'il veut sans le shell. et -v est verbeux. (bien que si vous voulez verbeux -vvv c'est-à-dire que 3 d'entre eux est mieux)
barlop
Merci @barlop, vous l'avez un peu effacé des documents, très apprécié.
Mike HR
@ MikeH-R pas de problème, je me demandais à l'époque ce que c'était aussi, mais je n'ai pas vérifié à l'époque! J'étais toujours curieux quand je l'ai regardé maintenant!
barlop
1

Pour vérifier la connexion via curl, vous pouvez également utiliser des indicateurs -I -v(pour obtenir uniquement des en-têtes HTTP et pour obtenir une sortie plus bavarde).

Si ces drapeaux sont sélectionnés et se connectent en boucle - vous verrez dans la chaîne de sortie comme:

* Rebuilt URL to: http://www.google.ru/
*   Trying ::1...
* 87
* 245
* 198
* 44
* Connected to localhost (::1) port 8080 (#0)

Si impossible de se connecter:

* Rebuilt URL to: http://www.google.ru/
*   Trying ::1...
* connect to ::1 port 8080 failed: Connection refused

Dans l'onglet d'un autre terminal avec connexion ssh, vous aurez quelque chose comme ceci:

debug1: channel 2: new [dynamic-tcpip]
debug1: channel 2: free: direct-tcpip: listening port 9999 for 87.245.198.44 port 80, connect from ::1 port 55034 to ::1 port 8080, nchannels 3
dmgl
la source