web-dev-qa-db-ja.com

DNSの逆引きにより、LAN上のネットワーク操作が遅くなる

環境

私のLANセットアップは非常に基本的です:

  • ISPのモデムとインターネットに接続されたルーター
  • ルーターに直接接続されている開発用PC

ルーターはDHCPを提供しますが、独自のDNSサーバーは実行しません。実際、私のLANのどこにもホストされているDNSサーバーはありません(通常のホームネットワーク設定)。ルーターは、DHCPリース情報の一部としてISPのDNSサーバーを送信するように構成されています。

開発用PCにVirtualBoxマシンをセットアップし、Debian Squeeze(6.0.4)をインストールしました。 VirtualBoxネットワークモードはBridged Adapterで、LAN上のスタンドアロンサーバーをシミュレートします。物理サーバーではなくVirtualBoxサーバーであることはそれほど重要ではありませんが、完全を期すために言及します。

問題

ネットワーク操作が実行前にLAN IPのDNS逆ルックアップを実行するたびに、サーバーには長い遅延があります。遅いネットワーク操作の例:

  • 開発用PCからサーバーへのSSH接続
  • Glassfishサーバーの管理ポートへの接続
  • netstat -lnetstat -nlは非常に高速です)
  • Starting MTA: exim4の起動時に完了するまでに時間がかかる

これらの一部には、私の開発用PCのIpを/etc/hostsに追加する、またはコマンド固有のオプションを追加してDNS逆ルックアップを回避するなどの回避策があります。当然のことながら、/etc/hostsの使用は、DHCPと対立するため、これまでのところしか使用できません。

しかし、何かが足りないのではと思わずにはいられません。 本当に LAN上のどこかにDNSサーバーをセットアップする必要がありますか?それは私のニーズにとっては巨大で役に立たない努力のようであり、私のようなDHCP環境には他に選択肢がないとは思えません。

私はこれについてネットをたくさん検索しました、そしておそらく私は正しい検索用語を持っていません、しかし私は解決策を見つけることができません...

billThorの回答に従って更新1

ホストの使用(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秒だと思います。

アップデート2

/ 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サーバーが含まれていません。

9
bernie

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.confhostsエントリの順序を変更して、ファイルをリストの先頭に移動することができます。

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構成でmdnsdnsの前に置くことは適切ではない可能性があります。

4
BillThor

ホームネットワーク用のローカルDNS(および場合によってはDHCP)サーバーをセットアップする演習を行いたくない場合は、可能な場合は逆DNSルックアップを実行しないようにサービスに指示できます。

たとえば、SSHDのDNS逆引き参照を無効にするには、sshd_configファイル(またはディストリビューションによっては同様)に次の行を追加します。

UseDNS no

この行をExim構成から削除することもできますが、これが起動速度に影響を与えるかどうかはわかりませんが、接続しているクライアントでのDNS逆引き参照を防止します。

Host_lookup = *

Glassfishプロセスを開始するユーザーのために、この環境変数をエクスポートできるようです。

export AS_NO_REVERSE_DNS=true

3
George M

動的IPから静的IPに変更した後も同じ問題がありました。現在設定されているネットワーク:静的-IPv6なし、メールサーバーを使用する予定はありません。

次のようにして問題を解決しました:

1:dpkg-reconfigure exim4-configを実行する

2:DNSルックアップの質問に到達したとき-> DNSルックアップを最小に設定(ダイヤルアップ)

この種類の検索が機能しないというエラーと、/ etc/hostsを編集するように提案されましたが、/ etc/hostsで行った唯一のことは、ip6-allnodes行とip6-allrouters行をコメント化することでした。

再起動が速くなったはずです(少なくとも私にとっては)。

1
SAW