【BIND9講座 第11回】プロは「無効化」しない!IPv6完全対応とサーバーを限界まで使い倒すチューニング術

「とりあえずIPv6無効化」はもう古い

こんにちは!「リナックス先生」です。
BIND9講座、第11回へようこそ。

皆さんはLinuxサーバーを構築する時、おまじないのように「IPv6を無効化(disable)」していませんか?
確かに一昔前は、IPv6由来のトラブルが多く、無効化が定石だった時代もありました。

しかし、今はもう令和もだいぶ進んだ時代です。
Google、Netflix、Facebookなどの主要サービスはIPv6での通信を推奨しており、スマホ回線の多くもIPv6が標準です。
DNSサーバーだけが「IPv4しか喋れません」と言っていると、名前解決の遅延や、一部サイトへの接続不調を引き起こす原因になります。

今回は、BIND9を「IPv6ネイティブ」に対応させ、さらにメモリやCPUを効率よく使うためのチューニングを施して、プロ仕様の足回りに仕上げていきます。

コウ君

先生、ドキッ!としました。
僕、いつもの癖でOSインストール直後に ipv6.disable=1 ってやっちゃってます…。
DNSでIPv6対応って、単にAAAAレコードを書けばいいだけじゃないんですか?

リナックス先生

レコードも大事だけど、それ以前に「IPv6で質問を受け付ける準備」ができていないとダメよ。
一番怖いのは「IPv6を有効にした途端、ACL(アクセス制限)に引っかかって誰も使えなくなる」という事故。
今日はそこを重点的にケアしていくわよ!

1. BIND9のIPv6完全対応

まずは、BINDがIPv6で通信できるように設定を見直します。
OS側でIPv6アドレスが割り当てられていることが前提です(ip a コマンドで確認してください)。

1-1. named.conf の listen-on 設定

第2回で設定した listen-on-v6 を覚えていますか?
ここを none にしていると、BINDはIPv6の耳を塞いでしまいます。

sudo vi /etc/named.conf

▼修正箇所

options {
    # IPv4の待ち受け
    listen-on port 53 { 127.0.0.1; 192.168.1.10; };
    
    # IPv6の待ち受け(any推奨、または自分のIPv6アドレスを指定)
    listen-on-v6 port 53 { any; };
    
    # (省略)
};

1-2. 【最重要】ACLへのIPv6追加

ここが最大の落とし穴です。
第7回で設定したACL「trusted」に、IPv4のアドレスしか書いていない場合、IPv6でアクセスしてきた正規ユーザー(社内のPCなど)が「部外者」として拒否されてしまいます。

最近のOS(Windows 11など)は、IPv6が使える環境では優先してIPv6でDNSに問い合わせようとします。
その結果、「IPv6を有効にしたらネットが繋がらなくなった!」というトラブルになります。

▼ACLの修正(IPv6アドレスを追加)

acl "trusted" {
    127.0.0.0/8;
    192.168.1.0/24;
    
    # --- ここから追加 ---
    ::1/128;               # IPv6のローカルホスト
    fe80::/10;             # リンクローカルアドレス(LAN内通信用)
    2001:db8::/64;         # 割り当てられているグローバルIPv6範囲
};

fe80::/10 はLAN内での通信によく使われるので、入れておくと安心です。

1-3. ゾーンファイルへのAAAAレコード追加

正引きゾーンファイルにも、IPv6用のレコード(AAAAレコード)を追加しましょう。
kou-house.lan 自体にIPv6アドレスを持たせる場合です。

; IPv4 (Aレコード)
ns1     IN  A       192.168.1.10

; IPv6 (AAAAレコード)
ns1     IN  AAAA    2001:db8::10

1-4. 動作確認

再起動後、dig コマンドでIPv6経由の問い合わせをテストします。
-6 オプションを使います。

dig @::1 google.com -6

ちゃんと答えが返ってくれば、IPv6対応は完了です!

2. パフォーマンス・チューニングの鉄則

次に、サーバーのリソース管理です。
BINDはデフォルト設定のままだと、「メモリを食いつぶす」「接続数制限で詰まる」かのどちらかになりがちです。
運用規模に合わせて適切なリミッターを設定するのがプロの仕事です。

2-1. メモリ使用量の制限 (max-cache-size)

キャッシュサーバーとして運用していると、世界中のドメイン情報をメモリに溜め込みます。
デフォルトでは、搭載メモリの 90% までキャッシュに使おうとします。

