SSH ポート転送とは何ですか?何の役に立つの?

SSH ポート転送とは何ですか?何の役に立つの?

序文

最初、私は「SSH ポート フォワーディング」という用語について漠然とした知識しか持っていませんでした。難解で理解しにくいように思えました。その機能や用途が何なのかがわかりませんでした。そこで、関連情報を検索し、理解して、使用し始めました。その後、それほど複雑ではないことがわかりました。理解して使用するのは非常に簡単でした。

まず、SSH ポート転送は、ローカル ポート転送、リモート ポート転送、動的ポート転送に分けられます。以下では、各タイプのポート転送について個別に説明します。

1. ローカルポート転送

まずローカルホストで実行します:

フォーマット ssh -L ローカルポート:ターゲットホスト:ターゲットポート トンネルホスト -N
例 ssh -L 8080:wwww.example.com:80 [email protected]

-Lはローカルポート転送の識別子です
local-port ローカルポート番号
ターゲットホスト ターゲットホスト
ターゲットポート ターゲットポート番号
トンネルホストは転送サーバーとして機能する
-Nは転送のみを意味し、サーバーにログインしません

現時点では、locahost:8080へのローカルアクセスはwww.example:com:80へのリモートアクセスと同等です。

適用シナリオ:

リモートホストがポート9888にサーバーを展開しているが、ファイアウォールがこのポートを開いていない場合、
この 9888 にローカルでアクセスする場合は、上記の例を使用してファイアウォールをバイパスし、ssh アクセスを行うことができます。リモート ホストが海外にある場合は、リモート ホストの 80/443 をバインドして科学的なアクセスを行うこともできます。

2. リモートポート転送

まずローカルホストで実行します:

フォーマット ssh -R リモートポート:ターゲットホスト:ターゲットポート トンネルホスト -N
例 ssh -R 8888:localhost:8080 [email protected] -N

-Rはリモートポート転送の識別子です
リモートポート リモートポート番号
ターゲットホスト ターゲットホスト
ターゲットポート ターゲットポート番号
トンネルホストは転送サーバーとして機能する
-Nは転送のみに使用され、サーバーにログインしないことを意味します。この時点で、www.example:com:8888へのリモートアクセスは、locahost:8080へのローカルアクセスと同等です。

適用シナリオ:
ローカルホストがポート9888にサーバーを展開し、リモートホストがローカルの9888にアクセスしたい場合は、上記の例を使用できます。

3. 動的ポート転送(SOCKS5)

フォーマット ssh -D ローカルポート トンネルホスト -N
例 ssh -D 7999 [email protected] -N

-Dはローカルポート転送の識別子です
local-port ローカルポート番号
トンネルホストは転送サーバーとして機能する
-Nは転送のみを意味し、サーバーにログインしません

この転送はSOCKS5プロトコルを使用するため、ローカル/リモートポート転送のように直接アクセスすることはできません。転送する前に、httpリクエストをSOCKS5に変換する必要があります。以下はリクエストの使用例です。

curl -x socks5://localhost:7999 https://www.baidu.com
curl -x socks5://localhost:7999 https://www.weibo.com

現時点では、socks5://localhost:7999 https://www.baidu.com へのローカルアクセスは、リモートサーバー www.example.com に https://www.baidu.com / https://www.weibo.com へのアクセスを要求することと同じです。
ブラウザから socks5 プロキシ バインディング 7999 を設定することもできます。このとき、任意の Web サイトを閲覧するとこのプロキシに移動し、このプロキシはリモート マシンに要求を要求し、要求結果を socks5 プロキシに返してブラウザに返します。

適用シナリオ:

サーバーが海外にある場合、外国のリンクへのローカル アクセスは科学的なアクセスと同等になります。プロキシ QQ データをサポートし、ネットワークのないホストをネットワークに接続できるようにします。

4. ローカル ポート転送と動的ポート転送の違いは何ですか?

ローカル ポートは先頭にリモート ポート番号を指定しますが、動的ポート転送に対応するリモート ポート番号は不明です。
動的ポートは、実際にどのようなリクエストが行われ、対応するポートが自動的にバインドされるかということも理解できます。違いは次のとおりです。
ローカルポート L:8080 => R:80
動的ポート L:8080 ⇒ R:N

動的ポート転送は非常に強力です。HTTP を処理できるだけでなく、他のプロトコルに自動的に適応し、対応するポートをバインドすることもできます。

例えば、インターネットにアクセスできないパソコンからQQにアクセスしたい場合、QQを使ったことがある人ならプロキシ設定があることを知っているので、動的ポート転送を使ってインターネットアクセスを実現できます。

ここに画像の説明を挿入

ソックスタイプを設定し、プロキシアドレスとポート番号を書き込むと、QQによって生成されたデータは対応する111.222.333:1080を介して転送されます。

