web-dev-qa-db-ja.com

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

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

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

192.168.244.128   gateway.net
192.168.226.129   gateway.net

そして、ブラウザーがそれらの両方に解決できることを期待し、どちらが機能するかを確認して、そのどちらかをポイントしますか?

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

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

26
Graviton

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

それが行うことは、最初のリクエストが通過したときに192.168.244.128、次は192.168.226.129など。ただし、設計上、ローカルマシンはDNS解決をキャッシュし、通常は期限切れになるまで(Time To Live、TTL)、同じIPアドレスを繰り返し使用します。

27
Mark Henderson

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

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

18
MarkR

あなたはこれを間違った方法で行っていると思います。ここで間違った仮定をしている場合はお知らせください。

シナリオ:

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

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

推奨されるソリューション:

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

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

12
Nick Kavadias

から 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アドレスが同じホストに属していることを識別します。

2
Peter

から 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.y.x 192.168.z.x hostAを実行しました

ここで、hostAは、内部ネットワーク(192.168.y.x)とVPN(10.8.z.x)の両方からアクセスする予定のサーバーのホスト名です。

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を動作させることができるので、Windowsに接続されたドライブを両方の場合(LANまたはVPNに接続)にしても問題ありません。

宜しくお願いします。

1
obrousse

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

1
Suan

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

1
lg.

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

0
Odoggz

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

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

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

0
Ron