Help us understand the problem. What is going on with this article?

ポートフォワーディング

More than 3 years have passed since last update.

ポートフォワーディングについてのメモです.
いろいろできそうなので書いてみました.
あ,初Qiitaです.どうも.

とは?

PCaの特定のポート1に送られてきたデータを,PCbのポート2に送信する.
つまり,PCaのポート1とPCbのポート2に繋ぐ.

環境(例えば)

社内のネットワークを例に考える.
例えば,このとき,手持ちのPCから社内のPCを画面共有したい.

環境
hoge@client.jp 手持ちのPC
hoge@server.co.jp 社内へのsshサーバー
clientからsshでアクセス可能.
hoge@target.co.jp 社内のPC
外部からアクセスできない.

おまけ(踏み台でのssh接続)

二段階でのssh接続

$ ssh hoge@server.co.jp
$ ssh hoge@target.co.jp

かっこわるい.一発で繋ぎたい.

踏み台でのssh接続

~/.ssh/config
Host server
   HostName server.co.jp
   User hoge
Host proxy_target
   HostName target.co.jp
   User hoge
   ProxyCommand ssh -W %h:%p server
$ ssh proxy_target

configでの実行が便利.

ポートフォワーディング

クライアント側からターゲットに繋ぎにいく
Address1(User1)を経由し,clientPortAAddress2PortBを飛ばす.
(実行したshellは,Address1User1にログインした状態になる)

コマンドのみ
$ ssh <User1>@<Address1> -L <PortA>:<Address2>:<PortB>
configによる実行

Nameは任意の名前.

~/.ssh/config
Host NAME
    HostName Address1
    User User1
    LocalForward PortA Address2:PortB 
$ ssh NAME

ポイント

  • Address2は,Address1から見えるパスであること.
    • Address1==Adress2の場合,Address2=localhostとなる.
  • PortAは0~1023(特権ポート)は使えない.
    • PortBは飛ばしたいPortなので,好きなポートを使える.

例(画面共有)

targetの5900番ポート(vncポート)をclientの55900番ポートに転送する.
Windowの場合,3389番ポート(RDP)を使用する.

コマンドのみ
$ ssh hoge@server.co.jp -L 55900:hoge@target.co.jp:5900
configによる実行
Host test_vnc
    HostName server.co.jp
    User hoge
    LocalForward 55900 hoge@target.co.jp:5900
$ ssh test_vnc
vncの実行
$ open vnc://localhost:55900/

リモートポートフォワーディング
(逆ポートフォワーディング)

経由サーバーがターゲットをクライアントに飛ばす.
経由サーバーから実行する.
Address1(User1)を経由し,clientPortAAddress2PortBを飛ばす.
(実行したshellは,ClinetUser2にログインした状態になる)

コマンドのみ
$ ssh <User2>@<Client> -R <PortA>:<Address2>:<PortB>
configによる実行

Nameは任意の名前.

~/.ssh/config
Host NAME
    HostName <Client>
    User User2
    RemoteForward PortA Address2:PortB 
$ ssh NAME

例(sshポートを外のサーバーへと飛ばす)

targetの22番ポート(vncポート)をclientの60022番ポートに転送する.

コマンドのみ
$ ssh hoge@client.co.jp -L 60022:hoge@target.co.jp:22
configによる実行
Host test_ssh
    HostName client.co.jp
    User hoge
    RemoteForward 60022 hoge@target.co.jp:22
$ ssh test_ssh
ssh接続の実行
$ ssh hoge@localhost -p 60022

ダイナミックポートフォワーディング

socks proxyとしてsshを利用する.
サーバーを経由して,ブラウジングができる.

コマンドのみ
$ ssh -D <Port> <User1>@<Address2>
configによる実行

Nameは任意の名前.

~/.ssh/config
Host NAME
    HostName Address2
    User User1
    DynamicForward PortA
$ ssh NAME
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした