別ネットワークにSSHトンネルを通してブラウザ表示するProxyを作る方法

タイトルやりたいことを表現できているかわからないですが、つまりはこんなことをしたいです。

Server B〜DがあるネットワークでWebブラウザやアプリといったGUIが無い場合など結構便利です。

ServerAではトンネルのリストを並べて、クリックするとトンネルを通して画面をブラウザ表示します。WebサーバはEcho使っています。

起動してみたところ(コンソール側)。

./tunnel

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v3.2.6
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:8080

ソースコード

ブログに載せるために1ファイルに纏めて、簡略化してみましたが、それでも結構長くなってしまいました。

このあたりを環境に合わせて調整して利用します。

   var (
        localServerHostnameOrIP = "192.168.33.10" // Server A のホスト
        localServerPort         = 8080            // Server A のへの接続Port

        serverB = TargetServer{
            Name:         "Server B",
            HostnameOrIP: "52.1.1.1", // 例えばAWSのEIPのようなGlobal IPとか別ネットワークから繋がるもの
            ServicePort:  22,         // sshdに設定しているポート
            ExposePort:   0,          
        }
        targetServers = []TargetServer{
            TargetServer{
                Name:         "Server C",
                HostnameOrIP: "192.168.11.3",  // ServerAとネットワークが異なる
                ServicePort:  80,              // ServerCのサービスポート
                ExposePort:   8083,            // ブラウザからサクセスする際に利用するポート
            },
            TargetServer{
                Name:         "Server D",
                HostnameOrIP: "192.168.11.4",
                ServicePort:  80,
                ExposePort:   8084,
            },
            TargetServer{
                Name:         "Server E",
                HostnameOrIP: "192.168.11.5",
                ServicePort:  80,
                ExposePort:   8085,
            },
        }
    )