Google Domains へ EdgeRouterX からの DDNS 登録

## 注記
**[Squarespace が Google Domains からすべてのドメイン登録と関連する顧客アカウントを買収](https://support.google.com/domains/answer/13689670?hl=ja)** され、2024 年 7 月 10 日をもって、すべてのドメインが Squarespace に移管されました。  
また、**[Squarespaceはダイナミ⁠ックDNSをサポ⁠ートしていません。](https://support.squarespace.com/hc/ja-jp/articles/17131164996365-Google-Domains%E3%81%8B%E3%82%89Squarespace%E3%81%B8%E3%81%AE%E7%A7%BB%E7%AE%A1%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6?platform=v6&websiteId=6671fe541ec2c73799e01e3c#toc-squarespace--------dns--ddns-----------------)**  
よって、この記事の方法は利用できなくなりました。

## はじめに
Google Domains でドメインを取得したので、自宅の Global IP を DDNS で登録をしてみた
使用した機器は自宅ラボルータにしている [EdgeRouterX](https://www.ui.com/edgemax/edgerouter-x/) (略称 ER-X) を使用した
実際にやってみると簡単だった。やり方メモを記載しておいてます

## 設定・確認手順
内容は簡単で、設定で 2ステップ, 確認で 1ステップ

1. Google Domains で 合成レコード「ダイナミックDNS」を追加
2. EdgeRouterX で ddns 設定
3. 登録確認

## 1. Google Domains で 合成レコード「ダイナミックDNS」を追加

Google Domains へログインする
https://domains.google.com/registrar

DNS 設定画面へ移動して、下記画面のように設定する([参考サイト](https://support.google.com/domains/answer/6147083?hl=ja
)そのまま)
1. DNS メニューを開く
2. **合成レコード**までスクロール
3. **ダイナミックDNS** を選択
4. DDNS で割り当てるサブドメインを入力
5. 追加をクリック

<img width="1439" alt="GoogleDomains_DDNS.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/479fe05e-1ed4-96ec-1d26-e0ed25e0c265.png">

合成レコード追加が完了したら、認証情報を下記画面のように取得する
1. 「ダイナミック DNS」の「>」クリックして詳細情報を開く
2. 今回の登録ドメインを確認
3. 「**認証情報を表示**」をクリック
4. 表示される「**ユーザー名**」「**パスワード**」をメモしておく(ER-X設定に必要)

<img width="1439" alt="GoogleDomains_DDNS2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/bd154d9b-01dc-121c-0c9b-ed7bb75c922c.png">

以上で、**Google Domains の登録完了**

## 2. EdgeRouterX (ER-X) で ddns 設定
Google Domains で生成されたパラメータ(ユーザー名&パスワード)を元に、下記設定を ER-X に設定する
Google Domains は **dyndns2 プロトコルを使用**するので、`protocol dyndns2` を指定する

```config:ER-X_DDNS設定例(Global向けIF_eth0の場合)
set service dns dynamic interface eth0 service custom-googledomains host-name [登録する Aレコード名]
set service dns dynamic interface eth0 service custom-googledomains [Google Domains で表示される「ユーザー名」]
set service dns dynamic interface eth0 service custom-googledomains password [Google Domains で表示される「パスワード」]
set service dns dynamic interface eth0 service custom-googledomains protocol dyndns2
set service dns dynamic interface eth0 service custom-googledomains server domains.google.com
set service dns dynamic interface eth0 web dyndns
```

以上で、**EdgeRouterX での設定完了**

## 3. 登録確認

### EdgeRouterX での確認

DDNS 登録状況は、`show dns dynamic status` コマンドで表示可能

```terminal:ER-X_DDNS_Status表示例
$ show dns dynamic status 
interface    : eth0
ip address   : [登録する Public IP が表示される]
host-name    : [登録する Aレコード名]
last update  : [最後に Update した時刻表示]
update-status: good
```
`update-status` が **good** であれば登録 OK

### Google Domains での確認
登録時同様に、ダイナミック DNS を開いて登録したサブドメインを見る
<img width="1439" alt="GoogleDomains_DDNS3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/45a2354e-ba13-3464-590a-51792d1ae60b.png">

登録完了していれば、対象の登録したサブドメインの`データ`に Public IP が表示されてれば OK

### 名前解決での確認
実際に名前解決も`dig`や`nslookup`で確認可能

```terminal:nslookupコマンド例(xxx.xxx.xxxに実際の名前をいれる.最初のServer/Addressは環境による)
% nslookup xxx.xxx.xxx
Server:		***.**.**.*
Address:	***.**.**.*#53

Non-authoritative answer:
Name:	xxx.xxx.xxx
Address: x.x.x.x
```

```terminal:digコマンド例(xxx.xxx.xxxに実際の名前をいれる)
% dig A xxx.xxx.xxx +noall +answer

; <<>> DiG 9.10.6 <<>> A xxx.xxx.xxx +noall +answer
;; global options: +cmd
xxx.xxx.xxx.	69	IN	A	x.x.x.x
```

名前で、IPが引ければOK

以上で、**登録確認完了**

## 参考
Google Domains ヘルプ ダイナミック DNS
https://support.google.com/domains/answer/6147083?hl=ja


## 追記. VM で Google Domains への登録

クラウド上に踏み台サーバを置いているので、DDNS 設定をしたのでその内容を記載する

対象サーバへ `ddclient` をインストールする

```sh: install_ddclient(centos7)
yum install ddclient
```

`/etc/ddclient.conf`を編集する

- use=web~
    - interface へ直接 Public IP を振られない場合は、外部サイトのweb表示結果を使うため use=web~ をコメントアウト解除する
-  protocol
    -  googledomains を指定
-  login
    -  サーバ用に登録した DDNS で`認証情報を表示`で出力されるユーザー名を指定 (1.と同じ)
-  password
    -   サーバ用に登録した DDNS で`認証情報を表示`で出力されるパスワードを指定 (1.と同じ)
-   my.domain.tld, otherhost.domain.tld
    -   my.domain.tld は google domains　で購入したドメイン (例 xxx.dev)
    -   otherhost.domain.tld は DDNS でホスト用に設定した名前 (例 bastion.vm.xxx.dev)

```diff:/etc/ddclient.conf
- # use=web, web=checkip.dyndns.org/, web-skip='IP Address' # found after IP Address
+ use=web, web=checkip.dyndns.org/, web-skip='IP Address' # found after IP Address
+ protocol=googledomains,
+ login=my-auto-generated-username,
+ password=my-auto-generated-password
+ my.domain.tld, otherhost.domain.tld
```

ddclient を起動

```sh
systemctl start ddclient
systemctl enable ddclient
```