web-dev-qa-db-ja.com

Windows Server DNSでhostsファイルを使用して特定のホスト名を解決する方法

[注:この質問の解決策は完璧です。タイトルが示すものから逸脱しているためです。]

Windows Server 2003 DNS serviceで小さな問題が発生しています。私の会社では、Microsoft DNSサーバー(172.16.0.12)を実行して、会社のイントラネット(ドメイン名はdev.nlsで終わります。IP172.16に解決しています)、他のドメイン名(例:* .google.com、*。sf.net)をInternet real DNS serversに転送するDNSフォワーダーとしても構成されています。この内部DNSサーバーは、外部のユーザーにサービスを提供する傾向はありません。

また、メールサーバー(realインターネットドメイン@nlscan.comの受信メールを処理する)を会社のファイアウォールの内側で実行しており、どちらの方法でもアクセスできます。

  1. イントラネット内から172.16.0.10に接続する。
  2. インターネットからmail.nlscan.com202.101.116.9に解決)に接続する。

172.16.0.10202.101.116.9は同じ物理マシンではないことに注意してください。 202は、ポート25および110をイントラネットアドレス172.16.0.10にポート転送するファイアウォールマシンです。

私の質問:企業LAN内のユーザーがmail.nlscan.comを解決したい場合、202.101.116.9に解決されます。メールトラフィックがファイアウォールマシンに送信され、その後172.16.0.10にバウンスするため、これは正しく機能します。私たちのinternal DNS servermail.nlscan.comという名前をインターセプトして172.16.0.10に解決できることを願っています。ですから、172.16.0.12の「hosts」ファイルにエントリを書き込んで、これを実行できることを願っています。しかし、どのようにMicrosoft DNS serverがこの「ホスト」ファイルを認識できますか?

イントラネットユーザーが172.16.0.10を使用してメールサーバーにアクセスしないようにしてください。ユーザー(従業員)がラップトップで仕事をしていて、昼間はオフィスで、夜間は自宅で作業しているとしましょう。彼は家にいるとき、172.16.0.10を使用できません。

内部nlscan.comDNS serverのゾーンを作成することはできません。これは、nlscan.comドメインのネームサーバーがISPにあり、他のホスト名とサブドメインを解決する必要があるためですnlscan.comの下。

[編集]

WesleyDavidが示唆するように、私はの解決策に従ってmailserver.nlscan.comという名前のゾーンを作成し、そのゾーンに名前のないAレコードを配置します。時間はこれがうまく機能することを証明しています。

18
Jimm Chen

この投稿の後半は間違っています。私はWeb上で読んだいくつかの情報に基づいて(Web上にある場合、それは真実であるに違いない!)印象を受けました。キャッシュを作成するためのWindows DNSサーバーサービスのタスクの一部は、ホストファイルもロードすることでした。ローカルゾーンデータとともにキャッシュします。私は周りを検索しましたが、これの確固たる証拠は見つかりませんでした。私は自分のServer 2008 R2マシンで理論をテストしましたが、hostsファイルがDNSサーバーのキャッシュの構築に使用されていないことがわかりました。

ただし、私はMassimoよりも少しエレガントなソリューションを持っていると思います。 nlscan.comゾーン全体に対して権限のあるゾーンを作成する代わりに、mailserver.nlscan.comという名前のゾーンを作成し、そのゾーンに名前のないAレコードを配置するだけです。名前のないAレコードにはゾーン自体と同じ名前が付けられ、必要なIPアドレスを付与できます。 nlscan.comの下の他のすべてのドメインおよびnlscan.com自体は、パブリックDNSによって解決されます。

私は自分のServer 2008 R2 DNSサーバーでこれをテストし、友人のWebサイト(nessus.nl)をパブリックDNSサーバー経由で解決することができましたが、特定のサブドメイン(blog.nessus.nl)はApple.com IPアドレスに解決されました。試してみて、うまくいくかどうかを確認してください。

古い、間違った投稿が始まる:

私の理解が正しい場合(編集:正しくありません)、DNSキャッシュがServer 2003マシンで構築されると、ゾーンデータだけでなく、hostsファイルからエントリが取得されます。配置する172.16.0.10 mailserver.nlscan.comサーバー2003マシンのホストファイルで問題を解決する必要があります。 hostsファイルを変更した後、DNSサービスを再起動します。

任意のWindowsマシン(具体的にはServer 2003 DNSマシン)でipconfig/displaydnsを使用して、ホストファイルのエントリを確認します。また、否定応答はクライアントにキャッシュされるので、実験しているクライアントでは常にipconfig/flushdnsを実行してください。そうしないと、ゾーン/ホストファイルに入力した名前をクライアントが解決できないのはなぜか、さまざまなハードオブジェクトに対して悪用されることになります。 =)

これを試して失敗しましたか?

12
Wesley

外部ユーザーが同じリソースの外部IPを取得する一方で、内部ユーザーがリソースの内部IPを取得するという要望は一般的です。これはスプリットブレインDNSと呼ばれます。インターネットに面する1つのDNSサーバーと、ローカルユーザー用の別の内部DNSサーバーがあります。内部ユーザーはネットワークでDHCPを使用し、DHCPサーバーは内部DNSサーバーをアドバタイズします。ユーザーがオフィスから離れている場合、ユーザーのDHCPサーバーは、外部ゾーンのみを認識するDNSサーバーにユーザーを割り当てます。

