- ベストアンサー
DNSサーバ構築における再帰問い合わせ制限とインターネット接続
- DNSサーバ構築において再帰問い合わせ制限を行うと、クライアントPCからのインターネット接続や応答ができなくなる問題が発生します。
- 再帰問い合わせ制限を設けずにインターネット接続を行う場合、resolv.confによそのDNSサーバIPアドレスを指定する必要があります。
- 自DNSサーバがある場合でも、インターネット接続を行うためにはよそのDNSサーバをresolv.confに指定する必要があります。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
それでは、TRUSTに127.0.0.1を入れてください。 ここまで来ると、Linuxのネットワークの設定の問題ですかね。 resolv.confのDNSサーバーはどのように設定していますか? 一般的に、DNSサーバーがクライアントとして参照するDNSサーバーは 自分自身にしません。 これはLinuxでもWindowsでも一緒です。 理由は、DNSサーバーがクエリーを行う時の動作に起因するのですが。。。。 説明すると非常に長くなるので辞めておきます。 私自身、LinuxやWindowsを含めDNSサーバーは数十台構築していますが 自分自身(localhostや、127.0.0.1、IPアドレス)に設定しません。 部下が良く自分自身をDNSサーバーに設定していますが、思う通りに動かなかったり bindの停止時の二次障害が発生するため、変更するように指示しています。 なぜダメか、どうのように動作するかは、オライリーのDNS&BINDを熟読すれば理解出来るでしょう
その他の回答 (8)
- maesen
- ベストアンサー率81% (646/790)
BINDのマイナーバージョンによる違いについてまでは把握していませんが、 >allow-recursionはoptions内しか記載出来なかったはずかと思います。 viewのなかにはoptionsの多くが記述することができ、allow-recursionもその一つのはずですが。 先人たちのnamed.confも参照して頂ければと思います。 >messagesログは全く、出ていません。 allow-recursionの記述で振る舞いが変わるわけですので、何らかの理由で問い合わせが制限されている可能性が高いわけなので、 named.confにlogging設定するとか、デバッグレベルを高くするなどしてログが出力されるようにすべきでは。
補足
allow-recursionですが、viewを指定しない設定で、optionsのみに記載した際にも こうした事象が出ていました。 ですので、viewの中に限定する事がいいものかといった感触があります。 logging設定は確認します。 viewの記載はいろいろ、試してみます。 また、pakuti様が回答されてるように、resolv.confに自DNS以外にセカンダリやその他のDNSを指定しますので、allow-recursionの設定如何に関係なく 自DNS管理以外の名前解決は出来る事になるかと考えています。 今の設定で、他所からクエリを投げかけてきてdeniedしてるログもあるので いちよ、動きとしては問題ないのかとも考えております。
- pakuti
- ベストアンサー率50% (317/631)
質問です。 ・該当サーバーのIPは、定義上のlanですか?wanですか? ・やりとりで、resolv.confに自分自身を記述しているとあったような気がしますが なぜ、自分自身のIPを記載するのですか? 恐らくはですが、Linuxマシンがどうやって名前解決をするのか bindが動作していて、自分自身をDNSサーバーとして指定した場合に どのような動作をするのか が理解出来ていないように思われます。 TRUSTにサーバーのIPを追加するか それが無理であれば、resolv.confには自分でないDNSサーバーを指定するか どちらかにする必要があるかと思われます。
補足
今回のケースでは、該当サーバのIP はプライベートを振っています。 acl TRUSTには当該プライベートIPの同一セグメントのネットワークを指定しています。 そしてview lanの中に、内部ネットワークからアクセス出来るような定義をしています。 以前、DNSにグローバルIPを振っていた時に再起関係の設定を入れて、 aclの設定などはしていなかったのですが 同じ事象が起こった経験がありました。その際にはresolv.confに他のDNSを指定しました。 resolv.confとbindの動作について、確認します。
- maesen
- ベストアンサー率81% (646/790)
>allow-query、allow-recursionで制限をかけなければ >自DNSサーバから・クライアントPCからwww.yahoo.co.jp等の名前解決は出来ます。 そうであれば、 TRUSTの内容に問題があるか、 view "lan" 内の設定に問題がある可能性が高いように思いますが、 設定ファイルが全文なものではないのでこれ以上は難しいですね。 既に実施しているとは思いますが、ログを見ながら原因追及していくしかないかと。 問題点の解決にはならないと思いますが、 viewを使用しているのでallow-query、allow-recursionはviewのなかに書いたほうがいいと個人的には思います。
補足
named.confは各zoneの記載以外は全てとなります。 TRUSTについては、いろいろ試してみます。 ですが、以前、今回の環境とは異なる(グローバルIPを割り当てて) TRUSTを指定しない際での allow-query・allow-recursionを書いた場合にも 同じ事がありました。 その時はresolv.confに外部DNSを入れました。(allow-系の記載をしなかったかも。。) viewの中のallow-query、allow-recursionを記載ですか。。 allow-queryはoptionsと各zoneで記載出来る事は認識があります。 options内でnoneにして、zone内でanyにするなど。 allow-recursionはoptions内しか記載出来なかったはずかと思います。 allow-query、allow-recursionで制限記載して、自DNS管理以外の名前解決・ 内部ネットワークからの外部アクセスを行った際、 messagesログは全く、出ていません。
- pakuti
- ベストアンサー率50% (317/631)
他の回答を読んでいないので的外れなのかもしれませんが なぜ、optionsを閉じないのでしょう?
補足
コンフィグは抜粋してる所がありますので。。 optionsのコンフィグを }; で閉じなければ、 messagesにエラーとして出るはずのですので その時点で問題は確認できるかと思います。 自DNSにあるzoneにはhostコマンドなりで名前は引けますので。。 当方の確認作業によって、明らかに問題を起こしてるであろう箇所を掲載したまでです。 コンフィグをすべて掲載していない点は当方の落ち度かと思います ▼以下が、named.confになります。 acl "TRUST" { 192.168.xxx.0/24; }; options { version "unknown"; allow-transfer { none; }; allow-query { none; }; allow-recursion { none; }; }; # LAN用VIEW view "lan" { match-clients { TRUST; }; match-destinations { TRUST; }; }; # WAN用VIEW view "external" { match-clients { any; }; match-destinations { any; }; # 再帰問い合わせに応答しない recursion yes; # WAN向け 正引きゾーン定義 zone "XXX-XXX.com" { type master; file "./master/XXX-XXX.com/XXX-XXX.com.wan.zone"; allow-update { none; }; check-names ignore; allow-query { any; }; }; };
- maesen
- ベストアンサー率81% (646/790)
>>TRUSTのacl >これは当然設定しています。ネットワークも正確に設定済みです 当然と書かれていますが、貴方が書かれている質問から読み取るのは不可能だと思います。 貴方が大丈夫だと思っている箇所に問題がある可能性もあるので、このような質問をする場合には設定ファイルは全文載せるのが筋だと思うのですが。 >>allow-query、allow-recursionで制限を掛けなければwww.yahoo.co.jp等の名前解決は出来ると解釈してよろしいでしょうか。 >これ以外に、recursionをyesにすると自DNSからping・クライアントPCから外部サイトにアクセスできません。 残念ですが私の問いに対する回答が判断できません。 >resolvには自DNSサーバIPの他にプロバイダなどのDNSサーバを入れてやらないといけないのかという事です 別の方も説明していますが、どのようなネットワークに、どのようなDNSサーバを構築するかに依存する話です。 ただ、必須(Must)であるかというの質問ならば必須ではありません。 >forwaderの設定するのはこうした不都合を解消させるためなら >この設定を仕込む事になるのでしょうね。 ご存じだとおもいますが、forwardersの設定は、 そのDNSサーバが管理していないゾーンに対してどのように振る舞うか設定の一つの方法です。 特定のDNSサーバに問い合わせるのがforwarders。 ルートサーバに問い合わせる場合はルートヒントを使用する。 といった設定のどちらかにするのが多くのケースだと思います。 >forwderにIPを仕込んでも、resolv.confにも自DNSサーバ以外に >外部通信のためのDNSを追記しないといけない感じです。 通常、こんなことはしないのでどこかに問題があると思います。 それが設定ファイルなのか、ネットワーク構成に依存するものなのか、それ以外なのかはわかりませんが。 >貴殿では、いままでDNSサーバ構築いおいて、このような経験はありませんでした? ありません。
補足
では、もう一度。 >>allow-query、allow-recursionで制限を掛けなければwww.yahoo.co.jp等の名前解決は出来ると解釈してよろしいでしょうか。 allow-query、allow-recursionで制限をかけなければ 自DNSサーバから・クライアントPCからwww.yahoo.co.jp等の名前解決は出来ます。 その他に、allow系の設定を無効にしても、recursionをyesにした場合 自DNSサーバから・クライアントPCからwww.yahoo.co.jp等の名前解決が出来ません。 ネットワーク構成は、1,2番の回答者が記載されている以下の構成です。 外部DNSサーバ(プロバイダ等) ↑ ↓ インターネット ↑ ↓ 【ルータ外側IPアドレス(α)】 ルータ ←→ 外向けDNSサーバ(A) 【ルータ内側IPアドレス(β)】 ↑ ↓ クライアントPC(B) ■上記構成以外でも、以下のネットワーク構成でも同じ事がありました。 外部DNSサーバ(プロバイダ等) ↑ ↓ インターネット ↑ ↓ 【DCに設置してあるルータ外側IPアドレス(α)】 ルータ ←→ 外向けDNSサーバ(A)--GlobalIP割り当ててる 【DCに設置してあるルータ内側IPアドレス(β)】 ↑ ↓ クライアントPC(B) named.confに再起問い合わせ関係の設定を入れなければ外部への通信、 名前解決は出来ます。
- maesen
- ベストアンサー率81% (646/790)
>allow-query allow-recursion の再帰問い合わせ制限をかけると、クライアントPCから当該DNSサーバ指定してのインターネット接続やping www.yahoo.co.jpで応答が返ってきません。 allow-query、allow-recursionで制限を掛けなければwww.yahoo.co.jp等の名前解決は出来ると解釈してよろしいでしょうか。 >そもそも、自DNSサーバがあるのに、普通にインターネット接続させるためだけによそのDNSサーバをresolv.confに指定させる事は当然なのでしょうか? そんなことはないはずです。 冗長化などなければDNSサーバのリゾルバ(resolv.conf)は自分自身(localhost)で問題ないはずです。 >bind9.3*系でのnamed.conf設定で以下のようにしています。 コンフィグはこれで全部でしょうか? TRUSTのaclの項目が見当たりませんが。(割愛しているだけですか?) 単純にallow-query、allow-recursion に問い合わせ及び再帰問い合わせを許可するホストにクライアントPCのIPアドレスが含まれていないだけってことはありませんか? (NATなどで変換されているのを忘れているとか)
補足
ありがとうございます >allow-query、allow-recursionで制限を掛けなければwww.yahoo.co.jp等の名前解決は出来ると解釈してよろしいでしょうか。 これ以外に、recursionをyesにすると自DNSからping・クライアントPCから外部サイトにアクセスできません。 >冗長化などなければDNSサーバのリゾルバ(resolv.conf)は自分自身(localhost)で問題ないはずです。 resolvには自DNSサーバIPの他にプロバイダなどのDNSサーバを入れてやらないといけないのかという事です >TRUSTのacl これは当然設定しています。ネットワークも正確に設定済みです forwaderの設定するのはこうした不都合を解消させるためなら この設定を仕込む事になるのでしょうね。 早速、設定しましたが、 forwderにIPを仕込んでも、resolv.confにも自DNSサーバ以外に 外部通信のためのDNSを追記しないといけない感じです。 これは、1・2番の回答者からの説明による事と同じだと考えています。 貴殿では、いままでDNSサーバ構築いおいて、このような経験はありませんでした?
- demmystar
- ベストアンサー率32% (69/213)
外部DNSサーバ(プロバイダ等) ↑ ↓ インターネット ↑ ↓ 【ルータ外側IPアドレス(α)】 ルータ ←→ 外向けDNSサーバ(A) 【ルータ内側IPアドレス(β)】 ↑ ↓ クライアントPC(B) あくまでも、こういう一般的なネットワーク構成上での話です。 (ネットワーク構成が提示されていませんので。) 「resolv.conf」:A上にある各種ネットワークを使用する アプリケーション(ping や telnet や ftp)が参照する DNSサーバを記述する 「named.conf→forwarders」:Aに問い合わせをしたが A上のDNSサーバにデータが無い場合に「より上位(再帰的)」に 代理で問い合わせに行くDNSサーバを記述する 「resolv.conf」は、A自身のための設定で、「named.conf」は、 Bの問い合わせに対応するための設定です。 但し、「resolv.conf」に nameserver 127.0.0.1 として、A自身を名前解決に使用する宣言をした場合、 「named.conf」は、A&Bの両方の問い合わせに対応する事になります。 このあたりは、設定する側のポリシー(考え方)によります。
- demmystar
- ベストアンサー率32% (69/213)
forwarders { 外部DNSサーバのIPアドレス; }; という項目を入れてください。外部DNSは、 プロバイダのDNSでもいいとおもいます。 上記設定では、「example.jp」の情報はあっても、 それ以外(例:www.yahoo.co.jp など)のデータを どこに参照しに行くのかが記述されてないので、 自ドメインしか名前解決が不可能です。
補足
ありがとうございます。 確認のために、質問します。 forwardersに外部DNSに入れて、 /etc/resolv.confにも 同じ外部DNSを入れないといけない事で よろしいでしょうか。 宜しくお願い致します。
お礼
ご回答ありがとうございます。 いろいろ参考になりました。 補足の追記します。 acl TRUSTの設定は、 match-clients { ; }; match-destinations { ; }; にのみの適用にしています。
補足
■条件1 ・resolv.confを下記の状態 nameserver 127.0.0.1 nameserver xxx.xxx.xxx.xxx ・・・外部DNS ・optionsのallow-recursionの設定が以下の時 { 127.0.0.1; ::1; 192.168.xxx.xxx/24; }; TRUSTに127.0.0.1のみ、または、 acl TRUST {127.0.0.1; 192.168.xxx.0/24;}; を設定した場合 ⇒ 外部への名前解決はOKです。 ・resolv.confがnameserver 127.0.0.1のみの場合 ⇒ 外部への名前解決はOKです。 ---------------------------------------------------------------- ■条件2 ・allow-recursionをnone;+resolv.confが127.0.0.1+acl TRUST { 127.0.0.1; }; ⇒ 自DNS管理zone以外の名前解決はNG ・resolv.confに127.0.0.1以外に外部DNSを追記すると、自DNS管理zone含め外部も名前解決はOK ■条件3 ・allow-recursionをnone;+resolv.confが127.0.0.1+acl TRUST { 127.0.0.1; 192.168.xxx.0/24; }; ⇒ 自DNS管理zone以外の名前解決はNG ・resolv.confに127.0.0.1以外に外部DNSを追記すると、自DNS管理zone含め外部も名前解決はOK recursion no; の場合は自DNS管理以外の名前解決は全NGとなります。 ----------------------------------------------------------------- 以上から、acl TRUSTの指定如何に関係なく、allow-recursionの設定と resolv.confの指定に関係してくる事になるかと思います。 (optionsのallow-queryもallow-recursionと同じ指定でもいけるかと。各zoneにany;をしておく) pakuti様が指摘されてる通りにresolv.confに自分自身は指定しない方が よいとの事ですが、 少ない経験ながら、当方がこれまで運用業務などで構築されたDNSの設定情報を見ても 必ず、自DNSのIP+セカンダリなどをresolv.confに指定しています。 また、とある同僚からは、自社で構築したDNSがあるのに自分のDNSを参照させないなんて ありえない・他所のDNSを参照していて万が一障害などあった時、 どうするのか?と言われました。 会社での研修でも自DNSのIPを指定していました。(これはLocal環境だった事もあるのですが) ■あと、追加で質問させてください。 ・外部DNSを利用する際には、8.8.8.8のgoogle public DNSを利用する方がいいのでしょうか。 ・自DNS管理zone以外を外部に問い合わせるための forwardersの設定を無効にしても名前解決出来るので、 forwardersの指定はいらない事になるのでしょうか。 とりあえず、今の設定で動作的には問題はないかと思っております。