1. Home
  2. /
  3. ネットワーク
  4. /
  5. Cloudflare Tunnelを使って自宅サーバーをポート開放せずに公開する

Cloudflare Tunnelを使って自宅サーバーをポート開放せずに公開する

Cloudflare Tunnelを使って自宅サーバーをポート開放せずに公開する

自宅サーバーを立てていると、外部からアクセスしたい時にポート開放が必要になります。しかし、ポート開放はセキュリティ上のリスクがあるため、できるだけ避けたいものです。そこで、Cloudflare Tunnelを使って自宅サーバーをポート開放せずに公開する方法を紹介します。

今回公開するもの

今回はMinecraftサーバーのDynmapを公開します。

DynmapとはMinecraftサーバーのプラグインでゲームのワールドデータをWebブラウザで閲覧できるようにするものです。ワールドデータを手軽に俯瞰してみることができますのでMinecraftサーバーを運用する方はまず入れることが多いプラグインです。

MinecraftサーバーにDynmapのプラグインを入れると、ポート番号8123でWebサーバーが立ち上がります。これをCloudflare Tunnelを使って公開します。

また同じファミリー製品であるCloudflare Accessを使って、特定のユーザーのみアクセスできるようにします。

Cloudflare Tunnelとは

Cloudflare Tunnel · Cloudflare Zero Trust docs

Cloudflare Tunnel provides you with a secure way to connect your resources to Cloudflare without a publicly routable IP address. With Tunnel, you do not send traffic to an external IP — instead, a lightweight daemon in your infrastructure (cloudflared) creates outbound-only connections to Cloudflare's global network. Cloudflare Tunnel can connect HTTP web servers, SSH servers, remote desktops, and other protocols safely to Cloudflare. This way, your origins can serve traffic through Cloudflare without being vulnerable to attacks that bypass Cloudflare.

Cloudflare Tunnelは、Cloudflareのネットワークを使って自宅サーバーを公開するためのサービスです。自宅サーバーにCloudflareと接続するためのデーモンをインストールし、Cloudflareのネットワークを経由してサーバーにアクセスできるようになります。またポート開放をせずに済むという特徴からグローバルIPがないマンション共有回線やCATV回線などでもサーバー公開が可能になります。

アクセスの入り口はCloudflareさんなのでDDoS攻撃やセキュリティ上のリスクなどはある程度良い感じに対応してもらえます。素朴に家のルーターをポート開放する場合と比べると格段にセキュリティが向上します。

Cloudflare TunnelはCloudflare Zero Trustファミリーの1サービスです。Cloudflare Zero TrustはFree Planが非常に充実しており、個人利用範囲内であれば無料で利用できます。

Cloudflare Tunnelの設定

Cloudflareのアカウントを所持していて、DNSの利用をしている前提で話を進めていきます。例ではこのブログと同じドメインであるynr.jpを利用しています。

Cloudflareの管理コンソールにログインして、Zero Trust > ネットワーク > Tunnels に遷移します。

「トンネルを作成する」ボタンで遷移してトンネルの種類で「Cloudflared」を選択してください。

Cloudflaredをインストールする環境を選択してセットアップします。Linux環境であればDockerを利用するのが一番楽だと思います。コマンド一発で終わりますし、アップデート作業も楽です。

接続が完了したらどのURLとポートに通信を転送するかの設定を行います。接続完了後に自動遷移した記憶ですが、Tunnels画面で設定したいトンネルの右端…から「設定」でも追加できます。

「パブリック ホスト名を追加する」から設定に入れます。パブリックホスト名が外部からアクセスするURLになります。この場合は「minecraft-map.ynr.jp」にアクセスするとDynmapが表示されるようになります。

サービスにはDynmapが立ち上がっているURLとポート番号を指定します。この場合は「http://192.168.11.5:8123」です。先ほどCloudflaredをインストールしたサーバーからこのURLがアクセス可能かどうか確認してから登録してください。

この設定で「ホストを保存」すると、自宅外でも先ほど設定したホスト名でDynmapにアクセスできるようになります。

Cloudflare Tunnelの良いところはHTTPSの証明書関連も自動でよしなに行ってくれるところです。Dynmapを宅内でアクセスするときはサービス登録したとおりHTTPでのアクセスですが、外部公開のアドレスはHTTPSでアクセスできます。

証明書更新作業等もすべて自動で行われます。

Cloudflare Accessでアクセス制限

不特定多数に公開するのであればこのままでも良いですが、このDynmapは特定のユーザーのみアクセスできるようにしたいと思います(このMinecraftサーバーが友人と遊ぶ用のクローズドサーバーなので)。

Cloudflare Accessを使うと非常に簡単にGoogleログイン等でのアクセス制限をつけることができます。今回はGoogleアカウントでアクセス制限をつけてみます。

Tunnelと同じくZero TrustにあるAccessに遷移してアプリケーションから「アプリケーションを追加する」を選択します。

アプリケーションの種類は「セルフホスト」を選択します。

アプリケーション名は任意の分かりやすい名前を設定します。セッション時間は再ログインが必要になるまでの時間です。今回Dynmapのようにセキュリティ強度が必要ではない場合は1ヶ月等にした方が利便性は良いと思います。

パブリックホスト名は先ほどTunnelで設定した物と同じです。例では「minecraft-map.ynr.jp」

