Назад | Перейти на главную страницу

Укажите несколько IP-адресов на одно имя хоста

В системе Windows этот файл находится по адресу C:\WINDOWS\system32\drivers\etc\hosts. Этот файл позволяет нам использовать по умолчанию конкретный IP-адрес для имени хоста.

Теперь вопрос в том, могу ли я установить несколько IP-адресов для имени хоста. Например, могу я сделать что-то вроде этого:

192.168.244.128   gateway.net
192.168.226.129   gateway.net

И ожидайте, что браузер может разрешить их оба, посмотреть, какой из них будет работать, и, таким образом, указать на него?

Если нет, есть ли другой способ добиться желаемого поведения?

Примечание. Я развертываю это приложение в своей локальной сети, поэтому в Интернете нет необходимости.

Обычно вы не используете для этого хосты, а используете свой DNS. Большинство DNS предоставляет так называемый «круговой перебор», если вы назначите несколько записей A одному имени в зоне.

Что он будет делать, так это то, что первый запрос получит 192.168.244.128, следующий получит 192.168.226.129, так далее и так далее. Однако по задумке ваш локальный компьютер будет кэшировать свое разрешение DNS и, как правило, будет использовать один и тот же IP-адрес снова и снова, пока не истечет срок его действия (время жизни, TTL).

Да, вы можете это сделать, я использовал его для тестирования сценариев циклического перебора DNS без фактического ввода хостов в DNS.

Когда приложение вызывает gethostbyname, оно возвращает полный список IP-адресов (возможно, в случайном порядке - в зависимости от библиотек / ОС).

Я думаю, вы ошибаетесь. Сообщите мне, если я делаю здесь неправильные предположения.

Сценарий:

  • У вас есть два сервера Windows, на которых запущено одно и то же веб-приложение, возможно, в IIS.
  • Вы хотите, чтобы ваше приложение было отказоустойчивым, чтобы в случае отказа одного из серверов ваше приложение оставалось доступным.
  • Вы хотите, чтобы эта отказоустойчивость была прозрачной для браузера, чтобы пользователи могли продолжать получать доступ к приложению с тем же именем хоста, то есть gateway.net.

То, что вы пытаетесь сделать, называется циклический DNS (также известная как балансировка нагрузки бедняков), но вы пытаетесь сделать это на стороне клиента. Похоже, что это не дает желаемого эффекта (по крайней мере, на моем компьютере с Windows XP), даже если я очищаю кеш DNS. Windows разрешит только первый IP-адрес в файле. Тем не менее, циклический DNS не является отказоустойчивым, поэтому это не поможет вам достичь желаемого.

Предлагаемое решение:

Балансировщик аппаратной нагрузки: Некоторые торговые марки - Alteon, Big-IP, Barracuda. Это в основном представляет собой единый IP-адрес для подключения ваших пользователей и перенаправляет запросы на веб-серверы. Если один из серверов становится недоступным, он больше не будет пересылать на него трафик. Это дорогой вариант.

Службы балансировки сетевой нагрузки: Это технология Microsoft, доступная на сервере Windows, которая предоставит вам единый кластерный IP-адрес. Он дает тот же результат, что и аппаратный балансировщик нагрузки, но другим способом. Все, что вам нужно сделать, это настроить это.

Из 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 указывают второй адрес. LSF использует официальное имя хоста hostA, чтобы определить, что оба IP-адреса принадлежат одному и тому же хосту.

Я предлагаю использовать внутренний DNS-сервер с циклическим перебором DNS и TTL = 0. Если вы обновите запись DNS (также с автоматической системой проверки IP), когда IP / сервер не работает, у вас может быть система высокой доступности.

Я сделал это в домашней сети, где я назначаю статические IP-адреса как проводным, так и беспроводным сетевым интерфейсам ноутбука, а из файла hosts другой машины указываю одно имя хоста для обоих этих IP-адресов. Вроде нормально работает.

