Raspberry Pi をポート開放不要で公開する方法Cloudflare Tunnel で外出先からアクセス可能にする手順(初心者向け)

目次

はじめに

Raspberry Pi を外出先から安全に操作したいとき、従来はルーターでポート開放をして DNS を設定しなければなりませんでした。しかし、この「ポート開放」はセキュリティリスクとなり、環境によってはそもそも不可能なこともあります。

この記事では ポート開放不要でRaspberry Pi をインターネットに公開する方法 を、Cloudflare Tunnel を用いて初心者にも手順付きで解説します。

※この記事は前回の「ラズパイをサーバー化する(固定IP・SSH鍵認証まで)」の続きです。
まだの方は 先にIP固定と鍵ログインを完了させてから 進めてください。

この記事のゴール

前回までで、あなたのラズパイは

  • LAN内(≒家の中)からはSSH接続できる
  • 鍵認証ログインになっている
  • 固定IPになっている

状態になりました。今回はここから “家の外からアクセスできるようにする” ことを行います。
最終的にこうなります

外出先スマホ
      ↓
https://pi.あなたのドメイン
      ↓
Cloudflare(防御壁)
      ↓ 安全トンネル
自宅 Raspberry Pi

ポイントはルーターのポート開放を一切しないことです。

ポート開放とは

インターネットから直接ラズパイへ入れる穴を開けるという意味です。ここが問題です。
インターネットには常にボット(自動攻撃プログラム)が存在し、公開されたポートには数分以内にアクセスが始まります。つまりポート開放とは

「世界中から直接ログインを試される状態」

を作る行為です。

Cloudflare Tunnel とは何か?(ポート開放不要の仕組み)

Cloudflare Tunnel は発想が逆です。
<普通>

外部 → 家の中へ入る

<Cloudflare Tunnel>

ラズパイ → Cloudflareへ接続 → 外部ユーザーがCloudflareへアクセス

重要なポイント:

外から家の中へは一切入ってきません。

ラズパイ側から「外に接続し続ける」ことで、安全な通信経路を維持します。これにより

  • ポート開放 不要
  • グローバルIP 不要
  • マンション回線 OK
  • テザリング回線 OK

になります。

STEP
Cloudflareにログイン

