LinuxでSSHトンネリングまたはポート転送を作成する方法


SSHトンネリング(SSHポート転送とも呼ばれます)は、単にローカルネットワークトラフィックをSSH経由でリモートホストにルーティングすることです。これは、すべての接続が暗号化を使用して保護されていることを意味します。インターネットのような安全でない公衆網を介してプライベートネットワークに接続するのに便利な、基本的な VPN 仮想プライベートネットワーク)を簡単に設定する方法を提供します。

ngrokで実装されているように、NATやファイアウォールの背後にあるローカルサーバーを安全なトンネルを介してインターネットに公開するのにも使用されるかもしれません。

ある[ SSH のセッションはデフォルトでトンネリングネットワーク接続を許可し、SSHポート転送の3種類があります:ローカルリモート動的 >ポート転送

この記事では、LinuxでSSHトンネリングまたはさまざまなタイプのポート転送を素早く簡単にセットアップする方法を説明します。

この記事の目的のために、以下の設定を使用しています。

  1. Local Host: 192.168.43.31
  2. Remote Host: Linode CentOS 7 VPS with hostname server1.example.com.

通常は、次のようにSSHを使用してリモートサーバーに安全に接続できます。この例では、ローカルホストとリモートホストの間でパスワードなしのSSHログインを設定しているので、ユーザーadminのパスワードは要求されません。

$ ssh [email protected]  

ローカルSSHポート転送

この種類のポート転送を使用すると、ローカルコンピュータからリモートサーバーに接続できます。制限されたファイアウォールの内側にいるか、発信ファイアウォールによってリモートサーバーのポート 3000 で実行されているアプリケーションへのアクセスがブロックされているとします。

ローカルポート(例: 8080 )を転送すると、次のようにしてアプリケーションにローカルでアクセスできます。 -L フラグはリモートホストに転送されるポートとリモートポートを定義します。

$ ssh [email protected] -L 8080: server1.example.com:3000

-N フラグを追加することはリモートコマンドを実行しないことを意味します、この場合シェルは得られません。

$ ssh -N [email protected] -L 8080: server1.example.com:3000

-f スイッチはsshにバックグラウンドで実行するように指示します。

$ ssh -f -N [email protected] -L 8080: server1.example.com:3000

ローカルコンピュータでブラウザを開き、アドレス server1.example.com:3000 を使用してリモートアプリケーションにアクセスするのではなく、単に localhost:8080 を使用するか、下のスクリーンショットに示すように、 192.168.43.31:8080

リモートSSHポート転送

リモートポート転送を使用すると、リモートマシンからローカルコンピュータに接続できます。デフォルトでは、SSHはリモートポート転送を許可しません。リモートホストのSSHDメイン設定ファイル/etc/ssh/sshd_config GatewayPorts ディレクティブを使用してこれを有効にできます。

お気に入りのコマンドラインエディタを使用してファイルを編集用に開きます。

$ sudo vim /etc/ssh/sshd_config 

スクリーンショットに示すように、必要なディレクティブを探し、コメント解除して、その値を yes に設定します。

GatewayPorts yes

変更を保存して終了します。次に、最近行った変更を適用するためにsshdを再起動する必要があります。

$ sudo systemctl restart sshd
OR
$ sudo service sshd restart 

次に次のコマンドを実行して、リモートコンピュータのポート 5000 をローカルコンピュータのポート 3000 に転送します。

$ ssh -f -N [email protected] -R 5000:localhost:3000

このトンネリング方法を理解したら、ローカル開発サーバーを、特にNATやファイアウォールの後ろで安全なトンネルを介してインターネットに簡単かつ安全に公開できます。 Ngrok、 pagekite localtunnel 、その他多くのトンネルも同様に機能します。

動的SSHポート転送

これは3番目のタイプのポート転送です。単一のポートとの通信を許可するローカルリモートのポート転送とは異なり、さまざまなポートでTCP通信を使用できます。動的ポート転送では、デフォルトでポートを 1080 にリッスンする SOCKSプロキシサーバーとしてマシンを設定します。

初心者にとって、 SOCKS は、クライアントがプロキシサーバー(この場合はSSH)を介してサーバーに接続する方法を定義するインターネットプロトコルです。動的ポート転送を有効にするには、 -D オプションを使用します。

次のコマンドは、ポート 1080 でSOCKSプロキシを起動し、リモートホストに接続できるようにします。

$ ssh -f -N -D 1080 [email protected]

これからは、自分のマシン上のアプリケーションがこのSSHプロキシサーバーを使用するように設定し、それを使用するように設定してリモートサーバーに接続することができます。 SSHセッションを閉じると、 SOCKS プロキシは機能しなくなります。

この記事では、安全なSSH接続を介してトラフィックをトンネリングするための、あるマシンから別のマシンへのさまざまなタイプのポート転送について説明しました。これはSSHの非常に多くの用途の1つです。下記のフィードバックフォームからこのガイドにあなたの声を追加することができます。