Из 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 указывают второй адрес. LSF использует официальное имя хоста hostA, чтобы определить, что оба IP-адреса принадлежат одному и тому же хосту.

На основе этого примера я сделал следующий хост 10.18.y.x 192.168.z.x

Где 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, используя имя хоста, поэтому для меня нормально иметь подключенные диски в Windows в обоих случаях (LAN или VPN).

С уважением.

@ Plamen Dimitrov. Вам понадобится устройство для работы с таким балансом, возможно, коммутатор, который может обрабатывать BGP перед вашим FW- или использовать ваш FW, если это возможно. Если ваши Ciscos поддерживают BGP, подумайте, как это реализовать. Таким образом, у вас могут быть IP-адреса обоих интернет-провайдеров, входящие в коммутатор Cisco / или, а целевые серверы будут иметь действительные IP-адреса 24-битных общедоступных IP-адресов (ОТЛИЧНЫХ ОТ 2-х IP-адресов интернет-провайдеров). На этом этапе (вы используете 3 разных общедоступных IP-блока, один для ваших серверов ДОЛЖЕН БЫТЬ 24 БИТА) вам нужно, чтобы каждый из ваших интернет-провайдеров знал об этом решении, и они должны были быть готовы поддерживать Решение BGP между ними, которое большинство подойдет. Теперь, когда ваше полное доменное имя разрешается, оно будет преобразовано в ваш 24-битный блок IP-адресов, даже если 1 линия ISP выходит из строя. Цель состоит в том, чтобы ваши 24-битные адреса всегда были доступны, так как ваши интернет-провайдеры согласились маршрутизировать этот 24-битный адрес через свои линии. Это работает и для VPN, поскольку все, что вы используете для VPN, - это 24-битные адреса, а не IP-адреса от провайдера, который вы подключили к Cisco / или коммутатору. В этот момент вы должны быть осторожны с BGP FLAPPING, где, если ваши линии сильно растут и опускаются из-за линии, получающей DOS, адреса DNS в Интернете будут так сильно изменяться, что DNS-серверы АВТОМАТИЧЕСКИ УДАЛИТЬ IP-адреса. ЭТО ВЕДУТ К ВАШЕМУ 24-БИТОВОМУ БЛОКУ IP-адресов. Это DOS-атака на решения BGP.

Небольшое уточнение здесь, по крайней мере, в мире Windows: вы МОЖЕТЕ иметь два IP-адреса для одного имени в файле hosts. При запросе возвращаются все адреса. Приложение (то есть браузер) будет пытаться подключиться к каждому по очереди, пока не будет установлено соединение. IOW, он попробует все адреса до истечения времени ожидания. (Это распространенное заблуждение, поскольку многие люди считают, что он будет пробовать только «первый» адрес.)

Вы можете проверить это с помощью следующего эксперимента:

Добавьте два или более адреса для хоста в файл hosts, один настоящий, а другие - поддельные. (Уменьшите поддельные адреса в алфавитном порядке.) Откройте браузер и попробуйте подключиться к имени хоста. Запустите одновременно netstat -no. Вы должны увидеть попытки подключения к поддельному адресу. (застрял в SYN_SENT) Браузер в конечном итоге перейдет на правильный адрес и подключится. Есть задержка в подключении, но она БУДЕТ работать.

Вы не можете сделать это с файлом hosts.

Вы также не можете сделать это с DNS: вы можете обслуживать несколько IP-адресов для одного имени, но браузер выберет только один из этих нескольких IP-адресов, попробует его, и если этот хост в настоящее время не работает, браузер отобразит ошибку подключения .

Одно из возможных решений - настроить прокси-сервер и настроить эти два IP-адреса в качестве родительских для домена, который они обслуживают. По крайней мере, в случае Squid, прокси будет пробовать один сервер и, если он не работает, пробовать второй сервер. Затем настройте свой браузер для использования этого прокси-сервера.