# [Tunnel HTTP - SSH] Connection impossible [Résolu]

## l_arbalette

Bonjour à tous,

Mon problème est le suivant (je ne trouve rien nulle part sur ce phénomène, ni sur Gentoo Forums, ni ailleurs)

Je souhaite me connecter à ma Gentoo de l'extérieur via SSH. Le problème, c'est que je suis derrière un FireWall hyper restrictif et un proxy. Je ne peux donc passer que par le port 8080 du proxy. De plus, je tourne, à l'extérieur, sous Windows 2000.

Dans Portage, il y a httptunnel, que je me suis empressé d'emerger. De plus, il existe également des binaires pour les plateformes WinNT. Cela me fournit donc hts (le serveur du tunnel sous Gentoo) et htc, le client du tunnel sous Windows 2000. De plus, j'ai installé OpenSSH pour Windows sur le PC à l'extérieur (et puTTY accessoirement, qui produit le même résultat, mais avec des fichiers logs moins explicites)

J'ai donc exécuté les commandes suivantes :

Sous Gentoo :

démarrage de sshd sur le port 22. Aucune configuration spécifique (et ça marche quand je ne suis pas derrière un firewall : je l'ai testé, à partir d'une plateforme Win XP, et avec le même OpenSSH). Je veux dire par là que je n'ai pas configuté de clés ou autres (je ne sais d'ailleurs pas encore comment il faut faire). Donc je me connecte via une identification habituelle : login + password.

lancement par /etc/conf.d/local.start de la commande

```
hts --forward-port localhost:22 8888
```

Sous Windows 2000, depuis l'extérieur, je lance les commandes suivantes :

```
htc --forward-port 9999 --proxy proxy:8080 chezmoi.homedns.org:8888
```

puis 

```
ssh -v -p 9999 localhost
```

A ce moment, htc, sous Windows 2000, crashe lamentablement.

J'obtiens le message suivant :

```
OpenSSH_3.8.1p1, OpenSSL 0.9.7d 17 Mar 2004 

debug1: Reading configuration data /etc/ssh_config 

debug1: Connecting to localhost [127.0.0.1] port 9999. 

debug1: Connection established. 

debug1: identity file /home/MONLOGINWINDOWS/.ssh/identity type -1 

debug1: identity file /home/MONLOGINWINDOWS/.ssh/id_rsa type -1 

debug1: identity file /home/MONLOGINWINDOWS/.ssh/id_dsa type -1 

ssh_exchange_identification: Connection closed by remote host
```

Le fichier de log de htc est le suivant : 

```
20060228 091157 htc (httptunnel) 3.0 started with arguments: 

20060228 091157   me = /tunnel/htc 

20060228 091157   device = (null) 

20060228 091157   host_name = chezmoi.homedns.org 

20060228 091157   host_port = 8888 

20060228 091157   proxy_name = xx.xx.x.xx 

20060228 091157   proxy_port = 8080 

20060228 091157   proxy_buffer_size = 0 

20060228 091157   proxy_buffer_timeout = -1 

20060228 091157   content_length = 102400 

20060228 091157   forward_port = 9999 

20060228 091157   max_connection_age = 300 

20060228 091157   strict_content_length = 0 

20060228 091157   keep_alive = 5 

20060228 091157   proxy_authorization = (null) 

20060228 091157   user_agent = (null) 

20060228 091157   debug_level = 4 

20060228 091157         server_socket (9999) = 0 

20060228 091157         waiting for connection on port 9999 

20060228 091214         wait_for_connection_on_socket (0) = 1 

20060228 091214         creating a new tunnel 

20060228 091214             tunnel_new_client ("chezmoi.homedns.org", 8888, "xx.xx.x.xx", 8080, 102400) 

20060228 091214             tunnel_connect() 

20060228 091214         tunnel_out_setsockopts: non-fatal SO_SNDLOWAT error: This option is unsupported 

20060228 091214         tunnel_out_setsockopts: non-fatal SO_SNDLOWAT: 0 

20060228 091214         tunnel_out_setsockopts: SO_LINGER: onoff=1 linger=2000 

20060228 091214         tunnel_out_setsockopts: non-fatal TCP_NODELAY: 1 

20060228 091214         tunnel_out_setsockopts: SO_KEEPALIVE: 1 

20060228 091214             http_write_request: POST http://chezmoi.homedns.org:8888/index.html HTTP/1.1 

20060228 091214         tunnel_out_connect: output connected 

20060228 091214         tunnel_write_request: TUNNEL_OPEN (1) 

20060228 091214             tunnel_in_connect() 

20060228 091214         tunnel_in_setsockopts: non-fatal SO_RCVLOWAT error: This option is unsupported 

20060228 091214         tunnel_out_setsockopts: SO_RCVLOWAT: 0 

20060228 091214             http_write_request: GET http://chezmoi.homedns.org:8888/index.html HTTP/1.1 

20060228 091217     read_until: closed 

20060228 091217     tunnel_in_connect: no response; peer closed connection
```

