Cloudflare Tunnelで自宅サーバーを公開する(FreeプランOK)というのがあったのでやってみた。詳しくは、この記事を見てもらえれば良い。
やる前はそれほどメリットあるのかな?と思っていたが、今は以下のメリットからやって良かったと思ってる。
- 自宅サーバーに同じアドレスでLANからもWANからも繋げられる
- 証明書更新の手間がない
- DDNS(Dynamic DNSサービス)の更新がない
- IPv6 DS-Liteのためルータがポートフォーワード出来なくても自宅サーバーに繋げられる
Cloudflare Tunnelやりかた
Via the dashboard · Cloudflare Zero Trust docs
-
ウェブサイトのセキュリティとパフォーマンス改善 | Cloudflareでアカウントを作成。
-
ドメイン登録する1
.uk
、us
が意外と安い。既に持っているなら、購入する必要はない。JCBのカードで支払おうとしたら、何故か上手くいかなかったので、PayPalで支払いした。 -
Cloudflare Zero Trustサービスの利用を開始する。
-
アカウントの選択
-
チーム名(チームドメイン)を入力(例:
arimasou16.cloudflareaccess.com
) -
料金プランの選択(FreeでOK)
-
-
Zero Trustダッシュボードのサイドバーから
Access -> Tunnels
をクリックして、トンネルを作成する-
トンネル名を入力
-
Cloudflare Tunnelクライアント
cloudflared
をインストールするOS、アーキテクチャーを選択する -
インストールのためのコマンドが表示されるので、それを自宅サーバーの端末で叩く
$ curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 16.6M 100 16.6M 0 0 8645k 0 0:00:01 0:00:01 --:--:-- 27.1M $ sudo dpkg -i cloudflared.deb [sudo] arimasou16 のパスワード: 以前に未選択のパッケージ cloudflared を選択しています。 (データベースを読み込んでいます ... 現在 164724 個のファイルとディレクトリがインストールされています。) cloudflared.deb を展開する準備をしています ... cloudflared (2023.7.3) を展開しています... cloudflared (2023.7.3) を設定しています ... man-db (2.10.2-1) のトリガを処理しています ... $ sudo cloudflared service install 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX 2023-07-28T00:15:13Z INF Using Systemd 2023-07-28T00:15:16Z INF Linux service for cloudflared installed successfully
-
-
作成したトンネルの
Public Hostname Page
でサブドメインやパス、タイプ、URLを入力する。1Subdomain Domain Path Type URL app 選択(sample.com) 空欄 http 192.168.0.2 httpにするとSSL暗号化通信出来ないんじゃないかと思うが、
https://app.sample.com
とSSLでアクセスすれば、ちゃんとSSL通信出来る。本当はhttps(だけ)にする方法があるだろうが、面倒そうなのでやってない2。 -
nginx
の設定ファイルをhttpで編集し直して、再起動。- listen 443 ssl default_server; - listen [::]:443 ssl default_server; + listen 80 default_server; + listen [::]:80 default_server; ・・・省略・・・ - ssl_certificate /etc/lessl_certificatetsencrypt/live/ddns.sample.com/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/ddns.sample.com/privkey.pem;
-
自宅サーバーにアクセスしているアプリの設定を変更する。
nextcloudサーバー
/var/www/nextcloud/config/config.php
'trusted_domains' => array ( - 0 => 'ddns.sample.com', + 0 => 'app.sample.com', ), ・・・省略・・・ - 'overwrite.cli.url' => 'https://ddns.sample.com/nextcloud', + 'overwrite.cli.url' => 'https://app.sample.com/nextcloud',
ただし、
.well-known
の警告が出てしまうようになってしまった。設定は何も変えてないのだが、http側の設定にしたせいなんだろうか?解決法が分からないので放置している。nextcloudクライアント
~/.config/nextcloud/nextcloud.cfg
-0\url=https://ddns.sample.com/nextcloud +0\url=https://app.sample.com/nextcloud
joplin
.env
-APP_BASE_URL=https://ddns.sample.com/joplin +APP_BASE_URL=https://app.sample.com/joplin
CloudFlare Tunnel導入前、Androidのアプリなどで、ポート開放・ポートフォーワードをしているのに、WANから接続出来ない事象が発生していた。Firefoxなどでアクセスすると、ちゃんと繋がるので、アプリの問題かnginxの設定か何かかと思っていた。
しかし、今思えば、自宅サーバーにLANからドメインで接続出来るようにunbound
を導入していたので、ddns.sample.com
が192.168.0.2
にDNSキャッシュされてしまっていたのではないか?ちゃんと検証してないが、そんな気がしている。
-
作成前
warning no dns record found for this domain. the policy may not execute as expected.
という警告が出てたが、作成して時間が経てば消えた。 ↩︎ ↩︎ -
Tunnel not working on HTTPs and onyl working on HTTP - Zero Trust / Cloudflare Tunnel - Cloudflare Communityという質問と答えがある。 ↩︎