Cloudflare Zero TrustのCloudflare Tunnelsを使って、IPv6環境でも簡単に自宅サーバーを外部公開したり、宅内へVPN的に使う方法

サーバー
引用元:https://blog.cloudflare.com/getting-cloudflare-tunnels-to-connect-to-the-cloudflare-network-with-quic/
この記事は約12分で読めます。
当サイトには、広告及びアフィリエイトリンクが含まれ、それによって収益を得ています。記事の内容やリンクには、プロモーションが含まれる場合があります。詳細については、プライバシーポリシーをご覧ください。

この記事はMisskey Advent Calender 2022の12月24日の記事です(最初はサーバー構築から全部やるつもりが、時間が足りなくてこういう不完全な形になりました…いつか書きます

Cloudflare、使ってますか?私は使っています。Misskeyインスタンスを自宅サーバー上で建てて、外部公開するために使い始めたのですが、めちゃくちゃ便利で助かっています。今回は、任意のドメインで、Cloudflare Zero TrustのTunnelsを使って自宅にあるサーバーを外部公開する方法を紹介します。

Cloudflare Tunnelsとは

引用元:https://blog.cloudflare.com/getting-cloudflare-tunnels-to-connect-to-the-cloudflare-network-with-quic/

分かる人向けに一言でいうと、Cloudflare版ngrokみたいなやつです。

ポート開放やNAT超えみたいなことをせずに、いくつかの設定をするだけで、Webサイトの外部公開ができ、やりようによってはVPNの代替的にも使えます(私はVPN的にも使っていて、そこでちょっとハマったところもあるので、そこも書きます(自分の設定が悪くてハマったような気もする))

以前はCloudflare Zero Trustは以前Cloudflare for Teamsと呼ばれていたもので、最近のトレンド(?)であるゼロトラストセキュリティをクラウドで実現するための様々な機能が用意されています。

Cloudflare Tunnelsのメリット

  • Freeプランでは50ユーザーまで無料
  • クライアントアプリはmacOS/Windows/iOS/Android/Linuxが用意
  • サーバー側に入れるcloudflaredはmacOS/Windows/Debian/RedHat/Dockerが用意(Arm版もあり)
  • cloudflaredはOSS(GitHub)
  • SSL証明書のインストール不要でEnd-to-Endの暗号化可能(証明書をインストールすればもっと厳密に暗号化可能)
  • SSL証明書は自動で更新
  • IPv6が使える(無効化も可能)
  • ポート開放が不要

しかも記事執筆時点では無料です。これが無料!???!?!?!

今回の環境・前提

  • Windows 11 Proのx86_64機(OSのPro/Homeは多分関係ない)
  • 公開したいアプリはMisskeyで、WSL2を使ってDockerで構築済み
  • 1Gbpsの光回線(IPv6オプション、BIGLOBE光なのでNAT64/DNS64)
  • Cloudflareのアカウントは作成済み(特に難しく無いので自力でできると思います)
  • 今回公開するのは自宅にあるMisskeyインスタンス

コマンドで設定できますが、Cloudflaredを入れてしまえばその後はWebブラウザから設定できるので、今回はWebのGUIからやります。

ドメインをCloudflareで登録する必要はありませんが、DNSサーバーをCloudflareに設定する必要があります(無料)。

Cloudflare Tunnelsの設定方法

Cloudflaredのインストール

Cloudflaredのインストール手順
  • Step.1
    ダッシュボードからZero Trustを起動

    Cloudflare.comでログインし、ダッシュボード左側のZero Trustをクリックします。

  • Step.2
    Cloudflare Zero TrustのダッシュボードでTunnelsをクリック

    Cloudflare Zero Trustのダッシュボードで、左側のAccess内にあるTunnelsをクリックします。

  • Step.3
    Create tunnelをクリック

    Create tunnelをクリックし、トンネルを作成します。

  • Step.4
    Tunnel名を設定

    トンネル名を設定します。どこのトンネルなのか、分かりやすい名前にするといいです。

  • Step.5
    環境に合わせてCloudflaredをダウンロード

    使う環境に合わせて、Cloudflaredをインストールします。Windows/macOS/Debian/Red Hat/Dockerと、それぞれに32bit/64bit版があります。DebianなどはArm版も用意されているので、自分の環境にあったものをクリックして選択しましょう。今回はWindows 11 Pro(64bit)なので、画像のように選択しています。

    CloudflaredはGitHub上にホストされていて、ここからダウンロードします。Windowsなら、.msi形式のものをダウンロードし、実行すればインストーラーでインストールできます。

    なお、Windows版Cloudflaredは自動で更新できないので、新しいものが出たら手動でアップデートする必要があります。

  • Step.6
    ターミナル/PowerShellでコマンドを実行しCloudflareと接続

    Step.5で表示されているコマンドをコピーして、PowerShellなどにペーストして実行します。正常にインストールされた状態で実行すれば、特にエラーなどは出ずに実行できるはずです。実行したら、下のNextをクリックします。

  • Step.7
    公開ホスト名を編集

    画像のように、公開ホストの情報を設定します。設定したらSave {トンネル名} tunnelをクリックします。これはあとから設定することもできる(はず)です。

    ローカルのURLですが、同一LAN内にあるCloudflaredをインストールしたマシン以外の場合は、{そのマシンのローカルIP}:{ポート番号}のようにすれば良いと思います。もちろん、ルーターでマシンにIPを固定することをお忘れなく。

    ちなみに、マシンごとにCloudflaredをインストールするのは不要で、そもそも非推奨です(別に複数あっても動作しましたが、一応)。

  • Step.8
    セットアップ終了

    ここまで終われば、Cloudflaredのインストールは完了です。画像では実際にはCloudflaredをインストールしていないのでINACTIVEの表示になっていますが、正常に接続できていればHEALTHYの表示になっているはずです。

アプリケーションを追加

Cloudflare AccessでApplicationを追加
  • Step.1
    Access→Applicationを開く

    トンネルが設定できたら、アプリケーションを追加します。Self-hostedを選択します。

    …TunnelのPublic Hostnameの設定だけでできるっぽい(??)説明もあるのですが、私の場合上手くいかなかったのでこれも設定しています。

  • Step.2
    Applicationの設定を追加

    アプリ名やセッションの有効期間、アプリのドメインなどを設定します。アプリのロゴを独自に設定したりもできます。終わったら、上部のNextをクリックします。

    同じページの下部に、IdP(Identity Provider)の設定の項目があります。が、この後に誰からもアクセスできるように設定するので、特に触るところはありません。ONで良いと思います。

  • Step.3
    (アクセス)ポリシーの追加

    どういうユーザーのアクセスを許可するか、画像のように(アクセス)ポリシーを追加します。今回はインターネットからアクセスできる、公開されたものにするので、Actionの欄はByPassに設定します。私はここでハマりました…

    最低1つグループに入っていないといけないらしいのですが、ここをどうやって設定したか忘れました(

  • Step.4
    CookieとCORSの設定

    ここはよく分からないので変えていません(おい)。

    終わったら右上のAdd Applicationをクリックすると、アプリケーションが追加できます。

ここまで終われば、インターネットからアクセスできるようになっているはずです。お疲れ様でした。

VPN代わりにCloudflare Tunnelsを使う方法

Cloudflaredの設定方法は紹介した通りなので、Tunnelを設定済みの状態から解説します。

Cloudflare TunnelsでPrivate Networkを追加する方法

Private Networkの追加方法
  • Step.1
    Tunnelの設定を開く

    左のメニューで、Access→Tunnelsを開き、作成したTunnelsの設定(Configure)を開きます。

  • Step.2
    Private Networkタブを開く

    設定のPrivate Networkタブをクリックし、Add a private networkをクリックします。

  • Step.3
    CIDRを追加

    Create private network forの欄に、ローカルのCIDR(参考)かIPを追加します。CIDRで指定すれば、その範囲のIPアドレスを持つ1台以上の機器にアクセスできるようになります。アクセスしたい機器が1つで良いなら、その機器のIPを入れればOKです。IPを入れる場合は、そのIPを持つ機器のローカルIPが変動しないよう、LAN内のルーターで固定IPを設定しておきましょう。

    終わったら、Save private networkをクリックすれば設定完了です。

これでネットワークの設定は完了ですが、実際にはアクセスできません。Private Networkで設定したマシンにインターネット経由でアクセスできるようにするには、クライアントアプリの1.1.1.1を使います。まずは、

‎1.1.1.1: Faster Internet
‎1.1.1.1: Faster Internet
開発者: Cloudflare
金額: 無料+

iOSならApp Store、

AndroidならGoogle Playから1.1.1.1 + WARPアプリを、

PCならCloudflareのWebサイト(Windows / macOS / Linux)から、WARPクライアントをダウンロードしてインストールしてください。ここからは、PlayストアからダウンロードしたAndroidアプリでの設定方法を解説します。

1.1.1.1アプリでCloudflare Zero Trustアカウントにログインする方法

Androidの1.1.1.1 + WARPアプリでCloudflare Zero Trustアカウントにログインする方法
  • Step.1
    初回の説明を読んで進める

    最初は色々と説明があります。ざっと読んで進めましょう。AndroidなどではVPNプロファイルのインストールを求められるかもしれないので、許可してインストールします(インストールしないと使えません)。

    Android機(特に中国メーカーのカスタムスキン)の場合、タスクキル機能が有効だとバックグラウンドの1.1.1.1アプリが自動で終了される可能性があるので、OSの「バッテリーの最適化」などの項目からは外しておきましょう。

  • Step.2
    タイトル

    起動すると、最初はWARPか1.1.1.1のスイッチになっていると思うので、Cloudflare Zero Trustのチームにログインします。画像のようにタップして進めます。

  • Step.3
    チーム名を入力してログイン

    チーム名を入力してログインします。IdP(Identity Provider)を使う方法を設定しているならそれでもいいですが、今回はデフォルトで設定している(はず)のEメールにOTPを送信する方法でログインします。Cloudflare Zero Trustに登録したメールアドレスを入力し、Send me a codeをタップするとOTPが送られるので、それを入力してSign inをタップします。

    組織名は、Settings→General Settingsの中のTeam domainがそうです。このチームドメインは、インターネットから誰でもアクセスできるので、公開したくない情報(本名など)は入れないようにしましょう(ちゃんとアクセスポリシーを設定すればログインはできません)。他のチームと被らなければ、変更もできます。

  • Step.4
    ログイン完了

    正常にログインできたら、このような画面になります。トグルスイッチを右側(接続済み)にすると、Cloudflareのネットワークに繋がって、インターネットからでもLAN内のアプリケーションにアクセスできるようになります。

IdP(GitHub)を追加する方法(まだ書けてません)

FAQ

Q
DDNS的なものはいらないの?
A

要りません(私も最初は必要だと思ってました)。

Tunnelでアプリケーションを追加すると、自動でDNSレコードにCNAMEレコードが追加されるようになっているのですが、これはコンテンツの欄にIPではなくID的なものが入っているので、サーバーのIPが変わっても再設定などは不要です。

逆に、自分で公開予定のアプリケーションのドメインにDNSレコードを設定していると、競合するのでTunnelでPublic Hostnameを追加する際にエラーで追加できなくなります。

特に理由がなければ、DDoS対策のためにプロキシは有効化しておくのがおすすめです。

参考情報

タイトルとURLをコピーしました