Linux
 Computer >> コンピューター >  >> システム >> Linux

リバースSSHトンネルでPCへの外部接続を可能にする方法【VPS活用ガイド】

リバースSSHトンネルでPCへの外部接続を可能にする方法【VPS活用ガイド】

インターネットサービスプロバイダー(ISP)から専用のグローバルIPアドレスが割り当てられているなら、ルーターにポート転送の設定を追加するだけで、自宅サーバーをインターネット上に公開できます。しかし、ISPがIPアドレスを近隣の利用者と共有している場合(CGNAT環境)、ポートフォワーディングでは対応できません。さらに、ファイアウォール設定で外部からの着信接続をブロックしているプロバイダーもあります。

こうした制限は、仮想プライベートサーバー(VPS)を活用することで回避できます。VPSはネットワークトラフィックの中継だけを行えばよいため、RAMが512MB未満の低スペックなプランでも十分機能します。CPUやメモリへの負荷も非常に軽く、月額5ドル未満で利用できるケースがほとんどです。VPSが外部からの接続を受け付け、それを「リバースSSHトンネル」と呼ばれる仕組みで自分のPCへ転送します。これにより、わずかな月額費用であらゆる種類のホームサーバーを構築できます。

例えば、Nextcloudサーバーを作ってファイルのアップロードや同期を行うとしましょう。ファイルを自宅サーバーに置くことでプライバシーが守られ、6TBのハードディスクを購入すれば容量の心配もありません。支払うのは毎月の電気代とVPS利用料だけ。6TBのストレージ付きレンタルサーバーの月額料金と比べれば、はるかに安価に抑えられます。

注意: この方法で転送できるのはTCPトラフィックのみです。TCPはWebサーバー(80/tcp)などで使われています。一方、UDPは一部(すべてではありません)のゲームサーバー、例えばCounter Strike(27015/UDP)などで使用されます。UDPのトンネリングも「裏技」的な手法を使えば不可能ではありませんが、それは今後のチュートリアルで扱うかもしれません。

Windows 10には標準のSSHクライアントが搭載されている

SSH接続を開始するために、もはやPuTTYを使う必要はありません。実際、このチュートリアルでも、トンネルの構築にはWindows 10に内蔵されたOpenSSHクライアントを使用します。使い方に慣れていない方は、先にWindows 10のOpenSSHクライアントに関するチュートリアルを読んでおきましょう。

接続を中継するためのVPSを準備する

DigitalOcean、Linode、Vultrなど、お好みのプロバイダーでVPSを作成します。最も重要なのは、ネットワーク遅延を最小限に抑えるため、できるだけ自分に近い場所にあるサーバーロケーションを選ぶことです。また、rootアカウントに直接ログインできるようサーバーをセットアップしておきましょう。可能であれば、より安全なSSH鍵認証を使用するのがおすすめです。1024番未満のポート(特権ポート)で接続を待ち受けるには、root権限が必要になります。

コマンドプロンプト(Linuxの場合はターミナル)を開き、SSHでサーバーにログインします。

OpenSSHサーバーの設定を編集します:

nano /etc/ssh/sshd_config

rootではなく一般ユーザーとしてログインした場合は、次のコマンドを使わないとファイルを保存できません:

sudo nano /etc/ssh/sshd_config

下にスクロールして「GatewayPorts」という変数を探します。#GatewayPorts no のような行があるはずです。行頭の「#」を削除してコメントを解除し、GatewayPorts yes に変更します。

リバースSSHトンネルでPCへの外部接続を可能にする方法【VPS活用ガイド】

該当する行が見つからない場合は、ファイルの末尾までスクロールして、自分で次の行を追加してください:

GatewayPorts yes

Ctrl + X を押し、次に y、最後にEnterキーを押してファイルを保存します。

新しい設定を反映させるため、SSHデーモンをリロードします。

systemctl reload ssh.service

SSHセッションから抜けます。

