0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unboundで特定IPアドレスからの問合せのみIPv6アドレスの応答を無効にする

Last updated at Posted at 2024-09-23

タイトルのとおり、特定の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
また、こういう設定があるよ!というアドバイスも大歓迎です。

  1. No.1の接続を行っているルーターでPPPoEパススルーの設定を行い、その配下にPPPoE接続を行うルーターを接続しています。このため、物理的な回線は1本になります。

  2. プラシーボ効果である可能性が否めません・・・

  3. private-address: ::/0 を設定するだけで事足りるかもしれませんが。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?