indigoのVPSサーバー上にTailscaleをインストールして、自宅のサーバーにVPNで接続して、nginxのproxyとBASIC認証を使っていたのだけれど*、自宅からVPSサーバーを迂回して大きなファイルを転送するとループを検知してか、30分ぐらいIPアドレスがブロックされてしまう。運用も面倒だなと思っていたら、Cloudflare Tunnelを使うと、無料で認証まで簡単にやってくれるらしい。実際やってみると簡単。VPS借りて手動でプロキシ立てるのがばからしくなる。
必要なのは
Cloudflareが現状のDNS設定を読み込んでくれ、ネームサーバーの変更をガイドしてくれる
Cloudflare for Teamsのダッシュボードからアプリケーションを追加する。Application URLはアクセスしたいURLを指定する。認証方法はメールアドレスや、IPアドレス、国等いろいろと選べる。
Get started · Cloudflare for Teams documentation
$ cloudflared tunnel login #(表示されるURLにアクセスする)
$ loudflared tunnel create NAME #(NAMEは任意のチャンネル名)
Tunnel credentials written to /path/to/.cloudflared/<Tunnel-UUID>.json.
cloudflared chose this file based on where your origin certificate was found.
Keep this file secret. To revoke these credentials, delete the tunnel.
ダッシュボードから作成したTunnelsのTunnel-UUIDが確認できる。削除はCLIもしくはダッシュボードから可能。
tunnel: <Tunnel-UUID>
credentials-file: /path/to/.cloudflared/<Tunnel-UUID>.json
ingress:
- hostname: www.example.net
service: http://localhost:8080
- hostname: www1.example.net
service: http://localhost:8081
- service: http_status:404 # (catch-allの記述が必要らしい)
$ cloudflared tunnel ingress validate #(config.ymlの文法チェック)
Validating rules from /path/to/.cloudflared/config.yml
OK
$ cloudflared tunnel run <Tunnel-UUID or NAME>
問題なければ、ダッシュボード上でステータスがACTGIVEになる
ターゲットはTunnel-UUID.cfargotunnel.comになるようだ。
DNS record · Cloudflare for Teams documentation
$ cloudflared tunnel route dns <UUID or NAME> www.example.net
$ cloudflared tunnel route dns <UUID or NAME> www1.example.net
# (CLIからCNAMEを順次追加していくことも可能)
$ sudo cloudflared --config /path/to/.cloudflared/config.yml service install
$ sudo systemctl start cloudflared
$ sudo systemctl enable cloudflared
これは便利だー