私のLANセットアップは非常に基本的です:
ルーターはDHCPを提供しますが、独自のDNSサーバーは実行しません。実際、私のLANのどこにもホストされているDNSサーバーはありません(通常のホームネットワーク設定)。ルーターは、DHCPリース情報の一部としてISPのDNSサーバーを送信するように構成されています。
開発用PCにVirtualBoxマシンをセットアップし、Debian Squeeze(6.0.4)をインストールしました。 VirtualBoxネットワークモードはBridged Adapter
で、LAN上のスタンドアロンサーバーをシミュレートします。物理サーバーではなくVirtualBoxサーバーであることはそれほど重要ではありませんが、完全を期すために言及します。
ネットワーク操作が実行前にLAN IPのDNS逆ルックアップを実行するたびに、サーバーには長い遅延があります。遅いネットワーク操作の例:
netstat -l
(netstat -nl
は非常に高速です)Starting MTA: exim4
の起動時に完了するまでに時間がかかるこれらの一部には、私の開発用PCのIpを/etc/hosts
に追加する、またはコマンド固有のオプションを追加してDNS逆ルックアップを回避するなどの回避策があります。当然のことながら、/etc/hosts
の使用は、DHCPと対立するため、これまでのところしか使用できません。
しかし、何かが足りないのではと思わずにはいられません。 本当に LAN上のどこかにDNSサーバーをセットアップする必要がありますか?それは私のニーズにとっては巨大で役に立たない努力のようであり、私のようなDHCP環境には他に選択肢がないとは思えません。
私はこれについてネットをたくさん検索しました、そしておそらく私は正しい検索用語を持っていません、しかし私は解決策を見つけることができません...
ホストの使用(Digでも同じ結果が得られます):
# ip of stackoverflow.com
$ time Host -v 64.34.119.12
Trying "12.119.34.64.in-addr.arpa"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15537
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;12.119.34.64.in-addr.arpa. IN PTR
;; ANSWER SECTION:
12.119.34.64.in-addr.arpa. 143 IN PTR stackoverflow.com.
Received 74 bytes from 192.168.1.1#53 in 15 ms
real 0m0.020s
user 0m0.008s
sys 0m0.000s
# ip of dev pc
$ time Host -v 192.168.1.50
Trying "50.1.168.192.in-addr.arpa"
;; connection timed out; no servers could be reached
real 0m10.004s
user 0m0.004s
sys 0m0.000s
私の/etc/resolv.conf(インストール中に自動的に作成されました)
nameserver 192.168.1.1
HostとDigはどちらもパブリックIPの場合は非常に高速に戻りますが、LAN IPの場合はタイムアウトに10秒かかります。私の現在のタイムアウト値は10秒だと思います。
/ etc/hostsファイルのdev-pc
を使用:
$ time getent hosts 192.168.1.50
192.168.1.50 dev-pc
real 0m0.001s
user 0m0.000s
sys 0m0.000s
/ etc/hostsファイルにdev-pc
がない場合:
$ time getent hosts 192.168.1.50
real 0m10.012s
user 0m0.004s
sys 0m0.000s
逆DNSルックアップを行おうとするそれぞれのピースごとのプログラムオプションまたはパラメーターを見つける必要があるように見えます。どのマシンも(仮想であるかどうかにかかわらず)、常に稼働しているわけではないため、LAN上のDNSサーバーとして機能できません。残念ながら、ルーターのファームウェアにはDNSサーバーが含まれていません。
DNSルックアップの失敗はすぐに失敗します。ただし、私は通常、dnsmasqを実行します。これは、hostsファイルを読み取り、それらのエントリを正引きおよび逆引きに提供します。また、上流のDNSサーバーの負荷を軽減するDNSキャッシングサーバーとしても機能します。
Host
またはDig
コマンドを使用して、どのルックアップが遅いかを確認できます。 DNSを実行していないDNSサーバーにリダイレクトされた場合、失敗するまでにかなりの時間がかかります。 /etc/resolv.conf
でタイムアウトと再試行を調整して、失敗を高速化できます。
編集:リゾルバー応答をテストするには、time getent hosts 192.168.1.50
を使用してみてください。これにより、/etc/hosts
ファイルからのルックアップとDNSが返されます。 Host
およびDig
コマンドはDNSのみをチェックします。これが返されても数秒かかる場合は、/etc/nsswitch.conf
のhosts
エントリの順序を変更して、ファイルをリストの先頭に移動することができます。
dnsmasq
を設定し、それを/etc/resolve.conf
のプライマリDNSネームサーバーとして使用すると、名前の検索をDNSのみに依存するプログラムがある場合に問題が解決します。 Eximは、ベースルックアップのリゾルバーを使用する必要があります。 /etc/hosts
ファイルが必要です。ルーターのDHCPサーバーを無効にできない場合は、DHCPにdnsmasq
を使用できます。 dnsmasq
は、処理するDHCPリクエストで名前が提供されている場合、それらを自動的に登録します。
EDIT2:常に稼働しているコンピューターがない場合は、sambaのインストールとnsswitch構成でのwins
の使用を検討することをお勧めします。これは高速でなければならないので、hostsエントリのdns
の前に置くとうまくいく場合があります。
リンクローカルネットワークでの自動検出を有効にするavahi
ユーティリティのインストールも確認できます。 IPv6側で機能していますが、IPv4アドレスを公開していません。ホストのデフォルトドメインは「.local」です。これはあなたの場合には適さないかもしれませんが、オーバーライドすることができます。また、wins
よりもルックアップが遅いようです。そのため、nsswitch構成でmdns
をdns
の前に置くことは適切ではない可能性があります。
ホームネットワーク用のローカルDNS(および場合によってはDHCP)サーバーをセットアップする演習を行いたくない場合は、可能な場合は逆DNSルックアップを実行しないようにサービスに指示できます。
たとえば、SSHDのDNS逆引き参照を無効にするには、sshd_config
ファイル(またはディストリビューションによっては同様)に次の行を追加します。
UseDNS no
この行をExim構成から削除することもできますが、これが起動速度に影響を与えるかどうかはわかりませんが、接続しているクライアントでのDNS逆引き参照を防止します。
Host_lookup = *
Glassfishプロセスを開始するユーザーのために、この環境変数をエクスポートできるようです。
export AS_NO_REVERSE_DNS=true
動的IPから静的IPに変更した後も同じ問題がありました。現在設定されているネットワーク:静的-IPv6なし、メールサーバーを使用する予定はありません。
次のようにして問題を解決しました:
1:dpkg-reconfigure exim4-configを実行する
2:DNSルックアップの質問に到達したとき-> DNSルックアップを最小に設定(ダイヤルアップ)
この種類の検索が機能しないというエラーと、/ etc/hostsを編集するように提案されましたが、/ etc/hostsで行った唯一のことは、ip6-allnodes行とip6-allrouters行をコメント化することでした。
再起動が速くなったはずです(少なくとも私にとっては)。