LoginSignup
32
27

More than 5 years have passed since last update.

sshポートフォワーディングについて図示してみる

Last updated at Posted at 2019-04-17

使いたいときにいつも混乱するので、ここにまとめておく。
図の左側はインターネットに接続できるクライアント環境(Windowsパソコンなど)、右側はインターネット接続のないサーバセグメントを想定している。

共通オプション

  • -f: バックグラウンドで動作
  • -N: リモートでコマンドを実行しない
  • -g: ポートフォワードで作ったトンネルを他の端末が使うことを許可する(本記事では利用していません)

ローカルポートフォワード

用途

  • sshクライアント端末から、sshサーバ側ネットワークにある特定サーバ特定ポートにアクセスしたい

コマンド

hostA$ ssh -fN -L 8080:hostD:80 userC@hostC

ssh-L.png

リモートポートフォワード

用途

  • sshサーバ端末から、sshクライアント側ネットワークにある特定サーバ特定ポートにアクセスさせたい

コマンド

hostA$ ssh -fN -R 8080:hostB:80 userC@hostC

ssh-R.png

ダイナミックポートフォワード

用途

  • sshクライアント端末から、sshサーバ側ネットワークにある、あらゆるサーバにアクセスしたい

コマンド

hostA$ ssh -fN -D 1080 userC@hostC

# hostAのブラウザにlocalhost:1080をSOCKSプロキシとする設定を投入する

ssh-D.png

リバースダイナミックポートフォワード

用途

  • sshサーバ端末から、sshクライアント側ネットワークにある、あらゆるサーバにアクセスさせたい(特にインターネット)

コマンド(パターン1)

hostA$ ssh -fN -D 1081 userA@localhost  # hostAの中にSOCKSプロキシを準備
hostA$ ssh -fN -R 1080:localhost:1081 userC@hostC

# hostCのブラウザにlocalhost:1080をSOCKSプロキシとする設定を投入する

ssh-RD1.png

コマンド(パターン2)

hostA$ ssh -fN -R 2022:localhost:22 userC@hostC
hostC$ ssh -fN -D 1080 -p 2022 userA@localhost   # hostCでの実行に注意

ssh-RD2.png

番外編

SOCKSプロキシの設定ができないツールでもSOCKSを使いたい

ダイナミックポートフォワードやリバースダイナミックポートフォワードを利用する際、
ブラウザであればSOCKSプロキシ設定が簡単に可能だが、apt,yumコマンド、自作ツールなどでの対応は難しかったりする。

しかし、proxychains を使うことで、通信を横取りしてSOCKSプロキシを通すことができる。(LD_PRELOADを使い、通信関連APIを上書きしているようだ)

$(HOME)/.proxychains/proxychains.conf
[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 1080
hostC$ proxychains telnet google.com 80
hostC# proxychains yum update
hostC# proxychains apt-get update
32
27
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
27