Cloudflareにログインできる状態にします
なお、ドメインを持っていることを前提に進めます。(お名前.com:https://www.onamae.com/)

ドメインとは、IPアドレス(数字の住所)を文字の名前に変えたものです。
例:`192.0.2.1` → `example.com`
こうすることで人間でも覚えやすい名前でアクセスできます。
Cloudflare Tunnel では、このドメイン名にアクセスするとCloudflareがラズパイへ中継してくれます。
つまり、ラズパイにイ”ンターネット上の名前”がつきます。

STEP
ドメインをCloudflareに登録

右上の”+add” → Enter an existing domainにドメイン名を入力。プランはFreeでOKです。

STEP
DNS取り込み後の最重要チェック

ドメインを登録すると、DNS Recordsという画面にいきます。
一覧に “mail” がある場合、必ず、DNS only(灰色の雲マーク)に変更してください
この処理をしないと、メールが届かなくなります。

STEP
ネームサーバーをCloudflareへ切替

次の画面ではCloudflareが2つのネームサーバを表示してきます。
例:

leonidas.ns.cloudflare.com
rachel.ns.cloudflare.com

ドメインを取得した会社の管理画面からドメイン設定を探してください。
わたしは、Conohaですが、既存の以下3つを削除し、上記の2つへ変更します。
ns-a1.conoha.io
ns-a2.conoha.io
ns-a3.conoha.io

この変更の反映には、30分から2時間かかることがあります。

STEP
cloudflared(トンネルソフト)をラズパイへ導入
url -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bookworm main' | sudo tee /etc/apt/sources.list.d/cloudflared.list sudo apt update sudo apt install cloudflared -y

上記をラズパイで実行します。

cloudflared --version

バージョンが表示されたら成功です。

STEP
Cloudflareとラズパイを紐づけ

ラズパイを Cloudflare アカウントと「ペアリング」します

cloudflared tunnel login

ラズパイの画面に長いURLが表示されますので、そのURLをPCのブラウザに貼ります。

Cloudflareにログインするとドメイン一覧が出ているはずです。そこで先程登録したドメインを選択し、「Authorize」

そこまで実施すると、ラズパイ側に以下の表示がでます。

You have successfully logged in.

これで、「このラズパイはあなたのドメインの一部として動作OK」という許可証がラズパイに発行されたことになります

STEP
トンネルを作成

現在は許可証があるだけですので、通路を作ります。

rasp5はサンプルです。自由に変えてください。

cloudflared tunnel create rasp5

成功すると、~/.cloudflared/xxxxxxxx.json が作られます。
このjsonファイルはトンネルの鍵です。

また、IDも発行されますので取っておきましょう

Created tunnel rasp5 with id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
STEP
現状確認

ここまでうまく言っているか確認しておきましょう。

ls ~/.cloudflared

以下の2つが出てくればOKです。Cloudflareとラズパイの専用回線は開通しています。

cert.pem      # ラズパイの身分証明書
(長いUUID).json  # トンネルの鍵


まだ外から開けることはできませんが、ドアの配線工事が完了した状態です。

STEP
公開URLを作る

URLをつくりましょう。”pi.”という文字列+取得済みのドメイン名としていますが、”pi.”の部分は任意の文字列でOKです。今回は、rasp5で許可証を作っていますので以下のようになります。

cloudflared tunnel route dns rasp5 pi.example.com
STEP
設定ファイルを作る

ラズベリーパイで設定ファイルを作ります。

nano ~/.cloudflared/config.yml

真っ黒の画面になりますので以下を登録します。

tunnel: (作成されたID) 
credentials-file: /home/ユーザー/.cloudflared/(同ID).json 
ingress:
 - hostname: pi.example.com 
  service: http://localhost:80
 - service: http_status:404
STEP
動作確認

簡単なwebサーバーで動作確認しておきましょう。

sudo apt install nginx -y

トンネルを起動。”rasp5”はご自身の名称に変更して下さい

cloudflared tunnel run rasp5

スマホのWiFiをOFFにした状態で、URLにアクセスしてみます。
・502 → トンネルは成功
・nginx画面 → 完全に成功
・接続不可 → DNS反映まち

STEP
自動起動設定

トンネルの起動を自動化しておきます。

sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
systemctl status cloudflared

これで、active(running)がでれば成功です

STEP
動作確認

ラズパイを再起動します。Wi-Fi OFFのスマホでURLが見れたら成功です。
yamlファイルが見つからない、というエラーが出た場合は以下を試してみてください

sudo mkdir -p /etc/cloudflared
sudo cp ~/.cloudflared/config.yml /etc/cloudflared/config.yml
sudo cp ~/.cloudflared/*.json /etc/cloudflared/
sudo cp ~/.cloudflared/cert.pem /etc/cloudflared/

再インストールしてみます。STEP12をもう一度やってみてください

セキュリティの整理

今回の公開は「丸見え」ではありませんので、非常に安全です。

インターネット
    ↓
Cloudflare(防御)
    ↓
安全トンネル
    ↓
ラズパイ

外部からは

  • 自宅IPが分からない
  • ルーターに触れない
  • SSHポートに到達不可

つまり公開されているのはラズパイではなく受付窓口だけです。

ここまででできること

これでラズパイは

  • 外出先からアクセス可能
  • セキュア通信(HTTPS)
  • ポート開放なし

常時稼働サーバー になりました。

  • センサー監視
  • 監視カメラ
  • 自宅クラウド
  • IoTゲートウェイ
  • 仮設サーバー(農業・屋外設置)

当然、テザリング回線でも動作します。

まとめ

前回:ラズパイをサーバーとして整備
今回:安全にインターネット公開

  • 自宅にサーバーを置き
  • 世界からアクセスでき
  • しかし攻撃は受けにくい

という「個人クラウド基盤」を手に入れました。さあ、使い倒しましょう!!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次