「とりあえず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はこちら。


コメント