web-dev-qa-db-ja.com

nslookupが静的な値を返すようにubuntuのデフォルトのDNS構成をオーバーライドするにはどうすればよいですか?

Nslookup、Dig、およびpingは、異なる値を返します。 foo.bar.nameが常に静的に自分のマシンのローカルホストに解決されるようにしたい。

コマンドを使用しました

Host foo.bar.name

/ etc/hostsを編集して次の行を含めました

1.1.1.1 foo.bar.name foo

(ここで、ホストマシンの1.1.1.1 IPアドレス)

Pingまたはcurlのいずれかを実行すると、希望どおりに動作します。

しかし、Digを実行すると、またはnslookupを実行すると、foo.bar.nameアドレスの解決方法がまったく異なります。

私は何か見落としてますか?

その特定のホストでDNS解決が私が述べたように行われるようにするには、どの構成を変更する必要がありますか。

1
fossy

pingcurl、および他のすべてのアプリは、実際にはDNSを直接使用しません。OSが提供する「gethostbyname」関数を使用して、複数のプロバイダーを呼び出します。それらの1つは「dns」(DNSサーバーと通信します)であり、もう1つは「ファイル」(つまり/etc/hosts)です。他のプロトコルを話す追加のプロバイダーが存在する可能性があります。それらはすべて/etc/nsswitch.confを介して構成されます。

一方、DigHost、およびnslookup基本的にDNSクライアントです–これらはOSをバイパスします " gethostbyname」関数を使用し、代わりにDNSパケットを直接作成して送信します。 (これらは特にこのように記述されています。)その結果、/etc/hostsやその他の名前解決メカニズムもスキップし、これを「修正」するように構成できるものはありません。

(OS自体がすべてのUDPパケットを調べてDNSであるかどうかを確認するわけではありません。また、/ etc/hostsから偽のDNS応答を挿入することもありません。)

Dig&cを作成する唯一の方法。/etc/hostsを尊重することは、アプリが通信するための実際のDNSサーバーをセットアップすることです。これにより、必要な静的応答が提供されます。たとえば、dnsmasqはDNSキャッシュ/プロキシとして機能し、デフォルトで/ etc/hostsから静的データをロードします。または、Unboundには、/ etc/hostsを直接読み取ることはできませんが、広範な「ローカルデータ」構成があります。

DnsmasqまたはUnboundを構成したら、/etc/resolv.confを127.0.0.1(または他のホストdnsmasqが実行されているもの)にポイントします。

2
user1686

その特定のホストでDNS解決が私が述べたように行われるようにするには、どの構成を変更する必要がありますか。

unboundなどの軽量DNSフォワーダーをセットアップして、DNSレコードを上書きできます。

あなたの例を使用すると、unboundconfigは次のようになります。

local-zone: "foo.bar.name" redirect
local-data: "foo.bar.name A 1.1.1.1"

外部DNSを上書きする場合は、次を使用できます。

local-data: "www.google.com.  1800  IN  A    172.16.34.12"
local-data: 'www.google.com.  7200  IN  TXT "My own TXT record for text"'
local-data-ptr: "172.16.34.12        www.google.com"

設定が完了したら、Dig @127.0.0.1 foo.bar.name aでテストします
新しいリゾルバーが正常に機能する場合は、/etc/resolf.confnameserver行をnameserver 127.0.0.1に変更して、システム全体として設定します。

追伸.

一部のDebianベースディストリビューションは、DNSキャッシャーとしてdnsmasqをインストールします。 unboundを使用する場合は、dnsmasqをオフにします

2
Alex

システムは/ etc/hostsをデフォルトでチェックし、ネームサーバーを使用します。そして、あなたがしたことは完全に大丈夫です。 HostnslookupDigなど、一部のプログラムはネームサーバーと直接通信するように設計されているだけです。そのため、結果が異なります。

0
rsm