Cloudflare設定まとめ(動的IP、SSL/TLS、Email Routingなど)
Cloudflare setting memo(DynamicDNS,SSL/TLS,EmailRouting)
はじめに
Cloudflareで自宅サーバ用にドメインを借りました。今後の設定変更時に参照できるよう、個人的なメモとして記録を残します。
レコードの追加
取得したドメインに加えて、サブドメインなども使用するため、必要なレコードを設定していきます。MXレコードについては、Email Routingの設定時に自動的に入力されるため作成不要です。ここではAレコードとTXTレコードを追加します。
Aレコードのプロキシをオンにすると、Cloudflare経由でトラフィックが流れるようになります。実IPを隠したい場合やその他キャッシュ機能などの恩恵を受けたい場合はオンにしましょう。
プロキシをオンにすると、例えばWebサーバでの設定がいくつか必要になります。以下の記事を参考にしてみてください。
動的IPアドレスの設定
一般家庭用回線の場合、IPアドレスが変わることがあります。そのため、CloudflareにIPを更新してもらうために定期的にIPを送信する必要があります。
まず、ドメインの概要ページからZone IDを取得します。次に「APIトークンの作成」を選択し、「Edit zone DNS」の権限で新しいトークンを作成します。APIトークンは以下のURLから作成できます。
https://dash.cloudflare.com/profile/api-tokens
以下のシェルスクリプトで動的IPの更新を自動化しました。test.bokumin.orgは、SSH接続を可能にするため、PROXIEDをfalseに設定しています。Cloudflare上でプロキシを設定している場合、Proxied部分の指定を省略しても問題ありませんが、明示的に指定しています。
#!/bin/bash
API_TOKEN="xxxxxxxxxxxx"
ZONE_ID="xxxxxxxxxxx"
RECORDS=("bokumin.org" "www.bokumin.org" "test.bokumin.org")
CURRENT_IP=$(curl -s https://ifconfig.me)
for RECORD_NAME in "${RECORDS[@]}"; do
RECORD_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records?type=A&name=${RECORD_NAME}" \
-H "Authorization: Bearer ${API_TOKEN}" \
-H "Content-Type: application/json" | grep -Po '"id":"\K[^"]*' | head -1)
if [ "${RECORD_NAME}" = "test.bokumin.org" ]; then
PROXIED="false"
else
PROXIED="true"
fi
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${RECORD_ID}" \
-H "Authorization: Bearer ${API_TOKEN}" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"${RECORD_NAME}\",\"content\":\"${CURRENT_IP}\",\"proxied\":${PROXIED}}"
echo "$(date): Updated ${RECORD_NAME} to ${CURRENT_IP} (proxied: ${PROXIED})"
done
実行結果は以下のようになります。errorがなく、successがtrueになっていれば正常に動作しています。
$ ./sendip.sh
{"result":{"id":"xxxxxx","name":"bokumin.org","type":"A","content":"xxx.xxx.xxx.xxx","proxiable":true,"proxied":true,"ttl":1,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2025-10-01T08:20:56.23225Z","modified_on":"2025-11-06T11:22:24.028148Z"},"success":true,"errors":[],"messages":[]}Mon Nov 10 09:16:37 AM JST 2025: Updated bokumin.org to 58.183.112.156 (proxied: true)
{"result":{"id":"xxxxxx","name":"www.bokumin.org","type":"A","content":"xxx.xxx.xxx.xxx","proxiable":true,"proxied":true,"ttl":1,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2025-10-02T06:49:10.738964Z","modified_on":"2025-11-06T11:22:24.981124Z"},"success":true,"errors":[],"messages":[]}Mon Nov 10 09:16:38 AM JST 2025: Updated www.bokumin.org to 58.183.112.156 (proxied: true)
{"result":{"id":"xxxxxx","name":"test.bokumin.org","type":"A","content":"xxx.xxx.xxx.xxx","proxiable":true,"proxied":false,"ttl":1,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2025-11-05T04:40:59.450762Z","modified_on":"2025-11-06T11:22:25.882437Z"},"success":true,"errors":[],"messages":[]}Mon Nov 10 09:16:39 AM JST 2025: Updated server.bokumin.org to 58.183.112.156 (proxied: false)
digコマンドで確認し、プロキシをオフにしたドメインのIPアドレスが自宅のIPアドレスになっていれば成功です。ここまでで問題がないようでしたら、先程のスクリプトをcronなどで実行させるようにしましょう。
$ dig bokumin.org
; <<>> DiG 9.20.13 <<>> bokumin.org
...
;; ANSWER SECTION:
bokumin.org. 300 IN A 104.21.54.69
bokumin.org. 300 IN A 172.67.136.60
$ dig test.bokumin.org
; <<>> DiG 9.20.13 <<>> server.bokumin.org
...
;; ANSWER SECTION:
server.bokumin.org. 300 IN A xxx.xxx.xxx.xxx←自宅IPになっていれば成功
SSL/TLS設定
SSL/TLS暗号化の設定についてです。
- full(strict) → 自サーバに信頼された証明書がある場合
- full → なんちゃって証明書や期限切れの証明書を使用する場合
- flexible → 証明書をもっていない場合
- off → 自サーバの証明書をそのまま使用したい、またはCloudflareの証明書が不要な場合
今回は、サーバ上でLet’s Encryptの証明書を取得しているため、Full (strict)を選択しました。手動で証明書を取得している場合など、事情によってはFullの方が適している場合もあります。
この設定により、Cloudflareが中間で認証を行うため、ブラウザで表示される証明書情報が変わります。証明書を持っていない場合はFlexibleを選択すると、証明書を用意しなくてもHTTPS接続が可能になります。
設定変更後、自サーバの証明書が正しく適用されているか確認します。ブラウザでも確認できますが、今回はopensslコマンドを使用しました。
$ openssl s_client -connect bokumin.org:443 -servername bokumin.org < /dev/null 2>/dev/null | openssl x509 -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
4e:9b:b3:1d:f8:0a:4d:1d:13:96:77:b3:e0:5e:31:ed
Signature Algorithm: ecdsa-with-SHA256
Issuer: C=US, O=Google Trust Services, CN=WE1
Validity
Not Before: Oct 1 07:25:54 2025 GMT
Not After : Dec 30 08:14:42 2025 GMT
Subject: CN=bokumin.org
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:ad:1b:74:d6:c8:c9:06:46:97:62:8c:11:35:9c:
d3:b8:65:0a:bc:e7:54:c0:8a:3d:77:53:aa:95:1b:
8b:41:f9:92:bd:10:60:8f:d1:01:a9:8b:1a:d5:02:
a0:a7:a2:6f:eb:66:b0:5b:ec:21:0f:bb:46:4a:95:
73:32:b1:38:77
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Subject Key Identifier:
BE:01:FE:A5:8C:95:9A:39:11:BB:CE:F6:F2:4B:CE:1B:B9:03:93:FD
X509v3 Authority Key Identifier:
90:77:92:35:67:C4:FF:A8:CC:A9:E6:7B:D9:80:79:7B:CC:93:F9:38
Authority Information Access:
OCSP - URI:http://o.pki.goog/s/we1/Tps
CA Issuers - URI:http://i.pki.goog/we1.crt
X509v3 Subject Alternative Name:
DNS:bokumin.org, DNS:*.bokumin.org
X509v3 Certificate Policies:
Policy: 2.23.140.1.2.1
X509v3 CRL Distribution Points:
Full Name:
URI:http://c.pki.goog/we1/BH5itOT96Ec.crl
(以下略)
Email設定(送受信)
CloudflareではEmail Routingを無料で利用できます。
受信設定
- Email Routing→ルーティングルール→アドレスを作成
- 転送先のメールアドレスを設定
Gmailでの送信設定
Gmailから独自ドメインのメールアドレスで送信する場合の設定手順です。
アプリパスワードの作成
https://myaccount.google.com/apppasswordsで、アプリパスワードを作成します。作成したアプリパスワードは一度しか表示されないため、メモするようにしてください。
作成したら、gmailで以下のように進めていきます。
Gmailでの設定
1. Gmail → 設定 → すべての設定を表示 → アカウントとインポート → メールアドレスを追加
2. 追加するメールアドレスを入力(例: [email protected])
「エイリアスとして扱います」はお好みで設定
3. SMTPサーバーの情報を入力
- ユーザー名: 自分のGmailアドレス
- パスワード: 作成したアプリパスワード
- SMTPサーバー: smtp.gmail.com
- ポート: 587
認証メールが届くので、リンクをクリックして認証完了
その他
ページルールの設定
Cloudflareのページルールを使用することで、特定のURLパターンに対して異なる動作を設定できます。
設定例
- 静的ファイルのキャッシュ強化
- URL:
*bokumin.org/static/* - 設定: キャッシュレベル「Cache Everything」、エッジキャッシュTTL「1ヶ月」
- URL:
- 管理画面のキャッシュ無効化
- URL:
*bokumin.org/admin/* - 設定: キャッシュレベル「Skip or bypass」
- URL:
- API エンドポイントの設定
- URL:
*bokumin.org/api/* - 設定: キャッシュレベル「skip or bypass」、セキュリティレベル「高」
- URL:
無料プランでは3つまでのページルールを作成できます。優先度の高いものから順に設定することをおすすめします。
キャッシュ設定
基本設定
SSL/TLS → 概要 → キャッシュ設定から、以下の項目を設定できます。
- キャッシュレベル → スタンダード
- ブラウザキャッシュTTL → .htaccessなどと同期させたい場合、既存のヘッダー優先が良い
- 常にオンライン → 有効にすると、オリジンサーバーがダウンしても、キャッシュされたコンテンツを配信
開発時の注意点
開発中は「開発モード」を有効にすることで、3時間の間キャッシュを一時的にオフにできます。これにより、変更内容をすぐに確認できます。
キャッシュ → 設定 → 開発モード から有効化できます。
キャッシュのパージ
コンテンツを更新した際は、キャッシュをパージすることで、すぐに新しい内容を反映できます。キャッシュ → 設定 → キャッシュをパージ から実行できます。
まとめ
以上、Cloudflareでの各種設定方法についてまとめました。ドメイン料金だけでメール機能などの便利な機能を無料で利用できるのは非常にありがたいです。
DNSを提供しているサービスは数多くあり、それぞれで設定方法や管理画面の仕様が異なります。そのため、記憶しておくのは現実的ではないため(覚える気がない)、このようにブログに記録として残してました。誰かの参考になれば幸いです。
おわり