Укажите несколько 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. Большинство DNS будет предоставлять так называемый «Round Robin», если вы назначите несколько записей A одному имени в зоне.

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

Марк Хендерсон
источник
1
РЕДАКТИРОВАТЬ: Неважно, я исправлен! Опубликовано ниже
MagnaVis
17

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

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

MarkR
источник
2
+1 за фактический ответ на вопрос
CLF
ты хочешь
12

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

Сценарий:

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

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

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

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

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

Питер
источник
1
«Формат LSF_CONFDIR / hosts аналогичен формату файла / etc / hosts на машинах UNIX». Т.е. источник не о обычных файлах хостов.
gertvdijk
1

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

LG.
источник
Это не решение для высокой доступности. 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 указывают второй адрес. 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

Так что это работает хорошо, и я могу заставить samba работать через VNP с использованием имени хоста, поэтому для меня нормально иметь подключенные диски в Windows в обоих случаях (с подключением к локальной сети или VPN).

С наилучшими пожеланиями.

obrousse
источник
0

@ Plamen Dimitrov Вам понадобится устройство для управления таким балансом, возможно, коммутатор, который может обрабатывать BGP перед вашим FW- или использовать ваш FW, если это возможно. Если ваш Ciscos обрабатывает BGP, изучите его. Таким образом, вы можете сделать так, чтобы оба IP-адреса вашего интернет-провайдера входили в коммутатор Cisco и / или коммутатор, и целевые серверы имели бы действительные IP-адреса 24-битных общедоступных IP-адресов (ОТЛИЧАЮЩИХСЯ ОТ 2 IP-адресов ISP). В этот момент (вы используете 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. В этот момент вы должны быть осторожны с BGP FLAPPING, где, если ваши линии сильно растут и падают, из-за линии, получающей DOS, DNS-адреса будут настолько сильно изменяться в Интернете, что DNS-серверы автоматически удаляют IP-адреса. Это приведет к вашему 24-битному блоку IP-адресов. Это атака DOS на решения BGP. В этот момент вы должны быть осторожны с BGP FLAPPING, где, если ваши линии сильно растут и падают, из-за линии, получающей DOS, DNS-адреса будут настолько сильно изменяться в Интернете, что DNS-серверы автоматически удаляют IP-адреса. Это приведет к вашему 24-битному блоку IP-адресов. Это атака DOS на решения BGP.


источник
0

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

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

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

Рон
источник
Не говорю, что вы не правы, но я только попробовал это на своем Win 10 Pro, используя Chrome, и это не сработало. Я настроил свой файл hosts (и сохранил его), затем побежал, ipconfig /flushdnsчтобы убедиться, что предыдущие разрешения были забыты. Попытался открыть сайт (локальный для моей машины) в окне инкогнито в Chrome, чтобы исключить результаты кэширования. Это просто не удалось (и я подождал несколько минут, чтобы посмотреть, будет ли это в конечном итоге работать). Нажмите «Обновить», чтобы быть уверенным. Затем я закомментировал фиктивный IP из моего файла hosts. Ничего не делая, я обновил страницу, и это сработало. То же самое с Firefox.
Эндрю Стейтц
Таким образом, он МОЖЕТ работать на основе приложения, но он определенно НЕ работает в двух современных браузерах.
Эндрю Стейц
-1

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

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

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

Макс Альгинин
источник
Не верно в отношении циклического перебора: www-archive.mozilla.org/docs/netlib/dns.html Обратите внимание, что подобные Google возвращают несколько записей DNS. Несмотря на переупорядочение RFC3484, оно, очевидно, помогает возвращать несколько IP-адресов в качестве стратегии восстановления после отказа.
BrianEss
да, вы можете сделать это с файлом hosts
Уоррен