About a year ago I wrote about creating a HTTP tunnel through a HTTP proxy server using GNU HTTP Tunnel. Unfortunately if the proxy server was run by a ISA server then GNU HTTP Tunnel would not work since it doesn’t support NTLM authentication.
BoutDuTunnel is an open source project written in C# and is compatible with HTTP proxy servers, even if they use NTLM authentication (like ISA Server) and even if they prohibit the “connect method”.
To setup BoutDuTunnel on Ubuntu I had to install Mono. When using Mono 2.0.1 or 2.4 an error occurred Unexpected binary element: 21 when running the BdtClient.exe. Therefore I installed Mono 1.9.1 by building it from the source.
Instead of installing the latest version of BoutDuTunnel, I installed 1.4.3066 because an error would occur on the BoutDuTunnel server moments after the BoutDuTunnel client connected to it.
Unhandled Exception: System.MethodAccessException: Method `Bdt.Server.Service.TunnelSession:CheckTimeout (Bdt.Shared.Logs.ILogger)' is inaccessible from method `Bdt.Server.Service.TimeoutObject:CheckTimeout (Bdt.Shared.Logs.ILogger,System.Collections.Generic.Dictionary`2)'
Setting Up the HTTP Tunnel
Setting Up BdtServer (on the home computer)
The BdtServer can be setup through the command line or hosted inside Apache/mod_mono. To setup BdtServer with the command line extract the BoutDuTunnel and modify the BdtServer configuration file.
$ unzip bdt.bin.1.4.3066.mono.zip
$ cd bdt.bin.1.4.3066.mono/BdtServer
$ nano BdtServerCfg.xml
The configuration file is well commented and should be similar to the following:
Configure binary stream/HTTP as the communication protocol to be used.
<service
name = "BdtServer"
protocol = "Bdt.Shared.Protocol.HttpBinaryRemoting"
port = "8080"
/>
Require user be authenticated before establishing a communication.
<users>
<username
enabled = "true"
password = "password"
/>
</users>
To start up BdtServer execute the following:
$ cd bdt.bin.1.4.3066.mono/BdtServer/
$ mono BdtServer.exe
Setting Up BdtClient (on the office computer)
There are two types of client available for BoutDuTunnel:
- BdtClient run by the command line
- BdtGuiClient which provides a GUI interface
To setup BdtClient modify the BdtClientCfg.xml configuration file.
Configure hostname and communication protocol for server with BdtServer.
<service
name = "BdtServer"
protocol = "Bdt.Shared.Protocol.HttpBinaryRemoting"
address = "my.server"
port = "8080"
username = "my.username"
password = "my.password"
/>
Configure the proxy/ISA server to be used.
<proxy
enabled = "true">
<authentification
auto = "false"
username = "proxy.username"
password = "proxy.password"
domain = "proxy.domain"
/>
<configuration
auto = "false"
address = "proxy.hostname"
port = "proxy.port"
/>
</proxy>
Configure the ports to be forwarded.
<forward>
<port22
shared = "false"
enabled = "true"
address = "my.ssh.server"
port = "22"
/>
</forward>
Run the BoutDuTunnel client to establish a tunnel connection to the BdtServer.
C:\bdt.bin.1.4.3066.mono\BdtClient>BdtClient
Now a SSH connection can be establish to your home computer by connecting through localhost:22