複数のIPアドレスが単一のホスト名を指すようにする


25

Windowsシステムでは、このファイルがにありますC:\WINDOWS\system32\drivers\etc\hosts。このファイルにより、特定のIPアドレスをデフォルトでホスト名に設定できます。

問題は、ホスト名に複数のIPアドレスを設定できるかどうかです。たとえば、次のようなことができますか?

192.168.244.128   gateway.net
192.168.226.129   gateway.net

そして、ブラウザがそれらの両方に解決できることを期待し、どちらが機能するのかを見て、そのどちらを指すのか?

そうでない場合、私が望む行動を得る他の方法はありますか?

注:このアプリは自分のローカルエリアネットワークに展開しているため、インターネットは必要ありません。

回答:


25

通常、ホストを使用してこれを行うのではなく、DNSを使用します。ゾーン内の1つの名前に複数のAレコードを割り当てると、ほとんどのDNSは「ラウンドロビン」と呼ばれるものを提供します。

その場合、最初の要求が受信され192.168.244.128、次の要求が受信される192.168.226.129、というようになります。ただし、設計上、ローカルマシンはDNS解決をキャッシュし、通常は期限が切れるまで(Time To Live、TTL)同じIPアドレスを繰り返し使用します。


1
編集:気にしないで、私は修正されます!! 以下に投稿
-MagnaVis

17

はい、これを行うことができます。実際にDNSにホストを入力することなく、ラウンドロビンDNSシナリオをテストするために使用しました。

アプリケーションがgethostbynameを呼び出すと、IPアドレスの完全なリストが(おそらくライブラリ/ OSに応じてランダムな順序で)返されます。


2
質問に実際に回答した場合の+1
CLF

uは、ランダムに1つを選択すると言います
。.iWindows

12

あなたはこれについて間違った方法で行っていると思います。ここで間違った仮定をしている場合は教えてください。

シナリオ:

  • おそらくIIS上で、同じWebアプリケーションを実行している2つのWindowsサーバーがあります。
  • サーバーの1つに障害が発生した場合でもアプリケーションを引き続き使用できるように、アプリケーションをフォールトトレラントにする必要があります。
  • このフォールトトレランスをブラウザに対して透過的にして、ユーザーが同じホスト名(gateway.net)でアプリケーションに引き続きアクセスできるようにする必要があります。

あなたがしようとしていることはラウンドロビンDNS(別名貧弱な人の負荷分散)と呼ばれていますが、クライアント側からこれをしようとしています。DNSキャッシュをフラッシュしても、これは(少なくとも私のWindows XPボックスでは)望ましい効果をもたらさないようです。Windowsは、ファイル内の最初のIPのみを解決します。それにもかかわらず、ラウンドロビンDNSはフォールトトレラントではないため、これは目的を達成するのに役立ちません。

推奨される解決策:

ハードウェアロードバランサー:一部のブランド名は、Alteon、Big-IP、Barracudaです。これは基本的に、ユーザーが接続するための単一のIPを提示し、Webサーバーに要求を転送します。サーバーの1つが使用できなくなると、そのサーバーにトラフィックを転送しなくなります。これは高価なオプションです。

ネットワーク負荷分散サービス:これは、Windowsサーバーで利用可能なマイクロソフトのテクノロジーであり、単一のクラスター化されたIPを提供します。ハードウェアロードバランサーと同じ結果を達成しますが、方法は異なります。あなたがする必要があるのはそれを設定することだけです。


1
ZEN-LBは、本当にシンプルで簡単なロードバランサーです。オープンソース(無料)
デリック

2

http://www.unc.edu/atn/lsf/docs/7.0.5/lsf_config_ref/index.htm?hosts.5.html~mainから

IPv4の例

192.168.1.1 hostA hostB 192.168.2.2 hostA hostC host-C

この例では、hostAには2つのIPアドレスと3つのエイリアスがあります。エイリアスhostBは最初のアドレスを指定し、エイリアスhostCとhost-Cは2番目のアドレスを指定します。LSFは、公式のホスト名hostAを使用して、両方のIPアドレスが同じホストに属していることを識別します。


1
「LSF_CONFDIR / hostsの形式は、UNIXマシンの/ etc / hostsファイルの形式に似ています。」つまり、ソースは通常のホストファイルに関するものではありません。
gertvdijk

1

私の提案は、DNSラウンドロビンとTTL = 0で内部DNSサーバーを使用することです。IP /サーバーがダウンしているときにDNSレコードを(自動IPチェックシステムを使用して)更新すると、高可用性システムを使用できます。


これは、高可用性のためのソリューションではありません。DNSはこのために設計されていないため、他のフェールオーバー方法と組み合わせてのみ使用する必要があります。多くのリゾルバはTTLキャッシュも無視するため、この方法は信頼できません。
マークヘンダーソン

1

ラップトップの有線およびワイヤレスネットワークインターフェイスの両方に静的IPを割り当て、別のマシンのホストファイルから単一のホスト名を両方のIPアドレスにポイントするホームネットワークでこれを実行しました。それはうまくいくようです。


1

http://www.unc.edu/atn/lsf/docs/7.0.5/lsf_config_ref/index.htm?hosts.5.html~mainから

IPv4の例

192.168.1.1 hostA hostB 192.168.2.2 hostA hostC host-C

この例では、hostAには2つのIPアドレスと3つのエイリアスがあります。エイリアスhostBは最初のアドレスを指定し、エイリアスhostCとhost-Cは2番目のアドレスを指定します。LSFは、公式のホスト名hostAを使用して、両方のIPアドレスが同じホストに属していることを識別します。

この例に基づいて、次の10.18.yx 192.168.zx hostAを実行しました

