インフラエンジニアのPC環境

インフラエンジニアは常に効率環境を目指している

ユーザ用ツール

サイト用ツール


サイドバー

目次

ホーム

OS


CUIソフト

tips:sshportfoward


SSHポートフォワードで、Linuxサーバを踏み台に、その先に通信

SSHポートフォワードとは

直接インターネットやSSHの通信ができない場合、SSHのLinuxサーバを踏み台で経由して、その先のサーバに行けるようにします。


SSHトンネルの種類

ローカルポートフォワード 最終的な行きた先が1つ
通信をSSHサーバから別の宛先へ転送

PCからブラウザーで、踏み台サーバを経由してWebアクセス
PCからリモートデスクトップで、踏み台サーバを経由して別のサーバにアクセス
リモートポートフォワード 通常使わない方式。
サーバ側からPC側へ通信を引き込むことが出来ます。
ダイナミックポートフォワード 最終的な行きた先が特定多数
SSHクライアントがSocksプロキシとなり、ローカルのSocksプロキシ経由することで、すべてSSHサーバから転送します。
リバースダイナミックポートフォワード 最終的な行きた先が特定多数
サーバでSocksプロキシーを作り、サーバ側からクライアントにSSHする。


ローカルポートフォワードの利用例(ダイナミックではない)

最終的な行き先が1つ

PCのブラウザーで、踏み台サーバを経由して特定サーバのWebへアクセス

+----------------+     +---------------+      +---------------+
| Host1          |     |Host2          |      | Host3         |
| Client         |---> | Linux Fumidai | ---> | Server        |
|                |     |               |      |               |
|  localhost:444 |     |  192.168.0.5  |      |  192.168.0.10 |
|                |     |               |      |   Port 443    |
+----------------+     +---------------+      +---------------+
Windows Clientの場合
  • TeraTermで、Host2(192.168.0.5)へSSH接続(Host2のユーザとパスワード)
  • TeraTermの[設定] [SSH転送]を選択
  • 以下のように設定
    ローカルのポート:  444
    リモート側ホスト:  192.168.0.10   ポート 443
    
  • PCのブラウザーで、アクセス。 https://localhost:444/

WindowsやMacなどのOSの場合、Teratermなどの代わりに、SSHポートフォワードツールを使う方法もあります。
詳細は、SSHポートフォワードソフトで、SSHサーバを踏み台にその先に通信に書きましたので、参考にしてください。


Linux Clientの場合
Host1 $ ssh -L 444:192.168.0.10:443  192.168.0.5    # 192.168.0.5のユーザとパスワード
または
Host1 $ ssh -fN -L 444:192.168.0.10:443  192.168.0.5
-f  : バックグラウンドで実行
-N  : 何も実行しない

※ 終了するためには、PSでプロセスを確認してkillする。(ps -ef |grep ssh)
Host1 $ curl http://localhost:444/           <-  Host3 Port443にアクセス




PCのリモートデスクトップで、踏み台サーバを経由して特定サーバへリモートデスクトップ

+----------------+     +---------------+      +---------------+
| Host1          |     |Host2          |      | Host3         |
| Client         |---> | Linux Fumidai | ---> | Windows Server|
|                |     |               |      |               |
| localhost:3388 |     |  192.168.0.5  |      |  192.168.0.10 |
|                |     |               |      |   Port 3389   |
+----------------+     +---------------+      +---------------+
Windows PCの場合
  • TeraTermで、Host2(192.168.0.5)へSSH接続(Host2のユーザとパスワード)
  • TeraTermの[設定] [SSH転送]を選択
  • 以下のように設定
    ローカルのポート:  3388
    リモート側ホスト:  192.168.0.10   ポート 3389
    
  • PCのリモートデスクトップで、localにリモートデスクトップ。(Host3のユーザとパスワード)

WindowsやMacなどのOSの場合、Teratermなどの代わりに、SSHポートフォワードツールを使う方法もあります。
詳細は、SSHポートフォワードソフトで、SSHサーバを踏み台にその先に通信に書きましたので、参考にしてください。






ダイナミックポートフォワードの利用例

最終的な行き先が不特定多数

PCのブラウザーで、別サーバを経由してインターネットアクセス

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

+----------------+     +-------------+
| Host1          |---> |Host2        | --->  インターネット
|  192.168.100.2 |     | 192.168.0.5 |
|    Port 8080   |     |             |
| Linux          |     | Linux       |
+----------------+     +-------------+
Host1 $ ssh -D 8080 192.168.0.5
または
(バックグラウンドで実行)
Host1 $ ssh -fN -D 8080 192.168.0.5
ブラウザーのプロキシー設定
  IP  127.0.0.1
  Port  8080
  Version SOCKS 5


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

+----------------+     +-------------+
| Host1          |---> |Host2        | --->  インターネット
|  192.168.100.2 |     | 192.168.0.5 |
|    Port 8080   |     |   Port 1080 |
| Linux          |     | Linux       |
+----------------+     +-------------+
Host2 $ ssh -D 1080 localhost            <-  SOCKS プロキシを立てる

Host2 $ ssh -R  8080:localhost:1080   192.168.100.2
                               ← Host1の8080が、Host2の1080に転送される
Host1 ブラウザーのプロキシー設定
  IP  127.0.0.1
  Port  8080
  Version SOCKS 5




Linuxマシンから別サーバを経由してyum実行

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

+----------------+     +-------------+
| Host1          |---> |Host2        | --->  yumレポジトリ
|  192.168.100.2 |     | 192.168.0.5 |
|    Port 8080   |     |             |
| Linux          |     | Linux       |
+----------------+     +-------------+
Host1 $ ssh -D 8080 192.168.0.5
または
(バックグラウンドで接続)
Host1 $ ssh -fN -D 8080 192.168.0.5
■socks5(名前解決がクライアント側)
Host1 # ALL_PROXY=socks5://localhost:8080 
または
Host1 # http_proxy=socks5://127.0.0.1:8080

■socks5h(名前解決がサーバ側)
Host1 # ALL_PROXY=socks5h://localhost:8080
または
Host1 # http_proxy=socks5h://127.0.0.1:8080
Host1 # yum list
Host1 # yum search httpd


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

+----------------+     +-------------+
| Host1          |---> |Host2        | --->  yumレポジトリ
|  192.168.100.2 |     | 192.168.0.5 |
|    Port 8080   |     |   Port 1080 |
| Linux          |     | Linux       |
+----------------+     +-------------+
Host2 # ssh -D 1080 localhost            <-  SOCKS プロキシを立てる

Host2 # ssh -R  8080:localhost:1080   192.168.100.2
                           ← Host1の8080が、Host2の1080に転送される
■socks5(名前解決がクライアント側)
Host1 # ALL_PROXY=socks5://localhost:8080 
または
Host1 # http_proxy=socks5://127.0.0.1:8080

■socks5h(名前解決がサーバ側)
Host1 # ALL_PROXY=socks5h://localhost:8080
または
Host1 # http_proxy=socks5h://127.0.0.1:8080
Host1 # yum list
Host1 # yum search httpd




Linuxサーバ側のポートフォワード許可設定

/etc/ssh/sshd_config

以下の設定がないこと。
AllowTcpForwarding no
AllowTcpForwarding local


tips/sshportfoward.txt · 最終更新: 2021/02/22 11:46 by kurihara

ページ用ツール