et sur mon serveur SSH sous Gentoo, j'ai le log suivant :

```
Feb 24 13:24:58 T-bow-Dlx sshd[8265]: Bad protocol version identification 'POST /index.html HTTP/1.0' from 195.46.21x.xxx 

Feb 24 13:24:58 T-bow-Dlx sshd[8269]: Bad protocol version identification 'GET /index.html HTTP/1.0' from 195.46.21x.xxx
```

Donc ce que je constate, c'est que ma demande de connection parvient bien à sshd. Donc le tunnel a fonctionné, en tout cas dans le sens Extérieur -> intérieur. Dans l'autre sens, ça à l'air de m'avoir fait planté htc.

Chose curieuse, peut être à l'origine du problème, mais je n'en sais fichtre rien, c'est que htc, dans le log, signale HTTP/1.1, et sshd reçoit HTTP/1.0...Serait-ce la source du problème ? Pourquoi ça ferait crasher htc ?

Pourquoi, de toute façon, sshd me jette ?

Y-a-t-il quelqu'un qui sache quoi faire ?

Juste une remarque pour ceux qui sont prêt à me filer un coup de main : je dois faire 40 km entre le PC sous Windows et le PC sous Gentoo...Donc si je suis au taf et que vous avez besoin d'autres logs sur ma Gentoo, ça sera le soir, et vice-versa   :Sad: 

Merci d'avance,Last edited by l_arbalette on Mon Mar 06, 2006 7:41 pm; edited 1 time in total

----------

## castor_fou

je te conseille d'utiliser socks via http ou bout du tunnel

----------

## l_arbalette

 *castor_fou wrote:*   

> je te conseille d'utiliser socks via http ou bout du tunnel

 

OK, socks via http m'a l'air très intéressant.

Je regardé sur http://www.gentoo-portage.com, ça n'a pas l'air d'y être. Connais-tu un how-to bien fait pour me permettre d'installer ça sur ma Gentoo ? (ce soir malheureusement)

----------

## castor_fou

il te faut une jvm (la 1.5 de sun marche très bien)

et ensuite telecharger le soft, le decompresser et le lancer (il y a un fichier qui explique tout)

ça n'est pas dans portage...

----------

## scout

je conseille:

```
* net-misc/corkscrew 

     Available versions:  ~2.0

     Installed:           none

     Homepage:            http://www.agroman.net/corkscrew/

     Description:         Corkscrew is a tool for tunneling SSH through HTTP proxies.
```

C'est simple et ça marche ...

[EDIT] Bon j'avais pas tout lu, mais corkscrew ne semble dispo que pour linux  :Sad: 

[EDIT2] ah non, ça marche aussi sous cygwin ...

----------

## l_arbalette

Merci à tous.

Je vais essayer socks via HTTP dans un premier temps, qui m'a l'air pas mal. J'ai lu effectivement les docs présents dans l'archive : ça a l'air simple. De plus, j'ai déjà la JVM 1.5 installée sur ma Gentoo.

