Возможно ли псевдоним имени хоста в Linux?

90

Возможно ли псевдоним имени хоста в Linux?

Jmillikin спрашивал его на различных форумах Ubuntu следующим образом:


Можно ли создать псевдоним имени хоста? Вроде как / etc / hosts, но с другими именами хостов, а не с IP-адресами. Таким образом, с таким файлом вы можете пропинговать «fakehost1», и он будет перенаправлен на «realhost», а затем «realhost» будет преобразован в IP-адрес.

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

Кто-то ответил о ssh, но не о ping и т. Д. Моя основная цель - использовать его в качестве псевдонима для сервера Subversion . В моем случае realhost находится под динамическим IP-адресом. Таким образом, псевдоним "/ etc / hosts" не работает. Я хочу получить доступ к моему серверу Subversion как svn://my_svnserver/my_reposвместо svn://realhost/my_repos.

Питер Мортенсен
источник
Я думаю, что я могу что-то упустить. Вы хотите сказать, что / etc / hosts не может выглядеть как 10.0.3.4 some.host.org another.domain.com Вы должны использовать ссылку по какой-то программной причине?
jim_m_somewhere

Ответы:

56

Для тех, кто не имеет учетной записи на форумах (или не хочет входить в систему):

если ваша основная проблема не в ping, а в ssh, вы можете создать / отредактировать ваш ~ / .ssh / config, добавив такие строки:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3
Xiong Chiamiov
источник
1
Часть Hostname должна быть в новой строке. Вот хорошее руководство о том, как сделать файл конфигурации следующим образом: mattryall.net/blog/2008/06/ssh-favourite-hosts
Code Commander
1
хороший обходной путь, спасибо. Но, конечно же, лучшим решением было бы использование cnames на dns
Юра
31

Linux поддерживает псевдонимы, устанавливая переменную HOSTALIASES env.

echo "fakehost realhost" > /etc/host.aliases
echo "export HOSTALIASES=/etc/host.aliases" >> /etc/profile
. /etc/profile

тогда ты можешь

ping fakehost

Примечание: ping требует, чтобы вы установили это как root, но вы можете сделать это как любой пользователь для любого приложения, которое запускается под этим пользователем. ping suids to root.

teknopaul
источник
3
не работал у меня на Ubuntu 12.04 :(
Dimitry K
3
HOSTALIASES работают только для исполняемых файлов, для которых не установлен флаг setuid. Так что он не будет работать для ping (если только вы не являетесь пользователем root при выполнении ping). Я предполагаю, что это сделано для того, чтобы не обманывать исполняемые файлы setuid при подключении к другому хосту, чем предполагалось.
Борис
1
Также не работает для curl
Benubird
7
это редко приведет к ожидаемому результату. HOSTALIASES работает только для приложений, использующих getaddrinfo (3) или gethostbyname (3). Это означает, что он будет работать для приложений, пытающихся явно разрешить имя хоста с помощью определенного системного вызова: это никогда не происходит. см. unix.stackexchange.com/questions/10438/… так что единственное решение - локальные днс (dnsmasq)
Надир
1
Кажется, это трюк не рекомендуется. Функции gethostbyname * (), gethostbyaddr * (), herror () и hstrerror () устарели. Если ваша система запускает DNSMasq локально, вы можете использовать псевдоним для любого разрешения, использующего DNS.
Текнопауль
24

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


fakehost1 IN CNAME realhost 
fakehost2 IN CNAME realhost 
fakehost3 IN CNAME realhost 

Али Мезгани
источник
3
облегченный DNS-сервер, который можно попробовать dnsmasq(он также обслуживает DHCP).
Sybreon
17

Я часто делаю это с переменными среды. Я знаю, что это работает только для командной строки, но именно там я чаще всего ищу псевдонимы имен хостов (я работал с несколькими учетными записями суперкомпьютеров, все с длинными URL-адресами). Вот пример, если вы используете BASH. В ~ / .bashrc:

export fakehost = "long.ass.annoying.url.org"

затем в свежей оболочке:

ssh christopher @ $ fakehost


источник
11

Единственный способ сделать это, если у вас есть собственный локальный сервер DNS.

theotherreceive
источник
1
Да, теперь это кажется единственным решением. Благодарю. Невозможно поднять голос, так как у меня недостаточно репутации.
Если проблема заключается в постоянно меняющемся IP-адресе DSL или коммутируемого соединения, то, по-моему, dyndns - лучшее решение.
Свен
Нет, это не лучшее решение. Как только у сервера есть имя хоста, которое обрабатывается чем-то другим, все, что нужно OP - это CNAME для первого имени хоста. DYNDNS и т.п. полагаются на хост, сообщающий DNS-серверу, что его ip изменился.
другой прием
5

Использование /etc/hosts.aliases является стандартной функцией библиотек распознавателя связей. Это более надежно, чем добавление записей в / etc / hosts, и его можно использовать, если вы не можете добавить CNAMES в свой DNS (не имеете к нему доступа).

Как правило, рекомендуется использовать CNAMES в DNS с соответствующим поиском, определенным в /etc/resolv.conf.

Обновление / etc / hosts не очень надежно, так как записи должны синхронизироваться с изменениями IP. Это действительно работает только в небольшом масштабе или когда вы используете службу имен для распространения карты хостов (например, через ldap).

Другим решением может быть DNSMasq http://en.wikipedia.org/wiki/Dnsmasq

Том Халлам
источник
Я пытался использовать /etc/hosts.aliases в CENTOS 6, но эта функция, похоже, не работает. Также я не могу найти какую-либо документацию по его использованию или существованию. Где я должен искать?
mdpc
5

Вам понадобится сервер dyndns, который сопоставит ваш текущий IP-адрес с именем хоста. Вы будете сообщать этому серверу о вашем текущем IP-адресе при каждом входе в систему, и он обновит вашу запись имени хоста.

Свен
источник