ポートフォワーディングについてのメモです.
いろいろできそうなので書いてみました.
あ,初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
```server側
$ 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
```client側
$ ssh proxy_target
configでの実行が便利.
ポートフォワーディング
クライアント側からターゲットに繋ぎにいく
Address1(User1)を経由し,clientのPortAにAddress2のPortBを飛ばす.
(実行したshellは,Address1のUser1にログインした状態になる)
コマンドのみ
$ ssh <User1>@<Address1> -L <PortA>:<Address2>:<PortB>
configによる実行
Nameは任意の名前.
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)を経由し,clientのPortAにAddress2のPortBを飛ばす.
(実行したshellは,ClinetのUser2にログインした状態になる)
コマンドのみ
$ ssh <User2>@<Client> -R <PortA>:<Address2>:<PortB>
configによる実行
Nameは任意の名前.
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は任意の名前.
Host NAME
HostName Address2
User User1
DynamicForward PortA
$ ssh NAME