内部でゾーンを実際にホストせずにスプリットブレインDNSが必要なようです。ユーザーが自宅で作業しているときに内部IPを取得したくないのでゾーンを内部でホストすることは問題があるが、自宅にいるときは別のDHCPサーバーからIPを取得しているので意味がないことを示唆しているこれは、内部DNSサーバーをアドバタイズすることにはなりません。 ISPのDNSサーバーをアドバタイズし、外部ゾーンのみを認識し、外部IPアドレスのみを提供します。

最後に、DNSサーバーにhostsファイルからのレコードを提供するようにDNSサーバーに要求することは成功しないと思います。 DNSサーバーは、ゾーンファイルのレコードを提供します。そのDNSサーバー上のローカルホストファイルは、ローカルクライアントの解決キ​​ャッシュにエントリを伝達します。これは、そのマシンでのルックアップにのみ適用されます。これらのエントリは、別のメカニズムであるDNSサーバーによって提供されません。

スプリットブレインDNSについて読んでください。これは、この状況を処理する通常の方法です。

3
icky3000

ウェス:だれがだめなのかはわかりませんが、ホストファイルの使用方法を明確にしたいと思います。ホストファイルは、DNSサーバーコンポーネントではなく、DNSクライアントリゾルバコンポーネントによって使用されます。 DNSサーバーのホストファイルのエントリは、DNSサーバーがDNSクライアントとして機能しているときに使用されます。たとえば、次のような私のW2K8 DNSサーバーのホストファイルのエントリ:

1.1.1.1 test.test.com

dNSサーバーのDNSクライアントキャッシュに読み込まれます(サーバーキャッシュではありません)。 DNSサーバーからtest.test.comにpingを実行すると、期待どおりに1.1.1.1が返されます。次に、DNSサーバーでnslookupを実行してtest.test.comを要求すると、DNSサーバーのDNSクライアントコンポーネントがDNSサーバーコンポーネントに解決を要求するため、test.test.comに登録された正しいパブリックIPアドレスが返されます。 (他のDNSクライアントと同じように)。頭を回すのはややこしい考えですが、DNSサーバーはDNSクライアントでもあり、DNSクライアントコンポーネントが呼び出されると、他のDNSクライアントと同じように、自身のDNSクライアントキャッシュを調べます。 -hostsファイルから読み込まれます。 DNSクライアントコンポーネントがDNSサーバーコンポーネントを使用している場合にのみ(TCP\IPプロパティで構成されているDNSサーバーを照会することにより、それ自体を指す必要があります)、DNSサーバーのキャッシュに正しい情報が入力されます。

DNSサーバーのDNSクライアントキャッシュはサーバー自体(DNSクライアントとして)で使用され、DNSサーバーコンポーネントでは使用されないため、DNSサーバーをクエリするDNSクライアントは常にホストエントリではなく「実際の」回答を取得します。

2
joeqwerty

ホストファイルを気にせず、DNS mail.domain.comに新しいゾーンを追加し、ゾーンにホストを追加するだけです。名前を空白のままにして(ゾーンの名前が自動的に使用されます)、ローカルメールサーバーのIPアドレスを入力します;-)

1
Lysandro

私の知る限り、Windows DNSでhostsファイルを使用して名前解決を処理する方法はありません。しかし、これは必要ありません。

内部DNSサーバー上に、パブリックインターネットゾーンと同じ名前でゾーンを安全に作成できます。何が起こるかは、サーバーがそのゾーンの権限のあるネームサーバーに要求を転送する代わりに、独自のデータを使用してそのゾーンの名前の要求を処理することです。これは、「シャドーイング」と呼ばれることもあります。これは、「実際の」パブリックゾーンを内部クライアントが利用できなくなり、代わりに「偽の」データで応答するためです。

注意が必要なのは、必要に応じてパブリックIPアドレスを使用する場合でも、必要なすべての名前をこの内部ゾーンに入力する必要があることです。そうしないと、内部クライアントはそれらの名前を解決できません。

パブリックゾーンが次のようになっているとします。

www.nlscan.com    202.101.116.8
mail.nlscan.com   202.101.116.9

内部クライアントがmail.nlscan.comを172.16.0.10として解決するようにします。それで問題ないので、内部DNSサーバーに「nlscan.com」ゾーンを作成し、その中に「mail.nlscan.com-> 172.16.0.10」を配置します。
しかし、内部クライアントは「www.nlscan.com」を解決できません。これは、サーバーがそのゾーンに対して権限があると判断し、クエリに応答しないためです(そのホストについて知らないため) )、しかしそれはまたそれを誰にも転送しません。
これを解決するには、 "www.nlscan.com"を内部ゾーンの内側にも配置する必要があります。クライアントにその方法でアクセスさせたい場合は、実際のパブリックIPアドレスをポイントできます。また、「www」も転送されている場合は、「mail.nlscan.com」に使用しているのと同じリダイレクトを使用できます。一部の内部サーバーへのファイアウォール。
同じ原則がゾーン内のすべての名前に適用されます。

この設定はnot外部クライアント、または一時的にネットワークの外部にいるユーザーに影響を与えます。その内部の「シャドウ」ゾーンはインターネットから見えません。

1
Massimo