GCP を中継サーバーとして Raspberry Pi を公開する(失敗)

Raspberry Pi を自宅サーバーとして公開することに挑戦してみた。Google Cloud Platform(GCP)を中継サーバーとして使う。

環境:Raspberry Pi Zero W(Jessie)、Raspberry Pi OS Jessie、GCP(Ubuntu; Ubuntu 16.04 LTS、fi-micro、us-west1 Region)

(0)Raspberry Pi をセットアップし、使える状態にする。GCP は Pleroma 用にセットアップしたものをそのまま使う。

GCP で Pleroma をスタートアップスクリプトで構築する(失敗) – with a Christian Wife
https://wacw.cf/2021/05/24/gcp-pleroma-with-a-startup-script/

(1)Raspberry Pi で .ssh フォルダを作成、公開鍵を登録する。途中ファイル名を聞かれるので forward_server_key とし、次に聞かれるパスフレーズは空欄にした。

pi@raspberrypi $ mkdir .ssh
pi@raspberrypi $ cd ~/.ssh
pi@raspberrypi $ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/pi/.ssh/id_ed25519): forward_server_key
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
[いろいろ表示される]

これで、.ssh フォルダ内に、秘密鍵の forward_server_key と公開鍵の forward_server_key.pub が生成される。

(2)forward_server_key.pub を開き、中身のテキストをコピー。

pi@raspberrypi $ sudo nano forward_server_key.pub

(3)Google Cloud Platform で「COMPUTE>Compute Engine>VM instances」で作成済みのインスタンス名をクリック。トップの EDIT ボタンをクリック。

“You have 0 SSH keys” の下の “Show and edit” をクリック。2のテキストをペースト。“Save” をクリック。

(4)Raspberry Pi から GCP インスタンスへ SSH 接続してみる。

pi@raspberrypi $ ssh -i ~/.ssh/forward_server_key [GCP インスタンスの外部 IP アドレス]

これでログインできた。

(5)このまま GCP でポートフォワードの許可をしよう。

$ sudo nano /etc/ssh/sshd_config

以下のように変更。項目がなければ追記する。保存。

GatewayPorts yes

SSH サーバーを再起動。

$ sudo systemctl restart sshd.service<

ログアウトして Raspberry Pi に戻ろう。

$ exit

(6)テスト用に以下のコマンドで Raspberry Pi に簡易ウェブサーバーを立ち上げよう。

$ python3 -m http.server [ポート番号]

ポート番号を指定しなければ、8000 番ポートとなるので、今回は 8000 番ポートということにしよう。

これで http://[Raspberry Pi のアドレス]:8000 にブラウザでアクセスできるようになる。これを全世界に公開してみる。

(7)ルーターで Raspberry Pi の 8000 ポートを解放する。Raspberry Pi の IP アドレスも固定しておいたほうがいいだろう。

(8)私は Mac から操作をしているが、6の簡易ウェブサーバーの立ち上げで Terminal を使用中だ。なので、Terminal の新規ウィンドウを開き、新規に Raspberry Pi に SSH 接続する。

以下のコマンドで、Raspberry Pi の 8000 番ポートを GCP のポートフォワードする。

pi@raspberrypi $ ssh -i ~/.ssh/forward_server_key -T -N -g -R 8000:localhost:22 [GCP インスタンスの外部 IP アドレス]

これで以下のアドレスにクライアント・マシンからアクセスできるはずなのに、なぜか接続できない。

http://[GCP インスタンスの外部 IP アドレス]:8000

参考:
VPSを経由して安全に自宅サーバを公開する – Qiita
https://qiita.com/fealone/items/98d7bdc940e57cfc1555

自宅のRaspberry Piに外出先からアクセスする~中継サーバーを使おう – みかんのゆるふわ技術ブログ
https://www.mikan-tech.net/entry/2020/05/01/170819

SSHと踏み台サーバーを用いてサーバーを立てるのが困難な場所にVPNサーバーを立てる – Qiita
https://qiita.com/hiro2do/items/d8d0317447eb81e70151

GCPにUbuntuサーバを構築 : TerminalからのSSH接続+GUI接続設定編 – Qiita
https://qiita.com/Q-Yeah/items/362b71393f763e37397a

Raspberry Piに公開鍵認証を使ってssh接続する│ツール・ラボ
https://tool-lab.com/raspi-key-authentication-over-ssh/

SSH は (RSA 鍵より) ED25519 鍵の方が強固で速い – らくがきちょう
https://sig9.hatenablog.com/entry/2020/01/11/000000

GCPに自分のPCからssh接続する方法[秘密鍵/公開鍵] | Darablog
https://dara-blog.com/conect-ssh-gcp

Python3 : 簡易 WEB サーバーを立ち上げる | R-Y-O の IT 備忘録 Ver.2.0
https://raspi.ryo.sc/python3-simple-webserver/

Pythonの標準モジュールを使って、コマンドラインからHTTPサーバーを起動する – CLOVER
https://kazuhira-r.hatenablog.com/entry/20180828/1535479659