私のresolv.confは次のようになります。
; generated by /sbin/dhclient-script
search mcdc
nameserver 10.0.4.48
nameserver 8.8.8.8
私が行った場合 nslookup www.google.com
できます
nslookup www.google.com
;; Got SERVFAIL reply from 10.0.4.48, trying next server
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
www.google.com canonical name = www.l.google.com.
しかし、www.google.comをカールすると、ホストを解決できません。
私はstraceの下でcurlを実行してみましたが、curlがresolv.confの最初のネームサーバーのみを使用しており、2番目のネームサーバーを使用していないことがわかりました。 2つのネームサーバー行を切り替えると、www.google.comは解決されますが、内部DNS名は解決されないため、これは適切な回避策ではありません。
両方のネームサーバーを使用するようにresolv.confを修正するにはどうすればよいですか?
Resolv.confおよびリゾルバーのデフォルトの動作は、リストされている順序でサーバーを試すことです。リゾルバは、最初のネームサーバーがタイムアウトした場合にのみ、次のネームサーバーを試行します。 resolv.conf manpage はこう言っています:
nameserverネームサーバーのIPアドレス
リゾルバーが照会するネームサーバーのインターネットアドレス(ドット表記)。キーワードごとに1つ、最大MAXNS(現在は3を参照)のネームサーバーをリストできます。 複数のサーバーがある場合、リゾルバライブラリはリストされた順序でそれらにクエリを実行します。
そして:
(使用されるアルゴリズムは、ネームサーバーを試すことです。クエリがタイムアウトになった場合は、ネームサーバーがなくなるまで次のアルゴリズムを試し、最大回数の再試行が行われるまですべてのネームサーバーの試行を繰り返します。)
詳細は resolver(5) マニュアルページも参照してください。
rotate
を使用してリゾルバーの動作を変更できます。これにより、ラウンドロビンの順序でネームサーバーにクエリが実行されます。
rotateは_res.optionsにRES_ROTATEを設定します。これにより、リストされたネームサーバーの中からネームサーバーがラウンドロビンで選択されます。これは、すべてのクライアントが最初にリストされたサーバーを毎回最初に試行するのではなく、リストされたすべてのサーバーにクエリの負荷を分散させる効果があります。
ただし、nslookupは、最初のネームサーバーからSERVFAIL
を受信した場合、2番目のネームサーバーを使用します。 nslookupのマンページ から:
[no] failネームサーバーがSERVFAILまたは参照(nofail)で応答するか、そのような応答でクエリを終了する(失敗)場合、次のネームサーバーを試行します。
(デフォルト= nofail)
はい、「回転」とタイムアウト設定を使用してDNSルックアップを改善できます。以下に例を示します。
例:
[root@centos-xxxxxx ~]# cat /etc/resolv.conf
options rotate
options timeout:1
search xyz.abc.local
nameserver 192.168.56.3
nameserver 10.0.2.4
10.0.4.48は再帰DNSサーバー、別名リゾルバーですか?
それとも、内部ゾーンの権威サーバーだけですか?
信頼できるデータを保持している可能性のある内部リゾルバを設定する必要があります。
したがって、期待どおりに機能させるには、dnsmasqまたはその他の軽量DNSリピーター(または本格的なDNSサーバー)をインストールします。 DNSサーバーソフトウェアの比較 を参照してください。
Dnsmasqの設定は次のように簡単です:
server=10.0.4.48
server=8.8.8.8
また、DNSを使用するドメインを指定することもできます。例えば。:
server=/mcdc/10.0.4.48
server=8.8.8.8
これにより、dnsmasqは*.mcdc
DNSサーバーの10.0.4.48
と8.8.8.8
のその他すべてを検索します。
/etc/resolv.conf
では、ローカルDNSを使用するだけです。
nameserver 127.0.0.1
Dnsmasqセットアップの詳細については、私の回答をここで参照してください: https://unix.stackexchange.com/questions/55090/change-default-dns-on-openvpn-connect/545591#545591 。