はじめに
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
になります。
Cloudflareにログインできる状態にします
なお、ドメインを持っていることを前提に進めます。(お名前.com:https://www.onamae.com/)
ドメインとは、IPアドレス(数字の住所)を文字の名前に変えたものです。
例:`192.0.2.1` → `example.com`
こうすることで人間でも覚えやすい名前でアクセスできます。
Cloudflare Tunnel では、このドメイン名にアクセスするとCloudflareがラズパイへ中継してくれます。
つまり、ラズパイにイ”ンターネット上の名前”がつきます。
右上の”+add” → Enter an existing domainにドメイン名を入力。プランはFreeでOKです。
ドメインを登録すると、DNS Recordsという画面にいきます。
一覧に “mail” がある場合、必ず、DNS only(灰色の雲マーク)に変更してください。
この処理をしないと、メールが届かなくなります。
次の画面では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時間かかることがあります。
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バージョンが表示されたら成功です。
ラズパイを Cloudflare アカウントと「ペアリング」します
cloudflared tunnel loginラズパイの画面に長いURLが表示されますので、そのURLをPCのブラウザに貼ります。
Cloudflareにログインするとドメイン一覧が出ているはずです。そこで先程登録したドメインを選択し、「Authorize」
そこまで実施すると、ラズパイ側に以下の表示がでます。
You have successfully logged in.これで、「このラズパイはあなたのドメインの一部として動作OK」という許可証がラズパイに発行されたことになります
現在は許可証があるだけですので、通路を作ります。
rasp5はサンプルです。自由に変えてください。
cloudflared tunnel create rasp5成功すると、~/.cloudflared/xxxxxxxx.json が作られます。
このjsonファイルはトンネルの鍵です。
また、IDも発行されますので取っておきましょう。
Created tunnel rasp5 with id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxここまでうまく言っているか確認しておきましょう。
ls ~/.cloudflared以下の2つが出てくればOKです。Cloudflareとラズパイの専用回線は開通しています。
cert.pem # ラズパイの身分証明書
(長いUUID).json # トンネルの鍵
まだ外から開けることはできませんが、ドアの配線工事が完了した状態です。
URLをつくりましょう。”pi.”という文字列+取得済みのドメイン名としていますが、”pi.”の部分は任意の文字列でOKです。今回は、rasp5で許可証を作っていますので以下のようになります。
cloudflared tunnel route dns rasp5 pi.example.comラズベリーパイで設定ファイルを作ります。
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簡単なwebサーバーで動作確認しておきましょう。
sudo apt install nginx -yトンネルを起動。”rasp5”はご自身の名称に変更して下さい
cloudflared tunnel run rasp5スマホのWiFiをOFFにした状態で、URLにアクセスしてみます。
・502 → トンネルは成功
・nginx画面 → 完全に成功
・接続不可 → DNS反映まち
トンネルの起動を自動化しておきます。
sudo cloudflared service installsudo systemctl enable cloudflared
sudo systemctl start cloudflaredsystemctl status cloudflaredこれで、active(running)がでれば成功です
ラズパイを再起動します。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ゲートウェイ
- 仮設サーバー(農業・屋外設置)
当然、テザリング回線でも動作します。
まとめ
前回:ラズパイをサーバーとして整備
今回:安全にインターネット公開
- 自宅にサーバーを置き
- 世界からアクセスでき
- しかし攻撃は受けにくい
という「個人クラウド基盤」を手に入れました。さあ、使い倒しましょう!!
コメント