技術共有

【サーバー】ポートマッピング

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina



1. ポートマッピングの概念

ポート マッピング (ポート フォワーディングとも呼ばれる) は、データ フローを 1 つのネットワーク ポートから別のネットワーク ポートにリダイレクトするテクノロジーです。これは通常、ファイアウォールまたはルーターの背後で実行されるサービスに使用され、外部デバイスが内部ネットワーク内の特定のサービスにアクセスできるようにします。ポート マッピングは、SSH などのプロトコルを使用して、ローカル ネットワーク内またはネットワーク全体で実行できます。

1.1 ポートマッピングの種類

  1. ローカルポートフォワーディング

    • ローカル コンピューターのポートをリモート サーバーのポートにマップします。
    • 例: ローカルポートの変更8080リモートサーバーにマッピングされる80ポートをローカルに渡すことができるようにするlocalhost:8080リモートサーバーのWebサービスにアクセスします。
  2. リモートポートフォワーディング

    • リモート サーバーのポートをローカル コンピューターのポートにマップします。
    • 例: リモートサーバーの追加2222ローカルコンピュータへのポートマッピング22ポートを使用して、ローカル コンピュータの SSH サービスにリモート サーバー経由でアクセスできるようにします。
  3. 動的ポート転送

    • 複数のリモート サーバーのポートに動的にアクセスできる SOCKS プロキシを作成します。
    • 例: ブラウザがプロキシ経由で複数のリモート サーバー Web サイトにアクセスできるようにする SOCKS プロキシを作成します。

1.2 ポートマッピングの適用シナリオ

  1. 内部サービスへのリモート アクセス: ポート マッピングを通じて、Web サーバーやデータベース サーバーなどの外部ネットワークから企業内またはホーム ネットワーク内の特定のサービスにアクセスできます。

  2. ファイアウォールを突破する: ポート マッピングを通じて、ファイアウォールの制限をバイパスし、ファイアウォールによってブロックされているサービスにアクセスできます。

  3. セキュリティの向上: SSH トンネルを介したポート マッピングにより、データ送信を暗号化し、セキュリティを向上させることができます。

  4. 負荷分散とプロキシ: ロード バランサーとプロキシ サーバーは、サービスの信頼性とパフォーマンスを向上させるために、ポート マッピング テクノロジを使用してトラフィックを分散および転送することがよくあります。

1.3 例

リモート サーバー上で実行されている Web サービスがあり、それがリッスンするポートが80 。ローカル コンピューターからこのサービスにアクセスするには、次の SSH コマンドを使用してローカル ポート マッピングを作成します。

ssh -L 8080:localhost:80 user@remote-server
  • 1

このコマンドはローカル コンピュータの8080リモートサーバーへのポートマッピング80ポート。次に、ローカルブラウザでアクセスしてくださいhttp://localhost:8080これは、リモート サーバーの Web サービスにアクセスすることと同じです。

2. ポート マッピングを実行する必要があるのはなぜですか?

開発中にポート マッピング (またはポート フォワーディング) を行う主な理由はいくつかあります。

  1. 保護されたサービスにアクセスする: 開発マシン上の一部のサービスはローカルホストでのみリッスンする場合があります (127.0.0.1 ) となり、外部から直接アクセスすることはできません。ポート マッピングを通じて、これらのサービスを公開し、外部からアクセスできるようにすることができます。

  2. 安全性 : SSH トンネルを介したポート転送により、サービスを直接公開することなく内部サービスに安全にアクセスできます。 SSH トンネルは、セキュリティを強化するためにデータ送信を暗号化します。

  3. デバッグが簡単 : 開発プロセス中、開発者は開発マシン上で実行されている複数のサービスにアクセスする必要がある場合があります。ポート マッピングを使用すると、毎回開発マシンにログインすることなく、これらのサービスにローカルから直接アクセスできます。

  4. ファイアウォールまたはネットワーク制限をバイパスする注:一部のネットワーク環境では、開発マシン上のサービスへの直接アクセスを妨げるファイアウォールまたはネットワーク制限がある場合があります。 SSH トンネリングを通じて、これらの制限を回避し、サービスへのアクセスを実現できます。

  5. 複数のユーザーによるアクセス: 複数の開発者が同じサービスにアクセスする必要がある場合、ポート マッピングにより、各開発者は開発マシンに直接ログインすることなく、自分のローカル環境でサービスにアクセスできます。

例えば:

開発マシン上で Jupyter Notebook サーバーが実行されているとします。このサーバーはポート 7860 でリッスンしますが、ローカル アクセスのみを許可します。次の SSH コマンドを使用して、開発マシンの 7860 ポートをローカル 7860 ポートにマッピングできます。

ssh -p 37367 [email protected] -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
  • 1

こうすることで、ローカルブラウザでアクセスできるようになります。 http://127.0.0.1:7860 開発マシン上の Jupyter Notebook サーバーを表示して使用します。

3.原則

3.1 [日常語] 原理の説明

開発マシンには独自の公開ポートそしてパブリックIP、ローカル ssh 接続に使用できます

しかし、開発マシン、つまりサーバーでは、プログラムを実行するそのプログラムがサーバー上にあるとき特定のポートで進行中

したがって、サーバー上のプログラムの実行効果をローカルで確認したい場合は、次のように作成する必要があります。ポートマッピング、ブラウザがローカル ポートを開くと、それを表示するためにサーバーのポートに転送します。

3.2 概略図

ここに画像の説明を挿入します

4.コード

ssh -p 37367 [email protected] -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
  • 1

例えば:

ssh -p 37367 [email protected] -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
  • 1

このコマンドは、SSH トンネルを作成するために使用されます。以下に各部分の詳細な説明を示します。

  • ssh: SSH 接続を開始するために使用されるコマンド。
  • -p 37367: 接続するリモートホストのポート番号を指定します(この例ではポート37367)。
  • [email protected]: ユーザー名 (root) とホスト名 (ssh.intern-ai.org.cn)。
  • -CNg: オプションの組み合わせ:
    • -C: 圧縮を有効にします。
    • -N: SSH にリモート コマンドを実行せず、ポート転送のみを実行するように指示します。
    • -g: リモート ホストが転送されたポートに接続できるようにします。
  • -L 7860:127.0.0.1:7860: ローカル ポート フォワーディングを実行し、ローカル マシンのポート 7860 をリモート ホストの 127.0.0.1 のポート 7860 にマップします。
  • -o StrictHostKeyChecking=no: ホスト キーのチェックを無効にします。これにより、初めて接続するときに対話型プロンプトが表示されなくなります。

要約すると、このコマンドはローカル マシンとリモート ホストの間に SSH トンネルを作成し、ローカル ポート 7860 をリモート ホストのポート 7860 に転送します。リモート コマンドの実行やホスト キーのチェックは行いません。

以下に示すように:
ポート マッピングの後、サーバーのポート 7860 で実行されているプログラムが表示されます。
ここに画像の説明を挿入します