つれづれ日記
DNSカテゴリ 10/10
bindするIPv6アドレスを指定したunbound が、IPv6アドレスの割当がまだだと表示して起動しないことがある。

unboundのsystemd.service/lib/systemd/system/unbound.serviceを変更。After=network-online.targetを追加してIPv6アドレスの設定を待つ。Restart=alwaysを追加して、unboundがexitしたら無条件に再起動する。

unboundのsystemd.serviceは事前に環境変数を読み込むEnvironmentFile=設定と、DNSSECのroot鍵更新、unboundの設定検査がExecStartPre=にサクッと入っていてよくできている。EnvironmentFile=のファイル名の先頭にあるハイフン'-'は、指定したファイルがない場合は無視して続行するフラグ。EnvironmentFile=で指定した環境変数設定ファイルでは、ただ単に"シェル変数=値"のように書けば、$UNBOUND_OPTIONSのように環境変数としてExecStart=のコマンドラインで変数として使えるようになる。

ExecStart=でsudo をそのまま使ってしまうと、sudoが環境変数をいったん捨てるため注意。sudo --preserve-envか、systemdで実行時ユーザーを決める。

[Unit]
Description=Unbound recursive Domain Name Server
After=network.target network-online.target
After=unbound-keygen.service
Wants=unbound-keygen.service
Wants=unbound-anchor.timer
Before=nss-lookup.target
Wants=nss-lookup.target

[Service]
Type=simple
Restart=always
EnvironmentFile=-/etc/sysconfig/unbound
ExecStartPre=/usr/sbin/unbound-checkconf
ExecStartPre=-/usr/sbin/unbound-anchor -a /var/lib/unbound/root.key -c /etc/unbound/icannbundle.pem
ExecStart=/usr/sbin/unbound -d $UNBOUND_OPTIONS
ExecReload=/usr/sbin/unbound-control reload

[Install]
WantedBy=multi-user.target

DNSカテゴリ 10/10