事の始まり
仕事でOCI証明書サービスの話が出て、自宅サーバのCockpitにOCIで発行した証明書インストールしてみっか!と思ったら、Windowsマシンからサーバにホスト名でアクセスできなかったw
dnsmasqでDNS/DHCPサーバを作っていて、Linuxサーバ同士では問題なかったのだけど、Windowsマシンは無線ルータのIPv6アドレスが優先DNSサーバになっていて名前解決できなかった。IPv6有効でもちゃんと名前解決できるようにしようと決意。
目指す姿
- 無線ルータのIPv4/v6アドレスがデフォルトゲートウェイに設定されること
- dnsmasqを動かしているサーバのIPv4/v6アドレスがDNSサーバとして登録されること
登場する機器およびソフトウェア
とてもシンプル。
- 無線ルータ/Aterm WX1500HP
- DNS・DHCPサーバ/dnsmasq-2.79-31.el8_9.2.aarch64
- Windowsマシン
今回の肝はおそらくAterm。家庭用の無線ルータで後述の設定ができるのはAtermしかないんじゃなかろうか。
こうすればできるはず
無線ルータが出すRAパケットのRDNSSオプションでdnsmasqが動いているサーバのIPv6アドレスを伝えればよい。
→ 残念ながらそんな機能はAtermにはない。
dnsmasqもRAパケットを出せるようなので、こちらで伝えれば良いのでは?
→ 複数の機器がRAパケット出したらどうなるのか分からないけど、やってみるべ!
実装
dnsmasqの出すRAのカスタマイズ①
そのまま実装するとdnsmasqが動いているサーバがデフォゲに登録されてしまうので対処。
ra-param=<インターフェイス名>,60,0
60はRAの送出間隔? AdvRDNSSLifetimeはデフォルト300っぽく、0をセットするとRAがしばらく送出されないタイミングでWindowsマシン側でDNSサーバのエントリが消えるという事象が発生。期限切れにならなきゃいいので60。もうちょっと大きい数字でも良いかも。
AdvDefaultLifetimeが0だとデフォゲとして登録されなくなる。末尾の0がそれ。
dnsmasqの出すRAのカスタマイズ②
無線ルータが出すRAのprefixと同じものを出すために学習したものをそのまま再利用する。
あと、RAパケットのAdvOtherConfigFlagをOnにすれば、DHCPv6でDNSサーバを聞いてくるようになるのでra-statelessをセット。
dhcp-range = ::,constructor:<インターフェイス名>,ra-stateless,ra-names
なお、ra-statelessじゃなくslaacだとAdvOtherConfigFlagがOffになる。
ra-namesは入れてみたけど、うまく動く相手がいなかった。まあ、邪魔にはならないと思う。
dnsmasqの出すRAのカスタマイズ③
RDNSSオプションの指定はどうするのだろうと思ったら、dhcp-optionの値がそのまま使われるっぽい? DHCPv6用の設定でもあるので、一石二鳥。
dhcp-option = option6:dns-server,[<自身のIPv6アドレス(グローバル)>]
グローバルである必要があったかどうかは、知らないw
まとめるとこんな感じ
IPv4とv6両方動くようにするにはこんな感じ。
enable-ra
ra-param=<インターフェイス名>,60,0
dhcp-range = <IPv4のDHCPのレンジ(開始)>,<IPv4のDHCPのレンジ(終了)>,24h
dhcp-range = ::,constructor:<インターフェイス名>,ra-stateless,ra-names
dhcp-option = option:router,<デフォゲ(IPv4)>
dhcp-option = option:dns-server,<自身のIPv4アドレス>
dhcp-option = option6:dns-server,[<自身のIPv6アドレス(グローバル)>]
dhcp-option = option6:information-refresh-time,6h
リース時間やリフレッシュ時間は適当に変更してね。
Aterm側の設定
dnsmasqと違っていろいろできないが、今回のような環境だとずばりの設定ができる。
- DHCPv6サーバ機能は「使用する(stateless)」
- DHCPv6によるDNSv6サーバアドレス通知は「OFF」
- RAオプションによるDNSv6サーバアドレス通知も「OFF」
「使用する(stateless)」はdnsmasqのra-statelessと同じで、RAパケットのAdvOtherConfigFlagがOnになる。iPhoneだとdnsmasq側のRAパケットは見てくれず、DHCPv6で問い合わせもしてくれなかった。Windowsマシンは見てくれたのに。AdvDefaultLifetimeが0だからかなあ?
家庭用の無線LANルータでこんな細かい設定ができるとはさすがAterm。
しかも、使っているのはエントリモデルですよ。
最後
radvd使ってRAパケットを送出する方法はぐぐれば色々出てきたけど、Atermとdnsmasqだけで済ませられたのが良かった。さーて、証明書サービスいろいろ試すかー。