Connecting to MySQL on a Remote Server through Port Forwarding and Reverse SSH Tunnel

I had a problem connecting to a remote server that has its ports blocked by the ISP. So technically, I can’t port forward my way into the server. The only way around this is to SSH connect from my remote server to my main server and access the remote server via reverse SSH tunneling. This tutorial will show the steps on how I connected to my database server on the remote server via port forwarding on my PC and reverse SSH tunneling on my main server.

  1. Connect from the remote server (B) to the main server (A).
    • #> screen autossh -R22222:localhost:22 your_remote_IP_address
      • screen – new terminal so you can disconnect and work on other stuffs
      • autossh – reconnects if ssh is broken or is disconnected
      • -R -> tells the client that the remote port to open for the reverse tunnel
      • 22222 -> of course, the port to be used on the other end
      • localhost:22 -> anything attached on port 22222 will reach localhost port 22
      • your_remote_IP_address – not much explaining needed
  2. Now on the main server ( A ), to connect to remote server via the SSH tunnel created.
    • #> ssh -p 22222 username@localhost -L 4406:localhost:3306
      • -p 22222 -> instructs the SSH client to connect to localhost via port 22222
      • -L 4406:localhost:3306 -> this tells the client to forward all packets that is sent on port 4406 to localhost and target port 3306. That’s if the connection succeeds, will be on the remote server already.
  3. On my dev machine, I setup my SSH client ( putty ) to bind to port 99999 and forward  it to the main server on port 4406.
  4. I then have my DB Client attach to port 99999 on connect

Image shown below….

Sources: StackExchange

diagram