自室IPv6化計画の続きです
前回
Unbound回
local-dataをやめてNSDを入れよう
Unboundのlocal-data便利ですね。なんの不満もなかったのですが安定しすぎてつまらないので、nsdを入れてlocal-dataを止めてみようと思いました。
もちろんほんのりトラブりました😇
インストール
Fedora41です。
SELinuxはEnforcingにしてますが、今回はトラブルを起こしました。
NSD4系からパッケージ配布が始ってるそうで、なんかネットみるとコンパイルしろー的な記事ばかりですが普通にパッケージインストールできました。
$ dnf install nsd
そして起動する前に先に設定を行います。Unboundでポート53を使っているのでDNS系のサーバは競合を起こします。
/etc/nsd/nsd.conf
をざっと眺めてみて特に必要な設定はポートくらいで、conf.d/とserver.d/の下をインクルードしているのでそちらに追加設定のファイルを置けばよさそうです。
サーバの設定をserver.d/の下にserver.conf
という名前で置くことにしました。また、zoneの設定ファイルを/etc/nsd/zones
の下にまとめることにしました。
ip-address: ::1@8053
zonesdir: "/etc/nsd/zones"
$ mkdir /etc/nsd/zones
それでは早速起動してみましょう。
$ systemctl start nsd
...
エラー
早速エラー('A`)
/var/lib/nsdにファイルが書き込めないどうのってでてきました。まじか
$ chown nsd:nsd /var/lib/nsd
では気を取り直して。
$ systemctl start nsd
...
エラー
まだか('A`)
今度はポート8053にbindできません(permission deny)と言われます。いやそこ誰も使ってないはず……と調べていると久々にSELinuxに阻まれていました。
SELinuxを設定するより許可されているポート853をそのまま使うのが楽そうだったのでserver.confを修正。
$ semanage port -l | grep dns
dns_port_t tcp 53, 853
dns_port_t udp 53, 853
dnssec_port_t tcp 8955
opendnssec_port_t tcp 15354
opendnssec_port_t udp 15354
ip-address: ::1@853
zonesdir: "/etc/nsd/zones"
$ systemctl start nsd
無事起動しました。
$ systemctl enable nsd
ゾーン設定
NSDにzoneを追加します。まずは各zoneを置く場所を用意。
$ mkdir /etc/nsd/zones
ゾーンの追加。
zone:
name: "home"
zonefile: "/etc/nsd/zones/home.zone"
追加したゾーンのレコード。
$TTL 86400
@ IN SOA ns1.home. admin.home. (
2025010101 ; serial
3600 ; refresh
1800 ; retry
604800 ; expire
86400 ; minimum
)
IN NS ns1.home.
ns1 IN AAAA fdxx:xxxx:xxxx::1000
minipc IN AAAA fdxx:xxxx:xxxx::1000
desktop IN AAAA fdxx:xxxx:xxxx::1
notepc IN AAAA fdxx:xxxx:xxxx::5
home.zoneはひな形をGemini先生に作ってもらいました。下の方はUnboundのlocal-dataの設定と同じです。
確認
-p 853
を付けてポート指定でdigります。
$ systemctl restart nsd
$ dig desktop.home @::1 -p 853 aaaa
...
;; ANSWER SECTION:
desktop.home. 86400 IN AAAA fdxx:xxxx:xxxx::1
NSDが上手く動いていればここまでで名前からIPアドレスを引けるようになります。
Unboundの設定
Unboundのlocal-dataを消しておきます。digって名前が解決できないことを確認しておきましょう。
$ rm /etc/unbound/local.d/home.conf
$ systemctl restart unbound
$ dig desktop.home aaaa
...
(失敗)
Unboundの設定でstub-zoneを追加します。権威DNSサーバが同じサーバ内にあるときはdo-not-query-localhost
の設定も必要です。
server:
...
do-not-query-localhost: no
...
stub-zone:
name: "home"
stub-addr: ::1@853
これでUnboundにhomeゾーンを問い合わせると::1@853
に再帰問い合わせしてくれるようになります。
今回homeというグローバルで使わないzone名なので不要ですが、zone名がグローバルでも使えるものの場合は外に見に行かないようにprivate-domain設定も入れておくのがよさげです。
server:
...
private-domain: "home"
それでは、いざ!
$ systemctl restart unbound
$ dig desktop.home aaaa
...
(失敗)
引けねー('A`)
ログを見るとverify云々とでておりGemini先生に聞いたところDNSSECで弾かれているとのことでした。
/etc/unbound/unbound.conf
を見てみるとmodule-config: "validator iterator"
がデフォルトになっていてこのvalidator
がDNSSECのことだそうです。さすがにvalidator
を抜くのははばかられたのでNSDにDNSSECを導入しようかと思ったら、導入もだけど運用がメンドクサ過ぎてヤバイ。
最初だけならともかくずっとメンドクサイのはツライので、ローカルホスト内だしhomeゾーンに対してはDNSSECを外すことにしました。
server:
...
private-domain: "home"
domain-insecure: "home"
serverセクションを変えたときは再起動が安定。
$ systemctl restart unbound
確認
$ dig desktop.home aaaa
...
;; ANSWER SECTION:
desktop.home. 86400 IN AAAA fdxx:xxxx:xxxx::1
キャッシュを消して再度確認。
$ unbound-control flush_zone home
$ dig desktop.home aaaa
...
;; ANSWER SECTION:
desktop.home. 86400 IN AAAA fdxx:xxxx:xxxx::1
DNSSECはもっと楽に運用ができるようになったら考えます('A`)