hostAは、内部ネットワーク(192.168.yx)とVPN(10.8.zx)の両方から到達する予定のサーバーのホスト名です。

ping hostA
sending 'ping' on 192.168.y.x [10.8.z.x]
Answer from 10.8.z.x : bytes=32 time=98 ms TTL=64
Answer from 10.8.z.x : bytes=32 time=78 ms TTL=64
Answer from 10.8.z.x : bytes=32 time=111 ms TTL=64
Answer from 10.8.z.x : bytes=32 time=136 ms TTL=64

だからそれはうまく機能し、ホスト名を使用してVNPを介してSambaを動作させることができるので、両方の場合(LANまたはVPN接続)のウィンドウに接続されたドライブを持っていることは問題ありません。

宜しくお願いします。


0

@ Plamen Dimitrovこの種のバランスを処理するためのデバイスが必要になります。おそらく、FWの前でBGPを処理できるスイッチ、またはFWが使用可能な場合はFWを使用する必要があります。シスコがBGPを処理する場合は、その実装を検討してください。これにより、ISPの両方のIPをシスコまたはスイッチに接続し、ターゲットサーバーに24ビットのパブリックIP(2つのISP IPとは異なる)の有効なIPを持たせることができます。その時点で(3つの異なるパブリックIPブロックを使用しているため、サーバーのブロックは24ビットでなければなりません)、各ISPにこのソリューションを知ってもらう必要があり、彼らは喜んでサポートする必要がありますそれらの間のBGPソリューション、ほとんどが行います。これで、FQDNが解決されると、1 ISP回線がダウンしても、IPの24ビットブロックに解決されます。目標は、ISPが回線を通じてその24ビットアドレスをルーティングすることに同意するため、24ビットアドレスは常に利用可能になります。VPNに使用しているのは24ビットアドレスだけであり、cisco / orスイッチに接続したISPのIPのいずれでもないため、これはVPNでも機能します。その時点で、BGP FLAPPINGに注意する必要があります。DOSを取得する回線が原因で回線が頻繁に上下する場合、DNSアドレスはインターネット上で大きく変化するため、DNSサーバーはIPを自動的に削除します。 IPの24ビットブロックにつながるもの。これは、BGPソリューションに対するDOS攻撃です。その時点で、BGP FLAPPINGに注意する必要があります。DOSを取得する回線が原因で回線が頻繁に上下する場合、DNSアドレスはインターネット上で大きく変化するため、DNSサーバーはIPを自動的に削除します。 IPの24ビットブロックにつながるもの。これは、BGPソリューションに対するDOS攻撃です。その時点で、BGP FLAPPINGに注意する必要があります。DOSを取得する回線が原因で回線が頻繁に上下する場合、DNSアドレスはインターネット上で大きく変化するため、DNSサーバーはIPを自動的に削除します。 IPの24ビットブロックにつながるもの。これは、BGPソリューションに対するDOS攻撃です。


0

少なくともWindowsの世界では、ここで若干の説明があります。hostsファイルの1つの名前に対して2つのIPアドレスを使用できます。照会すると、すべてのアドレスが返されます。アプリ(ブラウザ)は、接続が確立されるまで、それぞれに順番に接続を試みます。IOW、タイムアウトする前にすべてのアドレスを試します。(多くの人が「最初の」アドレスのみを試すと信じているため、これはよくある誤解です。)

次の実験でこれを確認できます。

hostsファイルにホストの2つ以上のアドレスを追加します。1つは本物で、もう1つは偽物です。(偽のアドレスをアルファベット順に小さくします。)ブラウザを開き、ホスト名への接続を試みます。netstat -noを同時に実行します。偽のアドレスへの接続試行が表示されるはずです。(SYN_SENTでスタック)ブラウザは最終的に正しいアドレスに到達し、接続します。接続に遅延がありますが、動作します。


あなたが間違っていると言っているわけではありませんが、私はChromeを使用してWin 10 Proで試しましたが、うまくいきませんでした。hostsファイルを微調整(保存)してipconfig /flushdnsから、以前の解像度が忘れられていることを確認するために実行しました。キャッシュ結果を除外するために、Chromeのシークレットウィンドウでサイト(私のマシンのローカル)を開くことを試みました。それはちょうど失敗しました(そして、それが最終的に機能するかどうかを確認するために数分待機しました)。念のためリフレッシュを行ってください。次に、hostsファイルから偽のIPをコメントアウトしました。他に何もせずにページを更新すると、動作しました。Firefoxでも同じです。
アンドリューシュ

そのため、アプリケーションに基づいて機能する場合がありますが、2つの最新のブラウザーでは機能しません。
アンドリューシュ

-1

これをhostsファイルで行うことはできません。

DNSでもこれを行うことはできません。1つの名前に対して複数のIPを提供できますが、ブラウザーはそれらの複数のIPの1つだけを選択して試してみます。このホストが現在ダウンしている場合、ブラウザーに接続エラーが表示されます。

考えられる解決策の1つは、プロキシサーバーをセットアップし、これら2つのIPを、それらがサービスを提供するドメインの親として構成することです。少なくともSquidの場合、プロキシは1つのサーバーを試行し、失敗した場合は2番目のサーバーを試行します。次に、このプロキシサーバーを使用するようにブラウザーを構成します。


ラウンドロビンについては正しくありません:www-archive.mozilla.org/docs/netlib/dns.html googleのようなものは複数のDNSレコードを返すことに注意してください。RFC3484の並べ替えにもかかわらず、フェイルオーバー戦略として複数のIPを返すことは明らかに役立ちます。
BrianEss

はい、hostsファイルでそれを行うことができます
ウォーレン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.