BIND/Named: 再帰を無効にし、クライアントは代替サーバーを使用する

BIND/Named: 再帰を無効にし、クライアントは代替サーバーを使用する

OSX ラップトップ上でローカルに実行されるシンプルな DNS サーバー (BIND/Named) をセットアップしています。

その目的は、「*.laptop.example.com」へのすべてのリクエストを「192.168.2.2」に解決することです。これは、仮想ネットワーク インターフェイスの手動で割り当てられた IP アドレス (DHCP ではない) です。

私は、IP アドレスが常に同じままであること (eth0 は異なるネットワークに接続すると IP アドレスが変更されます)、また常に使用可能であること (ネットワーク ケーブルが接続されていない場合は eth0 は無効/使用不可) を保証するために、仮想ネットワーク インターフェイス (Parallels 提供) を使用しています。

私は以下の設定を使用しています:

options {

  ...

  forwarders {
    192.168.1.1;
  };
  forward only;

};

ただし、ラップトップがネットワークを変更するたびに構成を更新する必要があります (ほとんどのネットワークでは使用する DNS アドレスが異なるため)。

この要件を削除して、BIND/Named がドメイン名を認識しない場合 (つまり、「laptop.example.com」のサブドメインではない場合)、エラーを返して、ラップトップが記録されている 2 番目の DNS アドレス (DHCP から取得したアドレス) を試行できるようにしたいと思います。

1 つの可能性としては、次のものを使用することです。

options {

  ...

  forwarders {
  };
  forward only;

  recursion no;

};

これにより、ROOT サーバーを照会するのに 3 秒以上かかることがなくなります...ただし、クライアントは、次のサーバーを試すことで修正できるエラーではなく、その応答を「ドメインが存在しない」と解釈します。

答え1

Alnitak、duffbeer703、John Gardeniers さん、とても良いフィードバックをありがとうございました。

私の問題に対する解決策は、launchd を使用して /etc/resolv.conf の変更を検出し、フォワーダー リストを更新することです。

ファイルを作成することにより:

/Library/LaunchDaemons/myname.update.plist

内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
   "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>myname.update</string>
    <key>ProgramArguments</key>
    <array>
        <string>[PATH]/update.sh</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/var/run/resolv.conf</string>
    </array>
</dict>
</plist>

これを次のようにロードします:

launchctl load /Library/LaunchDaemons/myname.update.plist
launchctl start myname.update

スクリプトは次の場所にあります:

[PATH]/update.sh

次のようなものを実行できます:

DST="/var/named/forwarders.conf";

echo "forwarders {" > $DST

cat /etc/resolv.conf | \
    grep -v -E "(127.0.0.1|localhost)" | \
    awk '{ sub("^nameserver ", "\t"); sub("$", ";"); print }' >> $DST

echo "};" >> $DST

そして、名前付き設定では、次のように使用できます。

options {
    directory "[PATH]/conf/";
    listen-on { 127.0.0.1; [IP_ADDRESS_HOST]; };
    include "/var/named/forwarders.conf";
    forward only;
};

完全な実装を確認したり使用したい場合は、私のBIND設定ページダウンロード フォームを使用すると、単一のインストール スクリプトを含む ZIP パッケージが作成されるため、セットアップと使用が非常に簡単になります。

答え2

ホスト ファイルにエントリを追加して、面倒な作業を省いてみてはいかがでしょうか?

答え3

何をしようとしているのか、もう少し詳しく説明した方がいいかもしれません。これはあまり意味がありません。私のアドバイスは、DNS の基本を微調整しないことです。そうすると、正常に機能しているものを壊してしまうことになります。

プライマリ DNS サーバーとセカンダリ DNS サーバーは、可用性を確保するためにネットワーク構成に含まれています。DNS サーバーが応答を提供できない場合、クライアントはセカンダリ サーバーにアクセスしません。DNS を発明した人々は、この問題を解決するために「再帰」の概念を実装しました。

Mac を使用している場合は、Bonjour/mDNS を使用する方が生産的であることがわかるかもしれません。

答え4

使ってみるunboundその代わり。

基本的には再帰的なサーバーですが、必要なワイルドカードオーバーライドと、その他すべてを現在から自動的に学習した上流 DNS サーバー/etc/resolv.conf

関連情報