タイトルのとおり、特定のIPアドレスからDNSルックアップが行われた際に、IPv6アドレスの応答を行わない方法(俗に言うAAAA Filterみたいなもの)です。
なぜ必要だったか
現在、自宅のネットワークは以下のようになっており、IPv6でインターネットへアクセスできないネットワークがあります。
No | 概要 | IPv6到達性 |
---|---|---|
1 | フレッツ光(IPoE、IPv4 over IPv6) | あり |
2 | フレッツ光(PPPoE)1 | なし |
3 | マンション備え付けの無料インターネット | なし |
あまり気にする必要は無かったかもしれませんが、No.2のネットワークにてWebページのIPv6、IPv4両方に対応しているWebページの表示が気持ち遅いように感じられました。
このため、DNSでIPv6アドレスの応答を行わないようにしてみたところ、気持ち早くなったような気がした2ので、IPv6アドレスの応答を行わないDNSサーバを立てることにしました。
動作確認時のバージョン
- OS:Rocky Linux 8.10
- Unbound:1.16.2
※基本的には、上記のバージョン以降で動作するかと思いますが、確実に動くことを保証するのものではありません。
設定案
検証を行った際は、それぞれのネットワークに独立したDNSサーバを仮想マシンとして構築していました。
しかし、おうちネットワークという都合上、仮想基盤のリソースは限られているため、どうにかして1つのサーバにまとめられないか、試行錯誤しました。
- 案1:それぞれのネットワークごとに独立したDNSサーバを構築
- リソース的にあまり採用したくない
- うまくいかなかったときの最終手段
- 案2:1つの仮想サーバにUnboundのインスタンスを複数立てる
- 2つ目のインスタンス以降は、Systemdの設定ファイルを自分で作成しないといけない
- 複数インスタンスを立てることにより、リソース的にも微妙?
- 何よりスマートじゃない
- 案3:View機能を使用する
- これが使えないか?
案3で構築できないかという方向で調査を進めましたが、UnboundでIPv6応答を行わない設定をググって見ると、出てくるのは server:
セクションに private-address: ::/0
を指定するものばかり。
view:
セクションには private-address: ::/0
が使用できないため、「特定のIPアドレス」から問合せのみIPv6アドレスを応答しないという目的を達成できません。
万事休すかと思われましたが、response-ip:
という設定があることを知り、これを使用することで設定できました。
実際の設定
今回の設定に絡む部分だけ抜粋した設定になります。
※設定中のIPアドレスは、例示用のIPアドレスを使用しており、実際のIPアドレスとは異なります。
server:
access-control-view: 192.0.2.0/24 "IPv6 Only"
access-control-view: 2001:db8::/32 "IPv6 Only"
access-control-view: 198.51.100.0/24 "IPv4 Only"
view:
name: "IPv6 Only"
local-data: "time.apple.com IN A 192.0.2.5"
local-data: "time.apple.com IN AAAA 2001:db8::1"
view:
name: "IPv4 Only"
response-ip: ::/0 redirect
local-data: "time.apple.com IN A 198.51.100.5"
「IPv6 Only」と「IPv4 Only」という2つのViewを作成し、「IPv4 Only」のViewでは、IPv6アドレスを返さないように response-ip: ::/0 redirect
を設定しています。
server:
セクションでは、どのIPアドレスからの問合せを、どのViewで処理するかを access-control-view:
を使用して設定しています。
あとは、iOSデバイス用とかにLAN内のNTPを使用するようにDNSを書き換えたり・・・。まだ他にもAppleデバイスが使用するNTPサーバのFQDNはありますが、ここでは割愛しています。
最後に
本当はIPv6がどのネットワークでも使用できるようにして、AAAA Filterを行わずにすむようにしたいのですが、どう頑張ってもIPv6を使用することが出来ないネットワークは出てくるかと思うので、そういった際の一助になれば幸いです3。
また、こういう設定があるよ!というアドバイスも大歓迎です。