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 をカバーします

推薦する

ツールキット: Bootstrap よりも強力なフロントエンド フレームワーク

注: 現在、最も人気のフロントエンド フレームワークは Bootstrap と Foundation...

Docker での MySQL 8.0.20 のインストールと設定のチュートリアル

Dockerは参考までにMySQLバージョン8.0.20をインストールします。具体的な内容は以下のと...

Linux SSHポートを転送する3つの方法

ssh は私が最も頻繁に使用する 2 つのコマンドライン ツールのうちの 1 つです (もう 1 つ...

Facebook によるインターネット サービスのほぼ完璧な再設計

<br />出典: http://www.a-xuan.cn/?p=197 先ほどFac...

MySQL 8.0 エラー サーバーがクライアントに不明な認証方法を要求しました 解決策

最新バージョンのMySQL 8.0.11をインストールした後、ユーザーを作成して認証します。認証され...

vue3 学習ノートにおける axios の使用の変更の概要

目次1. axioの基本的な使い方2. クロスドメインの問題を解決するには? 3. パッケージ4. ...

Docker で Node プロジェクトをビルドしてデプロイする方法

目次DockerとはクライアントサイドDocker基本的なDocker操作画像名画像をプルするその他...

Vue のプロダクション環境と開発環境を切り替えてフィルターを使用する方法

目次1. 本番環境と開発環境を切り替える最初の方法: .envファイルを設定する2番目の方法2. フ...

IDEA は MySQL への接続時にエラーを報告します。サーバーが無効なタイムゾーンを返します。タブに移動して serverTimezone プロパティを設定してください。

これからの道は常に困難で、棘だらけです。歯を食いしばって、乗り越えられると信じてください。さあ、さあ...

Windows に Docker と docker-compose スイートをインストールするための詳細なチュートリアル

目次導入ダウンロードしてインストールする設定docker-composeをインストールする導入Doc...

ファイルをアップロードするときに enctype フィールドを使用する理由は何ですか?

FORM 要素の enctype 属性は、フォーム データがサーバーに送信されるときに使用されるエン...

MySQLのorder byとlimitを混在させる際の落とし穴の詳細な説明

MySQL では、ソートには order by を、ページングには limit をよく使用します。最...

Vue3 setup() の高度な使用例の詳細な説明

目次1. オプションAPIと組み合わせAPIの違い2. セットアップを具体的にどのように使用するので...

Raspberry Pi msmtp と mutt のインストールと設定のチュートリアル

1. muttをインストールするsudo apt-get install mutt 2. msmtp...

MySQL のレイテンシ問題とデータフラッシュ戦略プロセスの分析

目次1. MySQLレプリケーションプロセス2. MySQLの遅延問題の分析3. プロモーション期間...