ddclient で 特定ネットワークインタフェースから Google Domains の DDNS レコードを更新する
複数の NIC が搭載されたマシン等で、特定のネットワークインタフェースを指定して DDNS レコードの更新が行えると便利なときがある[1]。本エントリでは Google Domains の DDNS レコードの更新に ddclient を使用して、その際に特定のネットワークインタフェースを指定する方法を紹介する。
Google Domains DDNS with ddclient
Google Domains の DDNS レコードは domains.google.com/nic/update
に POST
リクエストまたは GET
を行うことで API を使用して更新できる。従って一定間隔でリクエストを送り続けるように cron 登録しても同様のことができるが、専用ツールをつかったほうがなんとなく保守が楽そうなので、今回は Google Domains をサポートする ddclient というツールを使う。この config ファイルの設定等は下記ページに記載がある。
ddclient の設定
特定のネットワークインタフェースから(今回はリクエストを送るマシンがルータを使用しており、そのプライベート IP アドレスを通知しても意味がないので)https://checkip.dyndns.org などの外部ウェブサイトを使用してグローバル IP アドレスを取得する必要がある。これは、下記のように cmd=
に直接取得コマンドを記載する方法が良さそうであった[2]。
# Configuration file for ddclient generated by debconf
#
# /etc/ddclient.conf
daemon=300
ssl=yes
protocol=googledomains
use=cmd,cmd='curl -s ipv4.myonlineportal.net/checkip --interface hoge'
login=generated_username
password=generated_password
your_resource.your_domain.tld
なおデーモンとして動いて欲しいので、/etc/default/ddclient
は下記のようにしている。
# Set to "true" if ddclient should be run every time DHCP client ('dhclient'
# from package isc-dhcp-client) updates the systems IP address.
run_dhclient="false"
# Set to "true" if ddclient should be run every time a new ppp connection is
# established. This might be useful, if you are using dial-on-demand.
run_ipup="false"
# Set to "true" if ddclient should run in daemon mode
# If this is changed to true, run_ipup and run_dhclient must be set to false.
run_daemon="true"
# Set the time interval between the updates of the dynamic DNS name in seconds.
# This option only takes effect if the ddclient runs in daemon mode.
daemon_interval="300"
systemd
ユニットになっているので、設定を変えた後は systemctl restart ddclient
をお忘れなく。
更新確認
下記のようにして一旦手動で更新し、様子を伺うとよい。
sudo ddclient -daemon=0 -verbose -force
RECEIVE: good xxx.xxx.xxx.xxx
と出力されれば更新できている。
管理画面や systemctl status
、journalctl -fu
などで確認するとよい。
Discussion