Si ça marche pas, j'essaierai corkscrew, mais qui m'a l'air plus compliqué....je suis pas trop à l'aise avec les histoires de Cygwin (je ne sais pas comment ça marche : je me pencherai sur la question si je n'ai pas le choix    :Very Happy:   )

Je vous tiens au courant.

----------

## castor_fou

l'avantage de socks via http c'est qu'il te propose de faire du tunneling, et pas simplement pour ssh mais pour tous les protocoles...

ou alors il te propose un socks local que tu peux utiliser (mais ton application doit supporter le socks)

----------

## guilc

Ben si ta machine est sous win : tu as vu au moins que putty gere en natif tous les types de proxy...

Sinon, effectivement, corkscrew ça marche, soit a travers un socks, soit a travers un proxy http su un port ou il autorise le connect (ex 443, ça marche dans 99.9% des cas)

----------

## l_arbalette

Bon, ben j'ai un problème avec Socks via HTTP....  :Sad: 

(pour le serveur, sous Gentoo. Je n'ai pas encore essayé le client sous Windows)

J'ai bien extrait le contenu de l'archive dans /usr/Socks.via.HTTP_1.0.1

Les droits sur le répertoire sont les suivants :

```
drwxr-xr-x    5 root    users    600 May  6  2002 Socks.via.HTTP_1.0.1
```

J'ai fait les modifications nécessaires dans /usr/Socks.via.HTTP_1.0.1/classes/socksviahttp/server/initsrv.properties

comme préconisé dans le fichier INSTALL.

J'ai lancé server.sh depuis la Konsole, en root d'abord, puis sous mon user.

En root, il ne connaît pas la commande java (comme si les variables d'environnement de /etc/env.d/java n'avaient pas été prises en compte)

```
T-bow-Dlx / # /usr/Socks.via.HTTP_1.0.1/server.sh

Socks via HTTP v1.0.1 Server part starting...

/usr/Socks.via.HTTP_1.0.1/server.sh: line 4: java: command not found
```

Ce qui est très gênant, puisque je vais démarrer cette commande au démarrage, en root (via une commande dans /etc/conf.d/local.start)

EDIT1 : c'est bizarre, je viens de faire 

```
/usr/sbin/env-update && source /etc/profile
```

, et maintenant, j'ai la même erreur que quand j'exécute server.sh sous mon login (voir ci-dessous) : donc la commande java est reconnue...

Sous mon login, il connaît la commande java, par contre, il sort avec une erreur :

```
thibaut@T-bow-Dlx ~ $ /usr/Socks.via.HTTP_1.0.1/server.sh

Socks via HTTP v1.0.1 Server part starting...

Exception in thread "main" java.lang.NoClassDefFoundError: jhttpserver/JHttpServer
```

Le contenu du fichier server.sh est le suivant :

```
T-bow-Dlx / # cat /usr/Socks.via.HTTP_1.0.1/server.sh

#!/bin/sh

echo Socks via HTTP v1.0.1 Server part starting...

export CLASSPATH=classes/servlet.jar:classes/

java jhttpserver.JHttpServer -log2

```

Java est bien installé à priori : 

```
T-bow-Dlx / # java-config -L

[blackdown-jre-1.4.2.03] "Blackdown JRE 1.4.2.03" (/etc/env.d/java/20blackdown-jre-1.4.2.03)

[sun-jdk-1.5.0.06] "Sun JDK 1.5.0.06" (/etc/env.d/java/20sun-jdk-1.5.0.06)

[blackdown-jdk-1.4.2.03] "Blackdown JDK 1.4.2.03" (/etc/env.d/java/20blackdown-jdk-1.4.2.03) *

```

Comment puis-je faire pour que ça marche en root ? (commande java). Suite à l'EDIT1 : pourquoi j'ai été obligé de faire /usr/sbin/env-update && source /etc/profile pour que ça marche...? 

A quoi est du le plantage ? (je viens d'essayer avec la machine virtuelle Sun 1.5 : c'est pas mieux :

```
T-bow-Dlx thibaut # java-config -f

sun-jdk-1.5.0.06

T-bow-Dlx thibaut # /usr/Socks.via.HTTP_1.0.1/server.sh

Socks via HTTP v1.0.1 Server part starting...

Exception in thread "main" java.lang.NoClassDefFoundError: jhttpserver/JHttpServer

```

Merci de vos éclairages.

----------

## l_arbalette

Il m'est venu une idée sur la raison pour laquelle la commande java n'est pas reconnue en root....

J'ai légèrement modifié le fichier /etc/init.d/bootmisc comme indiqué dans ce how-to : Optimiser votre système

Ce qui fait que, d'après le how-to,  *Quote:*   

> env-update ne se lancera qu'en cas de réel besoin lors de changements dans le système. 

 

Est-ce que ça pourrait être ça ?

Par contre, pour le plantage 

```
Exception in thread "main" java.lang.NoClassDefFoundError: jhttpserver/JHttpServer
```

je sèche toujours !

----------

## l_arbalette

ça y est : le concepteur du programme m'a expliqué ce qui ne va pas, et tout marche bien maintenant (un grand merci à lui d'ailleurs   :Wink:  ) :

1/ Problème de commande java non reconnue : il semblerait que les variables d'environnement ne soient pas encore chargées au moment où /etc/conf.d/local.start est lancé. J'ai donc remplacé la commande java par /opt/blackdown-jdk-1.4.2.03/bin/java qui est le chemin complet chez moi.

2/ Bug 

```
Exception in thread "main" java.lang.NoClassDefFoundError: jhttpserver/JHttpServer
```

 : il suffisait, avant d'exécuter la commande de démarrage du programme, de faire un cd /répertoire de stockage de Socks_via_HTTP.

Chez moi, ça donne : 

```
cd /usr/Socks_via_HTTP/
```

Voilou !

En tous cas, ce programme est top, et fonctionne super bien. Gros avantage : vu qu'il est sous java, on peut l'utiliser hyper facilement sous Windows ou sous Linux

Merci à Castor_fou pour le tuyau !

A bientôt sur d'autres posts,

----------

## polytan

Je suis décu, j'ai exactement le même problème que toi :

[code=]TOSHIBA-A100 maxbilh # ssh -v -p 9999 localhost

OpenSSH_4.7p1, OpenSSL 0.9.8e 23 Feb 2007

debug1: Reading configuration data /etc/ssh/ssh_config

debug1: Connecting to localhost [127.0.0.1] port 9999.

debug1: Connection established.

debug1: permanently_set_uid: 0/0

debug1: identity file /root/.ssh/identity type -1

debug1: identity file /root/.ssh/id_rsa type -1

debug1: identity file /root/.ssh/id_dsa type -1

ssh_exchange_identification: Connection closed by remote host[/code]

Je me demande si ca v anient pas de mon serveur ssh qui est bien configuré ou pas.

Quand je me connecte dessus en local, donc pas a travers le firewall, quand je rentre chez moi, ca me dit que les tunnels ne sont pas possibles ...

```
ssh -YAC monnom@10.0.1.1
```

J'aimerais bien résoudre ce soucis, c'est sensé bien marcher httptunnel :/

Merci d'avance.

----------

## l_arbalette

Je ne risque pas de t'aider sur httptunnel, puisque je n'ai jamais réussi à le faire fonctionner. J'utilise SocksViaHTTP qui fonctionne parfaitement.

Et un conseil : ouvre ton propre fil de discussion (de plus, il est possible que ton problème vienne d'OpenSSH, vu tes logs, plutôt que de httptunnel)

----------

## polytan

Ok, c'est parti.

Je me suis greffé ici car nous sommes dans le même cas.

Peux-tu expliquer un peu plus comment tu a fait avec SOCKSviaHTTP et ce que tu peux faire ?

Je suis derrière un firewall (pas de proxy) qui ne m'autorise que les services web et mail, j'aimerais de manière transparente pouvoir utiliser pidgin, xchat (entre autre).

----------

## l_arbalette

Déjà, tu télécharges l'archive ici (version 1.2 qui m'a été donnée par le concepteur)

Tu la décompresses ou tu veux, et tu suis les instructions qui sont dans les diférents fichiers INSTALL, README, etc....

C'est très clair : pas besoin de plus d'explication.

Juste un truc : pour lancer le serveur, il faut faire 

```
cd /le_repertoire_ou_tu_as_decompresse/ && /le_repertoire_ou_tu_as_decompresse/server.sh &
```

Pour le client, j'utilise la version sous Windows...

----------