この方法により、ローカル マシンにネットワークがない場合でも、111.222.333:1080 を使用してデータを転送し、ネットワークにアクセスできるようになります。

たとえば、次の状況では、インターネットにアクセスできないホストもプロキシ方式でインターネットに接続されます。

ここに画像の説明を挿入

5. マルチレベルポート転送

複数のポート転送をローカルで開始できます。たとえば、ローカルマシンAと2つのリモートマシンBとCがあります。
このとき、ローカルマシンAを介してBにアクセスし、間接的にCにアクセスします。つまり、 A -> B > Cです。
次に、マルチレベル転送の助けを借りてそれを達成することができます。ケースを見てみましょう:

ローカルマシンに最初のSSHトンネルを構築する

ssh -L 7000:localhost:3000 [email protected] -N

リモート マシン www.example.com は、自身で 2 番目の SSH トンネルを構築します。これは、自身を監視していると解釈できます。

ssh -L 3000:localhost:8000 [email protected] -N

結果は
L:7000 --> R:3000
R:3000 --> R:8000
したがって、L:7000は間接的にR:8000にアクセスできる。

6. 結論

ローカルポート転送: ローカル要求 === リモート要求 リモートポート転送: リモート要求 === ローカル要求 動的ポート転送: すべての外部要求へのローカルアクセス === すべての外部要求にアクセスするためのリモート置換

上記のポート転送タイプは、組み合わせて使用​​することができ、同じタイプに限定されません。転送を有利に活用したい場合は、実際のアプリケーションに頼る必要があります。

これまでのところ、この記事では SSH ポート転送とは何かについて説明します。何の役に立つの?この記事はこれで終わりです。SSH ポート転送に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • ブルートフォース攻撃を防ぐためのシェルスクリプト設定
  • sshとは何ですか?使い方は?どのような誤解があるのでしょうか?
  • Linux リモート管理と sshd サービス検証の知識ポイントの詳細な説明
  • Centos8環境でSSHポート番号を変更する方法
  • SSH リモート管理サービス

<<:  HTML onfocus gain focus および onblur lose focus イベントの詳細な説明

>>:  JavaScript エラー処理 try..catch...finally + は throw+TypeError+RangeError をカバーします

推薦する

MySQL ストアド プロシージャ関連の権限変更の問題

MySQL データベースを使用すると、他のユーザーが定義したストアド プロシージャを他のユーザーが変...

MySQL 数千万のビッグデータに対するSQLクエリ最適化の知識ポイントのまとめ

1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...

ミニプログラムは、カスタムのマルチレベル単一選択と複数選択を実装します

この記事では、参考のために、ミニプログラムでカスタムのマルチレベル単一選択および複数選択機能を実装す...

Mysql データベースのマスタースレーブ同期構成

目次Mysql マスタースレーブ同期構成1. 2つのmysqlをインストールする2. MySQL設定...

JavaScript コードベースをよりクリーンにする 5 つの方法

目次1. 短絡や条件文の代わりにデフォルトのパラメータを使用する2. 複数の条件の処理3. スイッチ...

CentOS7 に MySQL データベースをインストールしてデバッグする詳細な手順 [例]

この例では、デバッグ用の MySQL データベースをダウンロードしてインストールする必要があります。...

CSS3で作られたレインボーボタンスタイル

結果: 実装コード: html <div class="buttons"&...

Docker に Solr 8.6.2 をインストールし、中国語の単語セグメンターを構成する方法

1. 環境バージョンDocker バージョン 19.03.12セントロス7ソル8.6.2 2. Do...

衝突検出を実装するためのjs

この記事の例では、衝突検出を実装するためのjsの具体的なコードを参考までに共有しています。具体的な内...

InnoDB タイプの MySql によるテーブル構造とデータの復元

前提条件: データベースを復元するために必要な .frm ファイルと .ibd ファイルを保存します...

MySQLインデックスの簡単な分析

データベース インデックスは、テーブル操作の速度を向上させることを目的としたデータ構造です。高速なラ...

CSSリストのスライドにより、下部に隠れるのを防ぎ、長い画面モデルの処理に適応します。

1. モバイル端末がリストスライドを処理するとき、WeChat には下部にページに戻るボタンが組み...

Ubuntu で nginx を使用して WebDAV ファイル サーバーを構築する詳細なプロセス

nginxをインストールするnginx-fullをインストールする必要があることに注意してください。...

Centos 用の rpm パッケージのカスタマイズと yum リポジトリの構築に関するチュートリアル

1 yumでソフトウェアをインストールしたときにダウンロードしたrpmパッケージを保存しますyum ...

ReactでCSSをエレガントに書く方法

目次1. インラインスタイル2. インポート方法を使用する3.cssモジュールのエクスポート4. ス...