YANO's digital garage

Copyright ©YANO All rights reserved. https://www.bravotouring.com/~yano/

Last-modified: 2024-04-10 (水)


[一語一絵/IT系]

NSD4 / 2016-09-05 (月)

9月になったので久々にLet's Encryptによるサーバ証明書の自動更新具合をチェックしたところ、www.~の証明書なのにCNがmail.~になっている事に気づいた。

正確に言うと"今まで"気づいてなかった問題に"今になって"気づいたというのが正しく、最近おかしくなったわけではないと思うのだが、取り敢えず気づいたからには修正する方向で[External]Let's Encrypt の使い方を再確認。すると、「letsencrypt-auto/certbot-auto」においてドメイン名とサブドメイン名の両方を指定する必要があるような印象だったので、

sudo letsencrypt-auto certonly --webroot --webroot-path=/var/www/html \
        -d bravotouring.com -d www.bravotouring.com
としたものの、今度は"bravotouring.comのアドレスが引けない"と叱られた。

そら、bravotouring.comはドメインでホストじゃないから仕方ないじゃん…と思いつつ、ここで意地を張ってもしかたがないので、おとなしくDNSの設定を追加することに。

いつものとおり、/etc/nsd/zones/bravotouring.com.zoneのドメイン名の直下にCNAMEを

~~
       IN   CNAME  vps
vps    IN   A      49.212.151.67
vps    IN   AAAA   2403:3a00:202:1112:49:212:151:67
~~
…と追記して「えいや!」っとしたところ
yano@vps:~$ sudo nsdc rebuild
sudo: nsdc: command not found
yano@vps:~$
…な結果で、「nsdcどこ行ったの????」という事にこれまた今頃気づいて大慌て。

色々と調べてみたら今年3月のアップデートで[External]NSD 3から[External]NSD 4に上がった形跡があり、その際に[External]nsdc(8)[External]zonec(8)のコマンドも削除されたようだ。置き換えではなく「廃止」という事は、手順そのものが不要となったと考えるのが自然なのだが、DNSクエリを投げても返答は変わらず、/var/lib/nsd/nsd.dbも今年2月のタイムスタンプのままなので、NSDを再起動してsyslogを見たところ

nsd[6846]: bravotouring.com.zone:17: CNAME and other data at the same name
nsd[6846]: zone bravotouring.com file bravotouring.com.zone read with 1 errors
なエラーが出ていた。

NSD4のプログラム
[External]Unbound/NSD最新情報(OSC 2014 Tokyo/Spring)より

調べてみたところ[External]Zone apexとCNAMEの制限にひっかかっているらしく、/etc/nsd/zones/bravotouring.com.zone

TTL 3600

@ IN SOA ns1.bravotouring.com. foo.bravotouring.com. (
            201609051429 ; serial
            10800  ; refresh
            3600   ; retry
            86400  ; expire
            43200  ; default_ttl
        )

       IN   NS     ns1.bravotouring.com.
       IN   NS     ns2.bravotouring.com.
       IN   MX 10  mail.bravotouring.com.
       IN   TXT    "v=spf1 mx a:foo.bravotouring.com ~all"
@      IN   A      49.212.151.67
@      IN   AAAA   2403:3a00:202:1112:49:212:151:67
vps    IN   CNAME  @
ns1    IN   CNAME  @
ns2    IN   CNAME  @
mail   IN   CNAME  @
www    IN   CNAME  @
…な感じで書き直して起動OK。 なお、nsdc rebuild/reloadに代わる[External]NSD 4でのzoneファイル更新は
yano@vps:~$ sudo nsd-control reload
ok
yano@vps:~$
となる模様。

その前に/etc/nsd/nsd.confに「control-enable: yes」を追記

#
# nsd.conf -- the NSD(8) configuration file, nsd.conf(5).
#
# Copyright (c) 2001-2006, NLnet Labs. All rights reserved.
#
# See LICENSE for the license.
#

# This is a comment.
# Sample configuration file

remote-control:
    control-enable: yes

~~
して、
yano@vps:~$ sudo nsd-control-setup
ok
yano@vps:~$
するのを忘れずに。

というわけで、

sudo letsencrypt-auto certonly --webroot --webroot-path=/var/www/html \
        -d bravotouring.com -d www.bravotouring.com
は通るようになったが、www.bravotouring.com代わりにbravotouring.comの証明書ができただけに終わり、結局
sudo letsencrypt-auto certonly --webroot --webroot-path=/var/www/html \
        -d www.bravotouring.com
で証明書を作りなおして、CNがwww.~になったので、問題は解決。

結局証明書のCNがmail.~になっていた原因はわからないままだが、改めてこれまでに作成した証明書のCNを洗ってみたところ、

 cert1.pem    Subject: CN=www.bravotouring.com
 cert2.pem    Subject: CN=mail.bravotouring.com
 cert3.pem    Subject: CN=www.bravotouring.com
 cert4.pem    Subject: CN=www.bravotouring.com
 cert5.pem    Subject: CN=mail.bravotouring.com
 cert6.pem    Subject: CN=www.bravotouring.com
 cert7.pem    Subject: CN=mail.bravotouring.com
 cert8.pem    Subject: CN=mail.bravotouring.com
 cert9.pem    Subject: CN=mail.bravotouring.com
cert10.pem    Subject: CN=mail.bravotouring.com
cert11.pem    Subject: CN=mail.bravotouring.com
cert12.pem    Subject: CN=mail.bravotouring.com
と、wwwになったりmailになったり混在している傾向から、複数証明書を纏めて作成したケースにおけるletsencrypt-autoのバグのような気がする。

更新情報を保持している/etc/letsencrypt/renewal/www.bravotouring.com.conf

~~
domains = mail.bravotouring.com, www.bravotouring.com
[[webroot_map]]
mail.bravotouring.com = /var/www/html
www.bravotouring.com = /var/www/html
あたりが何だか怪しそうなので、ここだけ弄ってrenewalすれば良かったのかもしれないな。

【参照】
●Let's Encrypt 総合ポータル https://letsencrypt.jp/
Let's Encrypt の使い方
コマンド解説
●Qiita http://qiita.com/
Zone apexとCNAME 2015年7月26日
Let's Encrypt で手軽に HTTPS サーバを設定する 2015年12月16日
Let's Encryptで複数サブドメインの証明書を発行して自動更新を設定する 2016年4月22日
●鷲ノ巣 http://tech.blog.aerie.jp/
CNAME を巡る 2/3 のジレンマ 2014年9月9日
●日本Unboundユーザー会 http://unbound.jp/
NSD
NSD 3
nsd(8)
nsdc(8)
zonec(8)
NSD 4
nsd(8)
nsd-control(8)
nsd.conf(5)
●Takashi Takizawa http://www.slideshare.net/ttkzw
Unbound/NSD最新情報(OSC 2013 Tokyo/Spring)
Unbound/NSD最新情報(OSC 2014 Tokyo/Spring)
●Name Server Daemon (NSD) https://www.nlnetlabs.nl/projects/nsd/