ソフトウェア

SSHを使用したポート転送やトンネリングの設定をわかりやすく図示したビジュアルガイド


ポート転送」は、特定のポートへの通信をSSHを経由して別のコンピューターやポートへ転送する技術です。執筆者の身元はわからないものの、エキスパートエンジニアによる個人ブログの記事として「どんなコマンドを使えばどんな転送設定になるのか」についてのわかりやすいビジュアルガイドが公開されています。

Visual guide to SSH tunneling and port forwarding - ITTAVERN.COM
https://ittavern.com/visual-guide-to-ssh-tunneling-and-port-forwarding/


SSHの「-J」オプションではトンネリングの設定が可能です。例えば「ssh -J user@REMOTE-MACHINE:22 -p 22 [email protected]」というコマンドではリモートマシンを経由して10.99.99.1のマシンへSSH接続できます。下図のコマンドの背景色はそれぞれ図のどの部分を設定しているかを示しています。


SSHの「-L」オプションはローカルに届いた通信をリモートへ転送する設定ができます。「ssh -L 10.10.10.1:8001:localhost:8000 user@REMOTE-MACHINE」というコマンドは、「10.10.10.1:8001」への通信をリモートマシンの「localhost:8000」へ転送するという意味になります。


「ssh -L 8001:10.99.99.1:8000 user@REMOTE-MACHINE」と設定すると、「8001番のポートに届いた通信をリモートマシンを経由して10.99.99.1の8000番ポートへ転送する」という設定に。ローカルのアドレスを省略した場合はローカルマシン内からの通信のみ転送されます。


逆に、リモートへの接続をローカルに転送するのがSSHの「-R」オプションです。「ssh -R 8000:localhost:8001 user@REMOTE-MACHINE」とコマンドを書くと「リモートマシンの8000番ポートに届いた通信をローカルの8001番ポートへ転送する」ことが可能です。


ローカルマシンを経由して他のサーバーへ通信を転送することもできます。「ssh -R 8000:10.10.10.2:8001 user@REMOTE-MACHINE」は「リモートマシンの8000番ポートへの通信をローカルマシン経由で10.10.10.2の8001番ポートへ転送する」という意味です。


「ssh -R 10.99.99.2:8000:10.10.10.2:8001 user@REMOTE-MACHINE」のようにリモートのアドレスを記載するとリモートマシンの外部からの通信も転送できるようになります。


SSHの「-D」オプションではSOCKSプロトコルを使用したダイナミックポート転送を設定できます。「ssh -D 10.10.10.1:5555 user@REMOTE-MACHINE」のようにポート転送を確立した後、「curl -L -x socks5://10.10.10.1:5555 brrl.net/ip」のように接続先を指定することでリモートマシンから接続できる全てのサーバー・ポートにリモートマシン経由でアクセス可能です。


なお、SSHで「-f」オプションを指定することでバックグラウンドで実行でき、「-N」オプションで接続先でコマンドを使用しないようにできます。ポートの転送設定だけを行う場合、この2つのオプションをあわせて使用するのがおすすめです。

この記事のタイトルとURLをコピーする

・関連記事
混乱しがちな「SSHトンネルの確立方法」をイメージ図とセットでまとめたコマンド集 - GIGAZINE

SSHのポート番号が「22」に決まった経緯を開発者のTatu Ylonen氏が公開 - GIGAZINE

SSHの公開鍵暗号には「RSA」「DSA」「ECDSA」「EdDSA」のどれを使えばよいのか? - GIGAZINE

計算エラーの発生時にSSHの秘密鍵が盗み取られる危険があることを研究者が実証 - GIGAZINE

SSH接続への中間者攻撃を可能にするエクスプロイト「Terrapin Attack」が発見される - GIGAZINE

in ソフトウェア, Posted by log1d_ts

You can read the machine translated English article here.