CloudflareとWebサーバの接続方法は3種類あり、特徴は[概論]を参照して下さい。
ここではSynologyのNASの中にある[Webサーバ]と[Cloudflare]をIPv6で接続する方法を解説します。
別の言い方をするとポート番号443でIPv6通信で接続するという事です。
尚、IPv6アドレスはサーバアドレスを持っているのでルータに443の転送先を設定する必要はありません。
接続図は下図の様になります。
■CloudflareのDNSにAAAAレコードを作成しSynologyNASのIPv6アドレスを設定します。
■その結果、このWebサーバはIPv4/IPv6網の利用者からアクセスする事ができる上にCloudflareのCDN機能が働いたサーバとなります。
構築の手順は下記になります。
4.WebサイトにCloudflareのWordPressプラグインを導入する
1.Cloudflare側にAAAAレコードを追加する
1.DNSレコードの追加コマンドの起動
メニュからDNSを選択し、画面にある[レコードの追加]ボタンを挿入します。
2.AAAAレコードの作成
下記画面に下記を設定します。
■タイプ欄:▼をクリックしてAAAAレコードを選択します・
■名前欄:任意のサブドメイン名を入力します。例)nw
※上記の場合、Webサーバのドメイン名は[nw.貴方のドメイン名]になります。
■IPv6アドレス欄:仮のIPアドレスとして[111:1:1:1:1:1:1:1]を入力します。
■コメント欄:このサブドメインを説明するコメントを入力します。
[保存]ボタンを挿入します。
以上で下記の様なDNSレコードが作成されます。
上記の仮のAAAAレコードはSynology側から正式のアドレスで更新されます。
2.Synology側からAAAAレコードを更新する
次は、SynologyNASのIPv6アドレスでCloudflareのAAAAレコードを更新する処理になります。
1.[script]フォルダの作成
[コントロールパネル]の下記アイコンをクリックします。
[作成→共有フォルダの作成]を実行し[script]フォルダを作成します。
下記のフォルダが作成されます。
この中にCloudflareの[AAAA]レコードを更新するスクリプトを保存します。
2.スクリプトファイルを作成します。
①EmEditorを起動し、下記ファイル貼り付けて下さい。
#!/bin/bash # シェルスクリプトの実行パラメータ auth_email="xxxxxxxxxxxx" # アカウントのメールアドレス zone_id="xxxxxxxxxxxx" # ドメインの概要画面に表示されているゾーンIDを指定します。 auth_key="xxxxxxxxxxxx" # ドメインの概要画面に表示されているAPIトークンを取得をクリックし、表示された画面のGlobal API Keyを取得します。 sub_domain="xxxxxxxxxxxx" # 更新するAAAAレコードのサブドメイン名をフルで指定します。 # SCRIPT START echo "[Cloudflare API] START" # Synologyに設定されているIPv6アドレスを取得します ip6=$(curl -s https://ipv6.icanhazip.com/) echo "[Cloudflare API] Get_SynoIP=" $ip6 # cloudflareの指定サブドメインに設定されているAAAAレコードを取得します record6=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records?name=$sub_domain&type=AAAA" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json") # 指定サブドメインにAAAAレコードが見つからない時の処理 if [[ $record6 == *"\"count\":0"* ]]; then >&2 echo -e "[Cloudflare API] 対象のレコードが見つかりません。先にサブドメインAAAAレコードを作成して下さい。" exit 1 fi # cloudflareのAAAAレコードからIPアドレスを取り出す old_ip6=$(echo "$record6" | grep -Po '(?<="content":")[^"]*' | head -1) echo "[Cloudflare API] Cloudflare_IP=" $old_ip6 # cloudflareのAAAAレコードから設定コメントを取り出す old_comment=$(echo "$record6" | grep -Po '(?<="comment":")[^"]*' | head -1) echo "[Cloudflare API] comment=" $old_comment # IPv6アドレスの更新が不要な場合の処理 if [[ $ip6 == $old_ip6 ]]; then echo "[Cloudflare API] IPアドレスに変更がないので更新処理は行いません." exit 0 fi # AAAAレコードからレコード識別子を取り出す record6_identifier=$(echo "$record6" | grep -Po '(?<="id":")[^"]*' | head -1) # アップデートの実行 update6=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/$record6_identifier" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" --data "{\"id\":\"$zone_identifier\",\"type\":\"AAAA\",\"proxied\":true,\"name\":\"$sub_domain\",\"content\":\"$ip6\",\"comment\":\"$old_comment\"}") # 更新処理の結果のレポート if [[ $update6 == *"\"success\":false"* ]]; then >&2 echo -e "[Cloudflare API]更新に失敗しました. DUMPING RESULTS:\n$update4\n$update6" exit 1 else echo "[Cloudflare API] IPv6 address '$ip6' でCloudflareのレコードを更新しました." fi
②[ファイル → 名前を付けて保存]を実行します。
③ファイル名は[cloudflare_dns.sh]で、[BOM無し]、[LFのみ]で保存します。
3.上記のスクリプトファイルを修正します
上記のスクリプトの上の方にある[XXXXXXXXXX]の所を修正します。
①auth_email:Cloudflareのアカウント(メールアドレス)に変更します。
②zone_id
ドメインの[概要]画面の右下の方にAPIに関する項目が表示されています。
[zone_id]は、下記画面から直接取得できますので、これに変更します。
③auth_key
[auth_key]は下図の[APIトークンを取得する]をクリックします。
下記画面が表示されるので[表示]ボタンをクリックすると取得できるのでこれに変更します。
④sub_domain
更新するAAAAレコードのサブドメイン名をフルで指定します。
例)ドメイン名が[mydomain.com]で、[nw]を指定した場合のサブドメイン名は[nw.mydomain.com]になります。
以上でスクリプトファイルの修正が完了しました。
4.スクリプトファイルの移動
修正したスクリプトファイルをSynologyの[script]フォルダの中に登録します。
5.タスクスケジューラの作成
上記で作成したスクリプトを定期実行するタスクを作成します。
①[コントールパネル]の下図のタスクスケジューラを起動します。
②[作成]→[予約タスク]→[ユーザ指定のスクリプト]を実行します。
タスク作成画面が表示されます。
③全般タブの設定
下図のタスク名の所は判り易い名前を付けてください。例)Cloudflare AAAA UpDate
④下図の[タスク設定タブ]を開きます
■下図の電子メール欄にメールアドレスを入力し、Eメール通知をONにします。
■コマンド欄に下記を入力します。
/volume1/script/cloudflare_dns.sh
⑤下図の[スケジュールタブ]を開きます.
下図でこのタスクを実行する時間を設定します。
設定が完了したら[OK]ボタンで設定を確定させます。
6.タスクスケジュールのマニュアル実行
タスクスケジューラの画面は下図の様になります。
■作成したタスクを選択し[実行]ボタンを挿入すると、マニュアルでタスクを実行させる事が出来ます。
■実行後、メールとCloudflareのDNSレコードを参照して、正常に更新されたかを確認して下さい。
更新が上手くいかなかった場合はSynologyから送られたメールを見て問題を解決して下さい。
正しいメッセージは下記になります。
[Cloudflare API] START [Cloudflare API] Get_SynoIP= 240b:12:860:c100:211:32ff:fea2:ae18 [Cloudflare API] Cloudflare_IP= 111:1:1:1:1:1:1:1 [Cloudflare API] comment= Reserveサーバのテストサイト [Cloudflare API] IPv6 address '240b:12:860:c100:211:32ff:fea2:ae18' でCloudflareのレコードを更新しました.
■上記は①SynologyのIPv6アドレスの取得②Cloudflareから現在のIPアドレスの取得③Cloudflareからコメントデータを取得④CloudflareのIPv6アドレスの更新から構成されています。
7.タスクスケジューラの修正
上記の設定では、タスクスケジューラが動いたら必ずメールが送られる仕組みになっています。
そこで下図の★印の所に✓を入れると、更新処理が発生した時だけメールが送られる仕様に変更できます。
以上でSynologyからCloudflareのIPアドレスの更新が完了したので、外部からCloudflreのドメインでアクセスした時にSynologyのサーバにアクセスが来るようになりました。
あとはWordPressの実行です。
3.WordPressのインストール
このサイトのURLは[https://nw.t-spirits.com]になっています。
上記はドメイン名だけでアクセスできる様にしたもので、これを行う為には[Synologyの仮想ホスト機能]でドメインにアクセスがきた時にWordPressフォルダに転送させる事と[日本語WordPressのインストール]で実現できます。
この様な接続を行う場合はWordPressの[wp-config.php]に下記を記述する事がポイントになります。
$_SERVER['HTTPS'] = 'on';
又、AAAAで作成したドメインを下記の様に利用する事もできます。
・https://nw.t-spirits.com/wordpress①
・https://nw.t-spirits.com/wordpress②
この場合は[仮想ホストの定義]も[wp-config.php]の上記の指定も不要です。
4.WebサイトにCloudflareのWordPressプラグインを導入する
CloudflareのCDNで設定されたWebサーバのデータは、Cloudflareの高速ネットワーク網の中にキャッシュされます。
その結果、ユーザはCDN上のキャッシュデータをアクセスしてくれるのでパッピー・・・・とはなりません。
もし、Webサーバのコンテンツを更新した時にCDNのキャッシュデータが更新前だとしたら、ユーザは最新データにアクセスする事ができません。
ここに登場するのが[CloudflareのWordPressプラグイン]です。
このプラグインはWordPressを更新した時に、Cloudflare側のキャッシュを自動更新してくれる優れもので、これを導入します。
1.Global API Keyの取得
これはAAAAレコードを更新する時に利用した[auth_key]と同じものです。
①CloudflareのWebサイト画面を開きます。
②概要画面の下の方にあるAPIトークンを起動します。
③画面に表示された[Global API Key]の[表示]ボタンを挿入します。
④表示された画面にパスワードを入力すると[Global API Key]が表示されます。
これをクリップボード等に保存して下さい。
2.新規プラグインの追加で[Cloudflare]で検索し、インストールと有効化を行います。
3.上記プラグインの設定を行います。
①設定→cloudflareを実行します。
②表示された画面の中の[here]をクリックします。
③表示された下記画面に[アカウント]と上記で保存した[Global API Key]を入力し、Saveします。
④Cloudflareプラグインの概要画面が表示されます。
下図の[Apply Recommeded Clopudafre for WardPress(WordPressに推奨されるCloudflare設定を適用する)]所にある[Apply(適用する)]ボタンを挿入します。
これで自動的に設定が最適化されます。
以上でWordpressを更新した時は自動でCDNのキャッシュは更新されますが、なにか問題があった場合は、マニュアルで[キャッシュを消去]する事もできます。