タイトルやりたいことを表現できているかわからないですが、つまりはこんなことをしたいです。
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, }, } )