自室IPv6化計画の一環です
動機
IPv4の時はサーバ系のアドレスを192.168.11.xxxで手動設定しており、覚えるのは最後の3桁だけだったので簡単に覚えられました。
IPv6にしたらULAの先頭のfdxx.xxxx.xxxxが覚えきれない/(^o^)\
覚えるのを諦めてDNSを導入することにしましたが、以前BINDを使ってものすごく疲弊してDNS自体が暫くトラウマになってたので、簡単と噂のUnboundを使ってみることにしました。
実際めちゃくちゃ簡単で書く内容がほぼなかったのですが、ちょっとだけ躓いたところもあるのでメモだけ残しておきます。
インストール
Fedora40です。
SELinuxはEnforcingにしてますが、特に問題は起きませんでした。
# unboundを使うのでsystemd-resolvedを止める
$ systemctl disable systemd-resolved
$ systemctl stop systemd-resolved
$ mv /etc/resolv.conf /etc/resolv.conf.bk
# unboundのインストール
$ dnf install unbound
$ systemctl enable unbound
$ systemctl start unbound
IPv6のport:53が開いていればOKです
$ ss -na | grep 53
udp UNCONN 0 0 [::]:53 [::]:*
tcp LISTEN 0 256 [::]:53 [::]:*
$ lsof -i:53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
unbound 1167 unbound 3u IPv6 9153 0t0 UDP *:domain
unbound 1167 unbound 4u IPv6 9154 0t0 TCP *:domain (LISTEN)
最終的にavahi(mDNS|port:5353)も止めました
$ systemctl stop avahi-daemon.socket
$ systemctl stop avahi-daemon.service
$ systemctl disable avahi-daemon.socket
$ systemctl disable avahi-daemon.socket
resolv.confの修正
systemd-resolvedを止めたのでNetworkManagerが起動時に/etc/resolv.confを作るようになります。なのでNetworkManagerのDNSの設定を修正しておきます。
$ vi /etc/NetworkManager/system-connections/<IFの名前>.nmconnection
[ipv4]
...
# IPv4でも使うなら127.0.0.1、IPv6でのみ利用ならルーターのアドレスや1.1.1.1等
dns=127.0.0.1
dns-priority=10
[ipv6]
...
dns=::1
dns-priority=9
dns-priorityは小さな値ほど優先されるようなので、今回IPv6でDNSをしたい!ってことなのでIPv6を優先させます。
これでNetworkManagerを再起動するとresolv.confが書き換わっています。
$ systemctl restart NetworkManager
$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver ::1
nameserver 127.0.0.1
unbound.confの設定
$ vi /etc/unbound/unbound.conf
confの中の項目ごとにめっちゃドキュメント書いてあるのが素敵ですね。
だらだら眺めているとremote-controlとか怖い文字列の項目を見たのでセキュリティ対応が必要かなってinclude先まで探ってみると、待ち受けがportではなくファイル(socket)になっていたのでまぁ一安心。unbound-controlコマンドを受け付けるsocketになっているようです。
unbound.confやその下のconf.dやlocal.dの中身を書き換えた後は一部を除いてreloadすれば有効になります。
$ systemctl reload unbound
IFの設定
# 待ち受けアドレス。他の端末からIPv6で参照できるように
interface: ::0
# portがLISTENされてても、アクセスコントロールの許可がないとRefuseを食らう
access-control: fdxx:xxxx:xxxx::/64 allow
# IPv4でも使うならコチラも設定
interface: 0.0.0.0
access-control: 192.168.xx.xxx/24 allow
この辺書き換えた後はunboundの再起動が必要だって書いてました。
# The listen interfaces are not changed on reload, only on restart.
ログの設定
# デフォルトはログ無しだけど、初心者なのでトラブル対応用に
logfile: "/var/log/unbound/unbound.log"
use-syslog: no
トラブル対応用にログはいるよね~って出そうとしたら、ログの出力でトラブルやがな(´・ω・`)
ログがでないなーって思ったらunboundのユーザーがunboundなので/var/log以下へのアクセス拒否を食らってました。
$ mkdir /var/log/unbound
$ chown unbound:unbound /var/log/unbound
上位DNSの設定
室内端末以外は丸投げです。
nameでドメイン名を指定すればそのドメインに対してだけforwardを設定することができますが、丸投げの時は"."だけ書けばいいようです。
Use an entry with name "." to forward all queries.
forward-zone:
name: "."
forward-addr: 1.1.1.1
forward-addr: 8.8.8.8
おしまい
簡単!☺️
一応digったりpingしたりして、上位サーバから名前を引っ張ってこれているか確かめておきます。
$ systemctl restart unbound
$ dig www.google.com
$ dig www.google.com aaaa
ローカルアドレスを設定する
お待ちかねローカルアドレスの設定です。ローカルアドレスと名前はlocal.dの下に書くのがお作法のようです。
$ cd /etc/unbound/local.d
$ vi home.conf
今回はdesktop.homeとかnotepc.homeとかhomeドメインにしたのでhome.confとしましたが、unbound.confで次のようになっているので.confがついていればファイル名は何でもOKです。
include: /etc/unbound/local.d/*.conf
home.confの中にAAAAレコードを記述します。
# FQDNは.を名前の最後に付けるのがお作法(一応無しで試しても動いた)
local-data: "minipc.home. IN AAAA fdxx:xxxx:xxxx::1000"
local-data: "desktop.home. IN AAAA fdxx:xxxx:xxxx::1"
local-data: "notepc.home. IN AAAA fdxx:xxxx:xxxx::2"
後はreloadすれば有効になります。
$ systemctl reload unbound
$ dig desktop.home aaaa
Windows側の設定
サーバのFirewallでDNSが通るようになっているか確認しておいてください。
$ firewall-cmd --list-services
dns ssh
Windowsのネットワークの設定でIPv6のDNSにサーバのアドレスを突っ込みます。DHCPv6やRDNSSを使えばDNSの設定を自動化できますが、それはまた次回。
これでもう名前解決ができるようになってます。
> nslookup desktop.home