Accessポリシーでポリシーを作成もしくは既存ポリシーを選択します。このポリシーでログインできるユーザーを定義します。ポリシー名は任意の名前を設定します。「ルールを追加」の部分でセレクターを「Emails」にしてログインするユーザーのgmailアドレスを指定します(複数可)。

もし、Google Workspaceを利用していてGoogle Groupを構築しているのであれば、セレクターを「Google Group」にして値をグループメールアドレスにすることでGoogleグループに所属しているかどうかで制御可能になります。

ログイン方法を選択します。「利用可能なすべてのプロバイダーを受け入れる」のチェックを外してGoogleやGoogle WorkspaceのみにすることでGoogleログインのみに制限できます。

仮にGoogle以外のどのメールアドレスでもログインを受け入れたい場合はOne-time PINを選択することでメールにワンタイムコードが送信されてそのコードでログインするといった事も可能です。

個人的なオススメとしてはログイン手法は1つのみにして「インスタント認証」を有効にすることでシームレスにGoogleログイン画面に遷移できるのでおすすめです。

Googleログインなどが表示されていない場合は「ログイン方法を追加」から任意のログイン手法を追加できます。

その他設定はデフォルトのままで「保存」を押します。

保存後先ほど設定したパブリックホスト名、今回の例では「minecraft-map.ynr.jp」にアクセスするとCloudflare Accessのサインイン画面に遷移します。

Googleを選択すると見慣れたいつものGoogleログイン画面、「インスタント認証」を有効にしている場合は初手この画面に遷移しますのでログインすることでページが見られるようになると思います。

Cloudflare Tunnel設定時にアクセス制限を行う

Cloudflare Tunnelを作成してからAccessの設定を行うという順番でしたが、この順番だとAccessの設定を行っている間は無防備にアクセスが可能になってしまいます。

その対策としてCloudflare Tunnelの設定時にアクセス制限を行うことができます。

Cloudflare Tunnelの設定画面でパブリックホスト名を設定する際に「その他のアプリケーション設定」から「Accessによる保護」を有効化してホスト名を保存します。

この状態ではパブリックホスト名にアクセスしてもサイトにアクセスすることはできません。その間に安心してCloudflare Accessの設定を行えます。

注意点としては「Accessによる保護」が有効になっている場合、単純にCloudflare Accessを設定するだけではまだBad Gatewayでアクセスできません。

先ほどのCloudflare Tunnelの「Accessによる保護」の設定箇所でプルダウンからCloudflare Accessのアプリケーション名が選択できます。ここを選択することでアクセス可能になります。

まとめ

無料でお手軽、そしてセキュアに自宅サーバーのサービスを外部に公開することができるCloudflare Tunnel。もちろん、自宅サーバー以外にもクラウド環境やVPS環境でもCloudflareのネットワークを経由することでセキュアにサービスを公開できます。

欠点を挙げるのであれば、Cloudflare Tunnelを使うと若干ページを開く際の遅延が発生します。やはり通信を中継するという性質上この遅延は仕方がないものです。

その遅延さえ許容できるのであればCloudflare Tunnelは非常に便利なサービスですので、皆様もぜひ使ってみてください。

サイト内の商品リンクは一部アフィリエイトリンクとなっています

関連記事

Apple TVでお手軽にVPNサーバーを構築

Apple TVでお手軽にVPNサーバーを構築

先日、TailscaleというVPN構築サービスのドキュメントを読んでいるとおもしろいページがありました。 Secure your internet traffic on public Wi-Fi using an Apple TV · Tailscale Docs Route Tailscale traffic through your Apple TV for secure, private browsing and access to region-locked content. Apple TVにアプリを入れるだけでVPNサーバーを構築できる……? まじ? Apple TVであれば常時電源ONの状態でTVに繋いでおり、サーバーとして理想的です。一般のご家庭向け製品で改造等も不要でアプリを入れるだけで導入できるVPNサーバーとしては最強製品になるでしょう。
Synology DS215jを223jに移行した

Synology DS215jを223jに移行した

自宅のバックアップ用のNASであるSynology Disk Station 215j、Synologyの製品は基本的に後ろ2桁が販売年になっているため10年間、毎日稼働し続けています。 本来はDS1821で置き換えて引退予定でしたが、 RAID崩壊事件があり16TBのHDDを2台RAID1で再構築して重要なデータをNAS間でバックアップされる環境を構築しました。 そのため、想定していた運用年数を超過してしまいました。Amazonプライムデーセールで割引になっていた223jに置き換えを行いました。 215jと223jの比較 Synology NASキット 2ベイ DS223j クアッドコアCPU搭載 1GBメモリ搭載 ライトユーザー向け 国内正規代理店フィールドレイク取扱品 電話サポート対応品 DiskStation Amazon 項目 DS215j DS223j CPU Marvell Armada 375 88F6720 2コア 800MHz Realtek RTD1619B 4コア 1.7GHz メモリ 512MB DDR3 1GB DDR4 ベイ数 2ベイ 2ベイ ネットワーク 1GbE RJ-45ポート×1 1GbE RJ-45ポート×1 USBポート USB 3.0×1、USB 2.0×1 USB 3.2 Gen 1×2 サイズ 165 × 100 × 225.5mm 165 × 100 × 225.5mm 重量 0.88kg 0.88kg 8年の差がありながら、基本的な仕様や外観はほとんど変わりません。