HOME  /Synology(IPv6)
 /SynologyのWebサーバをCloudflareとIPv6で接続する
2024年04月06日

SynologyのWebサーバをCloudflareとIPv6で接続する

 メモ

このドキュメントは古いドキュメントです。

CloudflareとWebサーバをIPv6で接続する方法は推奨できません。

CloudflareとWebサーバ間はCloudflareのトンネルで接続した方が数多くのメリットがあります。

詳細は[CloudflareのCDNにWebサーバを接続する方法とセキュリティ対策]を参照して下さい。

 

ここではSynologyのNASの中にある[Webサーバ]と[Cloudflare]を[V6プラス]のIPv6で接続する方法を解説しています。

別の言い方をするとポート番号443でIPv6通信で接続するという事です。

この接続はルータに443の転送先設定は不要な接続になります。

接続図は下図の様になります。

■CloudflareのDNSにAAAAレコードを作成しSynologyNASのIPv6アドレスを設定します。

■その結果、このWebサーバはIPv4/IPv6網の利用者からアクセスする事ができる上にCloudflareのCDN機能が働いたサーバとなります。

 CDNとは

CDNは[Contents Delivery Network]の略で、画像データがCloudflareのネットワークの中にキャッシュされるのでユーザから見たレスポンスが早くなる仕掛けになります。

■しかもこのサーバはWAFとDDoS対策されたサーバとなります。

 Cloudflareを利用すると

CloudFlareメニュの[セキュリティ]を見てください。

下記のセキュリティ機能が無償版でもバンドルされている事が判ります。

WAF

WAF(ワフ)とは「Web Application Firewall」の略で、Webアプリケーションの脆弱性を悪用した攻撃からWebサイトを守るツールです。

わざわざWAF対策ツールを購入しなくてもCloudflarを利用するだけで対策できる様になります。

DDoS

DoS攻撃とは1つのIPアドレスからターゲットに大量のアクセスデータを送り負荷をかける攻撃です。

一方、DDoS攻撃は他のパソコンを踏み台にして複数のIPアドレスからDoS攻撃をかける攻撃になります。

SynologyではDoS攻撃に対する対策はありましたが、DDoSには対応できませんでした。

しかし、Cloudflareを利用する事によりDDoS攻撃にも対応できる様になります。

 

1.CloudflareにAAAAレコードを追加する

1)CloudflareのサイトのDNS画面に入ります。

■[レコードの追加]ボタンを挿入します。

 

2)下記画面に必要事項を入力します。

タイプ:▼をクリックしてAAAAレコードを選択します・

名前:任意のサブドメイン名を入力します。

例)ドメイン名が[mydomain.com]で、[nw]を指定した場合のURLは[nw.mydomain.com]になります。

IPv6アドレス:仮のIPアドレスとして[111:1:1:1:1:1:1:1]を入力して下さい。

コメント:このサブドメインを説明するコメントを入力します。

■保存ボタンを挿入します。

 

3)以上で下記の様なDNSレコードが作成されます。

 

注意

1.同じサブドメイン名でAレコード(IPv4アドレス)は作成しないでください。

AとAAAAレコードがあるとCloudflareはAレコードで接続を試みるので、IPv6でサーバと接続する事ができなくなります。

2.プロキシをOFFにしないで下さい。

プロキシをOFFにするとCloudflareはただのDNSサーバとなる為、通信はCloudflareを経由しないので、IPv4網からのアクセスできないうえに、CDNやセキュリティ機能も無効となります。

 

2.SynologyからAAAAレコードを更新する

次は、SynologyNASのIPv6アドレスでcloudflareのAAAAレコードを更新する処理になります。

1)[コントロールパネル→共有フォルダ]を実行

作成で[script]フォルダを作成します。

 

2)スクリプトファイルを作成します。

EmEditorを起動し、下記ファイル貼り付けて下さい。

#!/bin/bash

