Creating a forwarded port within an SSH tunnel
c#, portforwarding, ssh, ssh.net
Solution
By changing the parameters of ForwardedPortLocal to:
var port = new ForwardedPortLocal("localhost", 3306, "localhost", 3306);
(to make it explicit which interface I was binding to), and adding the following code in just before `port.Start();`:
port.RequestReceived += delegate(object sender, PortForwardEventArgs e)
{
Console.WriteLine(e.OriginatorHost + ":" + e.OriginatorPort);
};
I noticed the following being output:
::1:60309
The `e.OriginatorHost` part of this was `::1`, which is the IPv6 equivalent of `localhost`; however, the destination server was using IPv4. Changing the parameters to:
var port = new ForwardedPortLocal("127.0.0.1", 3306, "localhost", 3306);
forced the tunnel to run over IPv4 instead, and my code then worked exactly as I'd expected it to.
Problem
I'm attempting to use SSH.NET to create a tunnel from `localhost:3306` to port 3306 on a remote machine: ``` PrivateKeyFile file = new PrivateKeyFile(@" .. path to private key .. "); using (var client = new SshClient(" .. remote server .. ", "ubuntu", file)) { client.Connect(); var port = new ForwardedPortLocal(3306, "localhost", 3306); client.AddForwardedPort(port); port.Start(); // breakpoint set within the code here client.Disconnect(); } ``` When the breakpoint is hit, `client.IsConnected` is returning `true`, but `telnet localhost 3306` is not connecting. If I create the connection using Putty instead, and set up the same tunnel there, it succeeds. What have I missed?