640 文字
3 分
Route 53を使ってDynamic DNS設定(ipv4, ipv6対応)
概要
- 自宅サーバをIPv6対応するためにはDynamic DNSを設定しないといけないです。
- zoneサーバはAWS Route 53で運用されているのでCLIで書き換えるスクリプトを書くのが面倒だったので長らく放置していました。
- ちょっと探してみると、AWS APIをラップしているスクリプトがあったので設定してみました。

Route53の設定
理想の手順
こちらのドキュメントを参考にIAMユーザと、Policyを作成します。
設定ファイルをddns-route53.ymlという名前で作成します。
credentials: access_key_id: "YOUR ACCESS KEY" secret_access_key: "YOUR SECRET ACCESS KEY"
route53: hosted_zone_id: "YOUR ZONE ID XXXXXXXX" records_set: - name: "teraren.com." type: "A" ttl: 300 - name: "teraren.com." type: "AAAA" ttl: 300docker-composeのサンプルスクリプトがあるので、docker-compose.ymlというファイル名で作成します。
version: "3.2"
services: ddns-route53: image: crazymax/ddns-route53:latest container_name: ddns-route53 volumes: - "./ddns-route53.yml:/ddns-route53.yml:ro" environment: - "TZ=Asia/Tokyo" - "SCHEDULE=*/30 * * * *" - "MAX_RETRIES=3" - "LOG_LEVEL=info" - "LOG_JSON=false" - "LOG_CALLER=false" restart: alwaysそのうえで、docker-compose upを叩けば動きます。
しかしながら、ipv6のアドレスを取得する際にエラーができます。DockerがIPv6に対応していない感じのエラーです。軽くトラブルシュートしてみましたが、ちょっと面倒そうなので諦めました。
> docker-compose upStarting ddns-route53 ... doneAttaching to ddns-route53ddns-route53 | Wed, 20 May 2020 09:00:12 JST INF Starting ddns-route53 1.9.1ddns-route53 | Wed, 20 May 2020 09:00:13 JST INF Current WAN IPv4: 222.230.108.57ddns-route53 | Wed, 20 May 2020 09:00:13 JST ERR Cannot retrieve WAN IPv6 address error="request failed: Get https://v6.ident.me/: dial tcp [2a01:7e00::f03c:91ff:fe70:xxxx]:443: connect: cannot assign requested address"ddns-route53 | Wed, 20 May 2020 09:00:13 JST ERR No WAN IPv6 address available to update teraren.com. recordddns-route53 | Wed, 20 May 2020 09:00:13 JST ERR No WAN IPv6 address available to update *.teraren.com. recordddns-route53 | Wed, 20 May 2020 09:00:14 JST ERR Cannot update records set error="InvalidInput: Invalid XML ; cvc-complex-type.2.4.b: The content of element 'Change' is not complete. One of '{\\"https://route53.amazonaws.com/doc/2013-04-01/\\":Action, \\"https://route53.amazonaws.com/doc/2013-04-01/\\":ResourceRecordSet}' is expected.\\n\\tstatus code: 400, request id: 6a21c50f-4f3e-4a0b-b588-62ddb890ed66"ddns-route53 | Wed, 20 May 2020 09:00:14 JST INF 6 records set updated changes={"ChangeInfo":null}ddns-route53 | Wed, 20 May 2020 09:00:14 JST INF Cron initialized with schedule */30 * * * *ddns-route53 | Wed, 20 May 2020 09:00:14 JST INF Next run in 29 minutes (2020-05-20 09:30:00 +0900 JST)しかたがないので、ddns-route53をbinaryでインストールして、daemonとして設定しました。
※オプション
daemonとして稼働させるよりcrontabのほうが楽かなと思いました。
*/30 * * * * /usr/local/bin/ddns-route53 --config /path/to/ddns-route53.yml外部からテスト
> host matsu.teraren.commatsu.teraren.com is an alias for vectant.teraren.com.vectant.teraren.com has address 121.3.155.147vectant.teraren.com has IPv6 address 240b:10:2120:f400:4167:4cee:9d38:6125Work From Homeのこのご時世、IPv6対応してないと遅くて辛いですね。
IPアドレスが更新されて、非定期的に更新したいとき
デーモンで動いているので、デーモンを再起動すればOK
$ sudo systemctl restart ddns-route53 Route 53を使ってDynamic DNS設定(ipv4, ipv6対応)
https://blog.teraren.com/posts/route-53-dynamic-dns/