WebサーバーやDBサーバーと同居している場合、これは致命的です。
BINDがメモリを食い尽くし、OOM Killer(Linuxの強制終了機能)によってMySQLが殺される…なんて悲劇を防ぐために、上限を設定します。

▼options内に追加

options {
    # (省略)
    
    # キャッシュサイズを最大 512MB に制限
    # ※VPSのメモリが1GBならこれくらいが安全
    max-cache-size 512m;
};

指定したサイズに達すると、古いキャッシュから自動的に破棄してくれます。

2-2. 同時接続数の拡張 (recursive-clients)

「DNSが遅い」「タイムアウトする」という問い合わせが来た時、疑うべきはCPUではなく「クライアント数の上限」です。
BINDはデフォルトで、同時に処理できる再帰問い合わせ(recursive-clients)の数が 1000 に制限されています。

社員数が多い企業や、アクセス集中時には、この1000という数字は意外とすぐに埋まります。
上限に達すると、1001人目のリクエストは無視(ドロップ)されます。

▼options内に追加

options {
    # (省略)
    
    # 同時接続数を 3000 に増やす
    recursive-clients 3000;
    
    # TCP接続(ゾーン転送や大きなパケット用)の上限も増やしておく
    tcp-clients 500;
};

※ただし、増やせば増やすほどメモリを消費します(1クライアントあたり約20KB)。
recursive-clients 3000 なら約60MBのメモリを追加で消費する計算になります。

3. 現在の負荷状況を確認する (rndc status)

チューニングの効果を確認したり、現在の負荷を知るためには rndc status コマンドが役立ちます。

sudo rndc status

▼実行結果の読み方(抜粋)

version: BIND 9.16.23-RH ...
CPUs found: 2
worker threads: 2
UDP listeners: ...
recursive clients: 45/2900/3000  <-- ここに注目!
tcp clients: 2/500
...

recursive clients: 45/2900/3000 の意味:

  • 45: 現在処理中のクライアント数
  • 2900: ソフトリミット(警告ライン)
  • 3000: ハードリミット(設定した上限)

ここの「現在処理中(45)」が、上限(3000)に張り付いているようなら、設定値を増やすか、あるいはDDoS攻撃を受けている可能性があります。

4. その他のおすすめチューニング

細かいですが、効果のある設定をいくつか紹介します。

① minimal-responses (パケットサイズ削減)

DNSの応答には、親切心で「関連する情報(Additional Section)」を詰め込む仕様があります。
しかし、これはパケットサイズを肥大化させ、DDoS攻撃(DNSアンプ)の威力を高めてしまいます。
必要最小限の答えだけを返す設定にします。

options {
    minimal-responses yes;
};

② cleaning-interval (掃除の間隔)

※BIND 9.16以降では自動調整されるようになったため、手動設定は非推奨になりました。
古い記事では「設定すべき」と書かれていますが、AlmaLinux 9では設定しなくてOKです。BINDにお任せしましょう。

5. 設定の反映

すべてのチューニングが終わったら、構文チェックと再起動を行います。

sudo named-checkconf
sudo systemctl restart named

再起動後、rndc status で設定値(上限など)が反映されているか確認してください。

コウ君

recursive-clients の上限なんてあったんですね!
「DNSが遅い」って言われた時、サーバーのCPU使用率ばっかり見てました…。
ここが詰まってたら、いくらCPUが暇でも繋がりませんよね。勉強になります!

まとめ:止まらないサーバーを作るために

第11回では、IPv6対応とパフォーマンスチューニングを行いました。

  • IPv6対応listen-on-v6 { any; }; だけでは不十分。ACLへの追加を忘れない。
  • max-cache-size でメモリ使用量にキャップ(蓋)をする。
  • recursive-clients のデフォルト(1000)は、大規模環境では不足する可能性がある。
  • rndc status で現在の接続数を確認し、ボトルネックを特定する。

これで、あなたのDNSサーバーは、IPv6のアクセスもさばき、高負荷時にもメモリ枯渇で落ちることのない「強靭なインフラ」になりました。

いよいよ次回は最終回(第12回)です。
最後は、これまでの設定を全て無に帰さないための「バックアップと復旧」、そして万が一動かなくなった時の「トラブルシューティング・フローチャート」を解説します。
全12回の総まとめとして、絶対に保存しておきたくなる記事にしますので、最後までお付き合いください!

▼高負荷テストを行えるVPS

チューニングの効果を実感するには、実際に負荷をかけたり、メモリの少ない環境で制限をテストするのが一番です。リソース変更も柔軟なAlmaLinux 9対応VPSはこちら。

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント