PuTTY でポートフォワード

今までは必要に応じてコピペで済ませていたのですが、他の人にノウハウを残さないといけなくなったのでまとめました。

目的

  • 手元のブラウザから 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 セッションの基本設定
サーバに送られるデータ
SSH 認証の設定

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

SSH 接続の設定
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 形式を指定します。

SSH ポート転送のオプション

VPN 利用時の TIPS

筆者の環境では、実際には自席端末と踏み台の間に Wifi ルータがあり、さらに踏み台ホストに接続するためには VPN 接続が必要です。

VPN 接続先の帯域が狭かったり、あるいは自身がクラウドサービスを多用していたりする場合は、VPN をデフォルトゲートウェイにしない方が便利です。この場合、VPN の設定で「デフォルトゲートウェイを使う」のチェックを外しておきます。

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

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

さらに、踏み台の数の分、静的ルートを設定しておきます。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 に接続したままにしておいて、ブラウザや専用クライアントで透過的にターゲットホスト上のサービスに接続できます。

参考資料

タイトルとURLをコピーしました