やりたいこと&方針
- 自宅サーバー内で構築したサーバーを外部インターネットからでもアクセスできるようにしたい
- でも極力手間はかけたくない(SSL証明書取得・管理とかセキュリティ対策とか)
- お金も掛けたくない
- Cloudflareを利用する
手順概要
- 独自ドメインを取得する(取得済みならそれを流用)(仮にexample.comとする)
- Cloudflareアカウントを作成する
- Cloudflareにドメインを登録(ドメイン移管とは異なる)
- ドメインレジストラのDNS設定に、Cloudflareのネームサーバーを指定する
- Cloudflare Tunnelsの作成と起動
- Cloudflare Tunnels経由で自宅サーバーを外部公開
独自ドメインを取得
省略(Cloudflare内でも取得可能)
Cloudflare設定
1. アカウント作成
- こちらなど参考で:【超入門】Cloudflareアカウントを新規登録する
- 基本は無料版でOK。ただしサブドメインでの運用などは有料版でないと不可
2. ドメインを登録(移管ではない)
- 左メニューよりDomain→Domain Management→Onboard a domain
- ドメイン名を登録して完了
- 既存のDNSレコードを自動でインポートしてくれる
- CloudflareのNSを確認しておく
- DNS→Records→Cloudflare Nameserver(画面一番下)
- 例)laylah.ns.cloudflare.com、yichun.ns.cloudflare.com
3. ドメインレジストラにてネームサーバーを変更
- ドメインレジストラにてDNSサーバーを先に確認したCloudflareのDNSに変更する
- NSレコードはそのままでOK(Cloudflareに変更しなくても実質動作が上書きされる)
4. DNSサーバー変更の確認
暫く待ってCloudflareのDomain Manager画面にて
対象ドメインのStatusがActiveになったらOK
※暫くは最大24時間程度
5. Cloudflare Tunnelsを作成
- 左メニューよりZero Trust→Networks→Connectors
- タブが2つあるのでCloudflare Tunnels→Create a tunnelをクリックして登録
- tunnel typeの選択肢は一般的にはCloudflared
- Cloudflaredは自宅サーバーにて起動する(後で)
- Tunnal nameは任意(ドメイン名がよいと思う)
- 接続のためのtokenが表示されるのでコピっておく
- 手順(コマンド)も表示されるのでコピっておく
※トンネル自体の作成はこれで完了
- 手順(コマンド)も表示されるのでコピっておく
6. 自宅サーバーにてcloudflaredを起動する
- 先ほどのCloudflareで表示された手順に従ってcloudflaredをインストールする
- その際にtokenも指定する
- 起動したら自動的にCloudflare tunnelに接続される
- 接続に成功したらCloudflareのConnectorsのStausがHEALTHYになる
7. Cloudflare Tunnels経由で自宅サーバーを外部公開
- Connectorsのトンネル一覧の右の三点リーダーをクリック
- Configureを選択
- Published application routesタブを選択
- Add a published application routeをクリック
- 下記を入力
- Subdomain:wwwやsshなど(サービス毎に分けるのが吉)
- 無料バージョンだと1段階まで
- Domain:ルートドメイン(example.com)
- これもサブドメインにするなら有料版が必要
- Service:自宅サーバーのアクセス先(ローカルLAN視点でOK)
- type:httpやsshなどサービスにあわせる
- URL:LAN内のIP/ドメイン名とポート番号
- LAN内で変動しないよう固定化しておく
- localhostは結構罠なのでやめておく(個人談)
- Subdomain:wwwやsshなど(サービス毎に分けるのが吉)
8. 接続確認
外部インターネットから登録したドメインにアクセスする(例:www.example.com)
追記:SSL/TLS設定
上記までの設定だと自宅WEBサーバーがSSL/TLSに非対応だとそのままになる
よって、自宅サーバーが非暗号化状態でもトンネルをSSL/TLS対応にする
- トップ画面→Account Home→ドメイン名(example.com)をクリック
- 左メニューからSSL/TLS→Edge Certificatesをクリック
- Always Use HTTPSをON
これで自宅サーバー内で暗号化できてなくても外部アクセス時はHTTPSになる