DNSのパッケージであるbind(named)でIPv6を無効にしたいといった場合、二つの意味合いがあります。
- IPv6でリッスンするのを無効にするのか
- IPv6の名前解決を無効にする(フィルター)のか
それぞれの方法について説明したいと思います。
レジュメ
環境・前提条件
- CentOS Linux release 7.3.1611
- bind 9.9.4-37
環境で説明します。
namedがIPv6でリッスンするのを無効にする方法
bindパッケージのnamedプロセスがIPv6でリッスンさせない設定方法は次の二つの方法があります。
どちらかを設定することにより無効化できます。
- namedの起動オプションで”-4”引数
- named.confでlisten-on-v6をnone設定
方法1、namedの起動オプションで”-4”引数
通常に
systemctl start named
で起動してもnamedプロセスには引数に”-4”オプションはついていません。
その場合は、上記画像のようにtcp6のLISTENがあることがわかります。
上記のようにnamedプロセスに引数”-4”オプションを付けることによって、tcp6のLISTENが消えていることがわかります。
ちなみに、namedプロセスに引数”-4”オプションをつけて起動させるためには
- /etc/sysconfig/named
ファイルに
OPTIONS="-4"
と記載しnamedサービスを再起動するだけです。
方法2、named.confでlisten-on-v6をnone設定
引数に“-4”オプションをつけなくてもIPv6へのリッスンを無効にする方法があります。
- /etc/named.conf
に上記のように、options部に
listen-on-v6 { none;};
と記載しnamedサービスを再起動します。(既存のlisten-on-v6設定をコメントアウトするだけでもIPv6リッスンが無効になりますが)
IPv6の名前解決を無効にする方法(フィルター)
結論から言いますと、残念ながらこちらは標準では設定不可です。
以下のようにnamedをコンパイル時にオプションをつけてコンパイルすることにより
IPv6の名前解決を無効(厳密にはフィルタリングする)オプション”filter-aaaa-on-v4”を使用できるようになります。
IPv4のレコートタイプはA、IPv6のレコードタイプはAAAA
ちなみに、
- IPv4で定義されたレコードはAレコード(タイプA)で
- IPv6で定義されたレコードはAAAAレコード(タイプAAAA)です
IPv4なのかIPv6なのかはレコードタイプが分かれています。
つまり、DNSクライアントが名前解決したい時に、
- Aレコードで解決したいか、
- AAAAレコードで解決したいか
をDNSサーバーに問い合わせた結果、DNSサーバーが
- Aレコード要求ならIPv4
- AAAAレコードならIPv6
を応答しているわけです。
DNSクライアントがAレコードを指定して問い合わせしてくれば、DNSサーバーはAレコード(IPv4)しか応答を返しません。