チェコで開発している権威DNSサーバ用アプリケーション。
KルートDNSで利用されておりチューニング次第でNSD相当の応答速度が出る。
Knotの特長として、DNSSECのKSK/ZSKロールオーバーを自動化するOnline DNSSEC signing機能がある。
OSはCentOSを利用。今回はバックエンドでDNSゾーンへのDNSSEC署名付与と、
KSKロールオーバー・ZSKロールオーバー専用機として構築する。
OS標準パッケージで対応していない機能があるのでソースビルドが必須となる。
OS : CentOS 8.2.2004 x86_64 NSD : Knot v3.0.0 user : knot group : knot data : /var/knot/data listen: 127.0.0.1 port : 20053
# dnf install gnutls-devel userspace-rcu-devel lmdb-devel libedit-devel # ./configure --prefix=/usr/local/knot-3.0.0 --disable-documentation \ --with-module-dnsproxy=no --with-module-geoip=no --with-module-dnstap=no \ --with-module-whoami=no --with-module-synthrecord=no # make # make install # cp -a knot-3.0.0/distro/common/knot.tmpfiles /usr/lib/tmpfiles.d/knot.conf # cp -a knot-3.0.0/distro/common/knot.service /usr/lib/systemd/system/knot.service # vi /usr/lib/systemd/system/knot.service --- [Unit] Description=Knot DNS server Wants=network-online.target After=network-online.target Documentation=man:knotd(8) man:knot.conf(5) man:knotc(8) [Service] Type=notify PrivateTmp=false User=knot Group=knot EnvironmentFile=-/etc/sysconfig/knot ExecStartPre=/usr/local/knot/sbin/knotc -c /etc/knot.conf conf-check ExecStart=/usr/local/knot/sbin/knotd -c /etc/knot.conf $KNOTD_ARGS ExecReload=/usr/local/knot/sbin/knotc -c /etc/knot.conf reload ExecStop=/usr/local/knot/sbin/knotc -c /etc/knot.conf stop Restart=on-abort LimitNOFILE=1048576 LimitNPROC=1048576 [Install] WantedBy=multi-user.target
# mkdir /var/knot/data # mkdir /var/knot/data/var/log # mkdir /var/knot/data/run/knot # mkdir /var/knot/data/lib/knot # mkdir /var/knot/data/lib/knot/signed # ln -s /usr/local/knot-3.0.0 /usr/local/knot # ln -s /usr/local/knot/etc/knot/knot.conf /etc/knot.conf # ln -s /var/knot/data/var/log /var/log/knot # mv /usr/local/knot/etc/knot/knot.sample.conf /usr/local/knot/etc/knot/knot.conf # groupadd knot # useradd -g knot -d /var/knot -s /sbin/nologin knot # chown -R knot.knot /var/knot/data/var/log # chown -R knot.knot /var/knot/data/run/knot # chown -R knot.knot /var/knot/data/lib/knot # chown -R knot.knot /var/knot/data/lib/knot/signed # vi /etc/logrotate.d/knot --- /var/log/knot/*.log { create 0644 knot knot missingok sharedscripts postrotate systemctl reload knot > /dev/null 2>/dev/null || true endscript }
サンプル |
DNSSEC鍵が無くなると、一度DNSSECを解除して"Chain of Trust"を解除する必要が出てくる。
この事態を避ける為に"storage"で指定したディレクトリを定期的にバックアップする必要がある。
Knotを起動すると『notice: [example.com.] DNSSEC, KSK submission, waiting for confirmation』と表示される。
コレが表示された後に"keymgr"コマンドを打つ事で、上位権威DNSに登録するDSレコードを確認出来る。
# /usr/local/knot/sbin/keymgr -c /etc/knot.conf example.com ds --- example.com. DS 28302 13 2 XXXXX example.com. DS 28302 13 4 XXXXX
keymgrで確認したDSレコードを、VALUE-DOMAINやゴンベエドメイン等のDSレコード対応レジストラ経由で登録する。
DSレコード登録方法はレジストラによって変わるので、ドキュメントを確認するか問い合わせる。
VALUE-DOMAINを使っている場合、DSレコード登録に対応しているccTLD/gTLDならば、
ネームサーバ設定欄に次の様なDNSSEC署名鍵設定が表示されるようになる。
サブミッション設定をしている場合、定期的にDSレコードを確認し自動的にDNSSEC署名が行われる。
手動でDNSSEC署名を開始する場合、DSレコードが上位権威DNSに登録されている事を確認した上で、
次のコマンドを打ち込むと署名を開始出来る。
# /usr/local/knot/sbin/knotc -c /etc/knot.conf zone-ksk-submitted example.com