Google DomainsでDDNSを利用するときのグローバルIPの通知の仕方


概要

うちは固定IP契約をしていないので、サーバの運用上DDNSを利用しているのだが、これまでは独自ドメインからYAMAHAのネットボランチサービスで取得したドメインへと転送していた。

ネットボランチDNSサービスとは、ヤマハが提供するDDNS(Dynamic Domain Name System)サービスです。

ネットボランチDNSサーバーに、グローバルIPアドレスなどを登録することにより、常に同じホストアドレス(または、ネットボランチ電話番号)で、グローバルIPアドレスの名前解決ができるようになります。

ネットボランチDNSサービスとは - YAMAHA

ダウンタイムが0というのが魅力で、これまでネットボランチDNSサービスのドメインを使っていたが、そもそもグローバルIPは頻繁に変わるものではないし、流石にドメイン名が長くて面倒だったので、ドメインを契約しているGoogle DomainsのDDNSサービスを利用することにした。

ツール選定

Google DomainsのIP通知はdyndns2プロトコルに対応している。(どこぞのDNSプロバイダは専用のWindowsクライアントからしか通知できないクソ仕様だったが)

この時点でいくつかクライアントの候補はあったが、「ddns client container」と検索してぱっと目についたddclient1というddnsクライアントを今回は採用することにした。

手順

Google Domains側での準備

コンソールからドメインを選択後、左のタブから「DNS」→「詳細設定を表示」→「ダイナミックDNSの管理」とクリックして、レコードを作成しておく。

また、後で必要になるので認証情報(ユーザー名&パスワード)を控えておく。

ddclientデプロイ

secretリソースにddclientの設定情報を埋め込んでコンテナにマウントする。

ddclient.yaml
apiVersion: v1
kind: Secret
metadata:
  name: ddclient-secret
stringData:
  ddclient.conf: |
    daemon=60 # 通知の間隔(秒)
    syslog=yes
    verbose=yes
    ssl=yes
    protocol=googledomains
    use=cmd,cmd='curl -s ipv4.myonlineportal.net/checkip'
    server=domains.google.com
    login=xxx
    password=xxx
    4nm1tsu.com # 最後にドメイン
type: Opaque
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ddclient
  labels:
    app: ddclient
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ddclient
  template:
    metadata:
      labels:
        app: ddclient
    spec:
      containers:
        - name: ddclient
          image: linuxserver/ddclient:latest
          volumeMounts:
            - name: config-volume
              mountPath: /defaults/ddclient.conf
              readOnly: false
              subPath: ddclient.conf
      volumes:
      - name: config-volume
        secret:
          secretName: ddclient-secret

通知の間隔はdaemonに秒単位で指定。

loginpasswordには先程控えたユーザ名とパスワードを入力する。

また、

syslog=yes
verbose=yes

としておくと、以下のようにしてIP通知のログが見れる。2

...
SUCCESS:  4nm1tsu.com: skipped: IP address was already set to xxx.xxx.xxx.xxx.
SUCCESS:  4nm1tsu.com: skipped: IP address was already set to xxx.xxx.xxx.xxx.
...

念の為Google Domainsのコンソール側でも同様のIPが通知されているかを確認したらおしまい。

参考情報

inadyn+docker で自宅 DNSドメインを自動更新する

zenn.dev favicon image zenn.dev

ddclient で 特定ネットワークインタフェースから Google Domains の DDNS レコードを更新する

zenn.dev favicon image zenn.dev