ネットワーク内で"ctu.uchino"
等、ローカルドメインでアクセスできるようにする。
mDNSも良いけど非対応のデバイスもいろいろとあるのでサーバーマシンを用意できるならDNSを建てるのが安定する。 ルーター側の設定で済むのでクライアント側は特になにも設定する必要がないのがメリット。
アクター
- PR-400KI
- NTTの第四世代光電話ルーター。2012年2月製造なのでもう10年選手。故障しないのでいつまでたっても旧型。
- OrangePi Win
- ラズパイの類似製品。Ubuntu FocalベースのArmbianでサーバーとして動作中。略しておっぱい。絶版。
- unbound
- BIND以降のDNSキャッシュサーバー。簡易的なコンテンツサーバ機能もある。
手順としては、OrangePiへunboundをインストールし、PR-400KIの「ローカルドメイン問合せテーブル」へ追加する。 多少イレギュラーな部分もあったので、以下に細かく記載した。
dnsサーバーの構築
unboundをインストール。
$ sudo apt install unboud
起動に失敗するので53番ポートを使用している犯人を探す。
$ sudo ss -lntp | grep 53
systemd-resolvedが動作しているようなので停止する。
$ sudo systemctl stop systemd-resolved
$ sudo systemctl disable systemd-resolved
unbound.conf
を編集してlocal-dataをいくつか追加する。
$ sudo jed /etc/unbound/unbound.conf.d/unbound.conf
server:
interface: 0.0.0.0
access-control: 127.0.0.0/23 allow
access-control: 192.168.1.0/23 allow
local-data: "ctu.uchino. IN A 192.168.1.1"
local-data: "wifi.uchino. IN A 192.168.1.20"
local-data: "orange.uchino. IN A 192.168.1.8"
local-data: "office.uchino. IN A 192.168.1.9"
local-data: "bedroom.uchino. IN A 192.168.1.10"
local-data: "livingroom.uchino. IN A 192.168.1.11"
...
起動する。
$ sudo systemctl start unbound
$ sudo systemctl enable unbound
動作確認。
$ dig @127.0.0.1 ctu.uchino
ルーターの設定
続いて、ルーター(PR-400KI)側へDNSサーバーを登録する。
登録は、詳細設定>DNS設定、ローカルドメイン問合せテーブルへ行を追加。
ドメイン名は、先頭にワイルドカード(*)が使える。
サーバーアドレスはIPv4アドレスは弾かれるが、
IPv4射影アドレス(IPv4-mapped IPv6 address)へ変換してやると登録できた。
IPv4射影アドレスの作り方
IPv6アドレスの全128ビットのうち上位80ビットを0埋め、続く16ビットを1埋め、残る下位32ビットへIPv4アドレスを埋め込む。 "192.168.1.8"を例にとると、ドット区切りごとで16進数に変換すると"C0A8:0108"となる。上位96ビットは固定で"::ffff"。 結合した、"::ffff:C0A8:0108"がIPv4射影アドレスとなる。
Javascriptで関数化すると以下の通り。
function ipv4_to_ipv6(ip) {
const a = ip.split('.').map(x => parseInt(x, 10).toString(16).padStart(2, '0'))
return `::ffff:${a[0]}${a[1]}:${a[2]}${a[3]}`
}
以下は、"*.uchino"ドメインを192.168.1.8で名前解決する例。
ドメイン名: *.uchino
プライマリDNSサーバアドレス: ::FFFF:C0A8:108
セカンダリDNSサーバアドレス:
最後にクライアント側からアクセスできるか確認して終了。
ブラウザでアクセスしてみるのが手っ取り早い。