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
。