exit

リバースSSHトンネルの構築方法

コマンドのパラメーターは、Linux、Windows、さらにはBSD系OSでも共通です。一般的な構文は次のとおりです:

ssh -R remote_port:host:localport your_username@IP-of-server
  • remote_port: サーバーがそのポート宛てに受け取った接続を転送することを指示します。
  • host: 接続の転送先となるIPアドレスを指定します。ここでは自分のPCへ転送するため、127.0.0.1 を使用します。
  • localport: データパケットの転送先ポートを指定します。ローカルPC上でアプリケーションが待ち受けているポート番号を指定してください。

例えば、サーバーの80番ポートに届いたすべての接続を、ローカルPCの8080番ポートへ転送するコマンドは次のとおりです:

ssh -R 80:127.0.0.1:8080 root@203.0.113.1

これは、ApacheやNginxなどのWebサーバーがローカルマシンの8080番ポートで待ち受けていることを前提としています。ただし、Apache/Nginxがデフォルトの80番ポートで待ち受けている場合でも問題ありません。同じコマンド内でポート番号「80」が2回登場しても、それぞれ別のサーバー(VPS側とローカル側)のポートを指しているためです。

ssh -R 80:127.0.0.1:80 root@203.0.113.1

この状態で、誰かがブラウザーのアドレスバーにVPSのIPアドレスを入力すると、その接続は転送され、あなたのローカルPCが応答を返すことになります。

リバースSSHトンネルでPCへの外部接続を可能にする方法【VPS活用ガイド】

上の画像では、デフォルトで8887番ポートを待ち受けるChrome用のシンプルなWebサーバーアプリを使用しています。アプリをインストールして、画像のようにコマンドを実行すれば、この構成を自分でも試せます。

なお、トンネルを維持するにはSSHセッションをアクティブなまま保つ必要があります。トンネルを閉じるには、ターミナルまたはコマンドプロンプトのウィンドウで exit と入力します。

まとめ

ご覧のとおり、リバースSSHトンネルの作成自体は難しくありません。難しいのはむしろWebサイトのセキュリティ確保です。そのため、ローカルNextcloudサーバーのような仕組みを公開する場合は、少なくとも仮想マシン内に隔離して運用することをおすすめします。万が一サイトが侵害されても、OSの他の部分は無事で済みます。

そして忘れずに…失いたくないデータは、必ずバックアップを取りましょう!

  1. PCでTelegramを使う方法|デスクトップアプリとWeb版の導入手順を徹底解説

    Telegramは、プライベートメッセージングの世界において、堅牢なセキュリティを誇る数少ないアプリの一つとして高い評価を得ています。電話番号ではなくユーザー名で新しい相手とつながれる仕組みを採用しているため、プライバシーを重視するユーザーの間で人気の選択肢となっています。あらゆる安全な通信の決定打というわけではありませんが、自分のやり取りを目立たない状態に保つうえで大きな助けになります。 ユーザー数が着実に増え続ける中、その一部がPCからTelegramへアクセスしたいと考えるのは自然な流れです。幸い、他の人気メッセージングアプリと同様に、TelegramもPCにインストールして快適に利用で

  2. SSHサーバーを使って動かなくなったWindows PCにアクセス・復旧させる方法

    システムが突然クラッシュし、どんなコマンドにも応答しなくなることは珍しくありません。さらに困るのは、大事なファイルにアクセスしたいのにPCがまったく動かせない状態になってしまったときです。しかし、心配はいりません。SSHサーバーを活用すれば、不具合を起こしたWindows PCにもアクセスでき、事態を打開できる可能性があります。まずは、SSHについて簡単におさらいしておきましょう。SSHサーバーとは?SSH(Secure Shell)は、安全性の確保されていないネットワーク上でも、ネットワークサービスを安全に操作できるように設計された暗号化通信プロトコルです。代表的な用途としては、別のコンピュ