概要
- 自宅サーバをIPv6対応するためにはDynamic DNSを設定しないといけないです。
- zoneサーバはAWS Route 53で運用されているのでCLIで書き換えるスクリプトを書くのが面倒だったので長らく放置していました。
- ちょっと探してみると、AWS APIをラップしているスクリプトがあったので設定してみました。
理想の手順
こちらのドキュメントを参考に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: 300
docker-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 up Starting ddns-route53 ... done Attaching to ddns-route53 ddns-route53 | Wed, 20 May 2020 09:00:12 JST INF Starting ddns-route53 1.9.1 ddns-route53 | Wed, 20 May 2020 09:00:13 JST INF Current WAN IPv4: 222.230.108.57 ddns-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. record ddns-route53 | Wed, 20 May 2020 09:00:13 JST ERR No WAN IPv6 address available to update *.teraren.com. record ddns-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.com matsu.teraren.com is an alias for vectant.teraren.com. vectant.teraren.com has address 121.3.155.147 vectant.teraren.com has IPv6 address 240b:10:2120:f400:4167:4cee:9d38:6125
Work From Homeのこのご時世、IPv6対応してないと遅くて辛いですね。
IPアドレスが更新されて、非定期的に更新したいとき
デーモンで動いているので、デーモンを再起動すればOK
sudo systemctl restart ddns-route53
Comments