おれのにっき

何か問題でも

CloudFlareをDDNSで使うためにDDclientのDockerイメージつくった

f:id:windyakin:20180108172933p:plain

どうでもいい個人的な話から入ると、私がDDNSサービスというものに出会ったのは中学生の頃にDynDNSを使用した頃が最初出会ったと思う。いまでこそ有料会員にならないとまともに使えないサービスになってしまっているが、その頃は無料会員でもいろんなサブドメインを使用することができたので、ドメインを複数持っていなかった私はサブ垢までつくって色々取得していたように思う。

まあその辺の話はさておき、 CloudFlare というDNSサービスがある。無料でも込み入ったことさえしなければその辺のドメインレジストリが提供している無料DNSよりは高機能なので、私が所持しているドメインのほとんどのプライマリ DNS を CloudFlare にしている。しかも CloudFlare は API も充実していて大体の設定は RESTful な感じで設定することができる。つまりその API を使えば、実質的な DDNS を行うことができるので、いくつかのDDNSクライアントが CloudFlare に対応しており、 DDclient というソフトウェアもそのうちのひとつである。

DDclient は結構昔からある DDNS 用のクライアントソフトウェアで、もっぱら Linux のサービスとして動かすことを想定した解説記事などを見るのだが、時代は「cgroups だ!」「Docker だ!」という感じなので、どうせ Docker 化されたイメージが Docker Hub にあるんじゃないかとおもって探したのだがちょうどいいのがなかった。

  • linuxserver/ddclient
    • 設定ファイルを吐き出す Volume の持ち方があんまりイケてない
    • DDclient 側の問題だが起動するとマウントした設定ファイルのファイル所有者とパーミッションを変更する
  • outcoldman/docker-ddclient
    • 環境変数から設定できるのは Good だが CloudFlare で必要なパラメータの設定(zone)ができない
    • あとベースイメージが Ubuntu で無駄にイメージサイズが重い

これ以外にもいくつかあったのだが、面倒なので自分で作った。

ベースイメージはめちゃくちゃ軽い library/alpine で、DDclient が依存する Perl 関連のパッケージをいれるのに結構四苦八苦している。

DDclient の設定は環境変数からも設定ファイルマウントでも行うことができる。設定ファイルマウントを Read only にすることで、パーミッションの変更をむりやり抑制することができることに気づいた。

docker run -d \
  -e DDCLIENT_ZONE=example.com \
  -e DDCLIENT_PROTOCOL=cloudflare \
  -e DDCLIENT_SERVER=www.cloudflare.com \
  -e DDCLIENT_LOGIN=login-email-address@example.com \
  -e DDCLIENT_PASSWORD=your_api_key \
  -e DDCLIENT_HOST=ddns-host.example.com \
  windyakin/docker-ddclient
docker run -d \
  -v /path/to/ddclient.conf:/etc/ddclient/ddclient.conf:ro \
  --entrypoint ddclient \
  windyakin/docker-ddclient

実際に自分のサーバーでつかっているがいまのところ困ったことはなくて良い感じ。