今までは必要に応じてコピペで済ませていたのですが、他の人にノウハウを残さないといけなくなったのでまとめました。
目的
- 手元のブラウザから http://localhost:8080 にアクセスすると、ターゲットホスト上の httpd(http://192.168.2.3:80)に接続できる。
- 手元の専用クライアント(mongodb-compass)から localhost:8081 にアクセスすると、ターゲットホスト上の MongoDB(27017) に接続できる。

前提条件
- 踏み台、ターゲットのいずれも CentOS7 とする。
- 各ホストでは、指定された(別々の)ユーザ名で SSH が使える。
- 自席端末は Windows10、SSH クライアントは PuTTY を使用する。
SSH 接続構成
IP | SSHユーザ名 | |
踏み台ホスト | 192.168.0.99 | user1 |
ターゲットホスト | 192.168.2.3 | user2 |
マッピングルール
SSH Tunnel | (@自席端末) | SSH Port Foward | (@踏み台) |
localhost:8080 | 8080 | 8080 | 192.168.2.3:80 |
localhost:8081 | 8081 | 8081 | 192.168.2.3:27017 |



ここで使用する秘密鍵は PuTTY が使用するので *.ppk 形式を指定します。

ssh -L 8080:192.168.2.3:80 -L 192.168.2.3:27017 -g user2@192.168.2.3 -i /home/user1/.ssh/user2
ssh コマンドのオプション
- -L フォワード設定 : ローカルポートに対する通信を、目的サーバの待ち受けポートにフォワードする
- -L [bind_address:]port:host:hostport
- -L [bind_address:]port:remote_socket
- -L local_socket:host:hostport
- -L local_socket:remote_socket
- -g :リモートホストをローカルでフォワードされたポートに接続する
- -i PATH : 秘密鍵の指定
こちらで指定する秘密鍵は CentOS7 上のユーザ user1 が ssh コマンド経由で使用するものなので、OpenSSH 形式を指定します。

VPN 利用時の TIPS
筆者の環境では、実際には自席端末と踏み台の間に Wifi ルータがあり、さらに踏み台ホストに接続するためには VPN 接続が必要です。
VPN 接続先の帯域が狭かったり、あるいは自身がクラウドサービスを多用していたりする場合は、VPN をデフォルトゲートウェイにしない方が便利です。この場合、VPN の設定で「デフォルトゲートウェイを使う」のチェックを外しておきます。

VPN接続を選択して[右クリック]>[プロパティ]

- [ネットワーク]>[TCP/IPv4]>[プロパティ]
- [全般]>[詳細設定]

さらに、踏み台の数の分、静的ルートを設定しておきます。PowerShellで、VPN 接続時に自動的にルーティングする設定が行えます。
PS> Get-VpnConnection
Name : xxx L2TP VPN
ServerAddress : xxx.xxx.xxx.xxx
(以下略)
PS> Add-VpnConnectionRoute "xxx L2TP VPN" -DestinationPrefix "192.168.0.99/32" -PassThru
DestinationPrefix : 192.168.0.99/32
InterfaceIndex :
InterfaceAlias : xxx L2TP VPN
AddressFamily : IPv4
NextHop : 0.0.0.0
Publish : 0
RouteMetric : 1
PolicyStore :
ここまでできたら、PuTTY で 00-Bastion に接続したままにしておいて、ブラウザや専用クライアントで透過的にターゲットホスト上のサービスに接続できます。