# シェルスクリプトの実行パラメータ
auth_email="xxxxxxxxxxxx"  # アカウントのメールアドレス
auth_key="xxxxxxxxxxxx"     # ドメインの概要画面に表示されているAPIトークンを取得をクリックし、表示された画面のGlobal API Keyを取得します。
zone_id="xxxxxxxxxxxx"       # ドメインの概要画面に表示されているゾーンIDを指定します。
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

■[ファイル → 名前を付けて保存]を実行します。

■scriptフォルダの下にファイル名が[cloudflare_ddns.sh]で、[BOM無し]、[LFのみ]で保存します。

 

3)上記のスクリプトファイルを修正します

上記スクリプトの実行パラメータにある[XXXXXXXXXX]の所を修正します。

auth_email:Cloudflareのアカウント(メールアドレス)を入力します。

auth_keyzone_idは下記画面から取得します

ドメインの概要画面を開くと右下の方にAPIに関する項目が表示されています。

zone_idは、上記画面から直接取得できます。

api_keyは[APIトークンを取得する]をクリックすると下記画面が開きます。

■上記の表示ボタンをクリックすると取得できます。

sub_domain:更新するAAAAレコードのサブドメイン名をフルで指定します。

例)ドメイン名が[mydomain.com]で、[nw]を指定した場合のサブドメイン名は[nw.mydomain.com]になります。

以上でスクリプトファイルの修正が完了しました。

 

4)タスクスケジューラの設定

①コントールパネル→タスクスケジューラを起動します。

②作成→予約タスク→ユーザ指定のスクリプトを実行します。

タスク作成画面が表示されます。

③タスク設定タブを開きます

■電子メールアドレスを指定して、Eメール通知をONにします。

■コマンド欄に下記を入力します。

/volume1/script/cloudflare_ddns.sh

 メモ

上記の設定はスクリプトが実行されるたびにメールが送られる設定になります。

デバッグが終わった後は、★の所に✓を付けると、異常終了しない限りはメールが送られない仕様となります。

④全般タブ、スケジュールの設定

・全般タブのタスク名は判り易い名称を付けてください。

・スケジュールは1回/1日で基本的には良いと思いますが、1時間ごとに走らせる事もできます。

・最後にOKボタンを挿入し、タスクを確定させます。

 

5)タスクスケジュールのマニュアル実行

タスクスケジューラの画面は下図の様になります。

■作成したタスクを選択し[実行]ボタンを挿入すると、マニュアルでタスクを実行させる事が出来ます。

■実行後、メールとCloudflareのDNSレコードを参照して、正常に更新されたかを確認して下さい。

IPv6アドレスがSynologyのNASのアドレスに更新された事が確認できます。

 

3.WordPressの実行

新規にWordPressを作成する場合は[日本語WordPressをインストールする]を参考に、ここで作成されたドメイン名でアクセスして作成します。

 

既存のWordPressをこのドメイン名で動かす場合は、旧のURLを新しいURLに変更してから、アクセスして下さい。

このサイトは下記の様なURL変更を行いました。

https://nw.myds.me → https://hnw.t-spirits.com/oldies/

 メモ

本当は仮想ホスト機能を利用して[https://hnw.t-spirits.com]にしたかったのですが、この形式だと画像が表示されないという障害が発生します。

原因は不明です。

よって現在はフォルダ名指定のWordPressで運用しています。

 

 

以上でこのドキュメントの説明は完了です。

関連ドキュメントはメニュの「Wordpress(応用編)タブ」か下記の関連記事一覧から探して下さい。

又、このサイトには、Google広告が掲載されています。

この記事が貴方の参考になりましたら、広告もご覧頂ければ幸いです。


<関連記事一覧>

「ipv6」に関連するドキュメントを表示しています。尚、このページネーションはJquryで制御しています。

   メモ このドキュメントは古いドキュメントです。 昔はCloudflareとWebサーバ間をIPv6で接続していましたが、現在はセキュリティ対策の為にトンネル接続に切り替えました。 詳細は[CloudflareのCD […]

ここではCloudflareでDNSレコードを管理した場合、Google Adsenceのads.txtをどの様に設置するかの解説をしています。

ここではSynologyのNASをIPv6接続し、そこで何ができるかを解説しています。