Czy w Linuksie można aliasować nazwę hosta?

90

Czy w Linuksie można aliasować nazwę hosta?

Został zapytany przez jmillikin na różnych forach Ubuntu w następujący sposób:


Czy można utworzyć alias nazwy hosta? Coś w rodzaju / etc / hosts, ale z innymi nazwami hostów niż adresami IP. Tak więc w przypadku takiego pliku można pingować „fakehost1”, i zostanie on ponownie zamapowany na „realhost”, a następnie „realhost” zostanie rozwiązany na adres IP.

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

Ktoś odpowiedział na temat ssh, ale nie na temat ping itp. Moim głównym celem jest użycie go jako aliasu dla serwera Subversion . W moim przypadku realhost ma dynamiczny adres IP. Tak więc alias „/ etc / hosts” nie działa. Chcę uzyskać dostęp do mojego serwera Subversion jak svn://my_svnserver/my_reposzamiast svn://realhost/my_repos.

Peter Mortensen
źródło
Chyba coś mi umknęło. Mówisz, że nie możesz mieć / etc / hosts wyglądającego jak 10.0.3.4 some.host.org another.domain.com Musisz użyć referencji z jakiegoś powodu programowego?
jim_m_somewhere

Odpowiedzi:

56

Dla tych, którzy nie mają konta na forach (lub nie chcą się zalogować):

jeśli twoim głównym problemem nie jest pingowanie, ale ssh, możesz utworzyć / edytować ~ / .ssh / config dodając takie wiersze:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3
Xiong Chiamiov
źródło
1
Część Nazwa hosta musi znajdować się w nowym wierszu. Oto dobry samouczek na temat tworzenia pliku konfiguracyjnego takiego: mattryall.net/blog/2008/06/ssh-favourite-hosts
Code Commander
1
dobre obejście, dzięki. Ale oczywiście lepszym rozwiązaniem byłoby użycie nazw w dns
Yura,
31

Linux obsługuje aliasing, ustawiając zmienną env HOSTALIASES.

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

wtedy możesz

ping fakehost

NB ping wymaga skonfigurowania go jako root, ale możesz to zrobić jako dowolny użytkownik dla dowolnej aplikacji działającej jako ten użytkownik. ping suids do rootowania.

teknopaul
źródło
3
nie działało dla mnie na Ubuntu 12.04 :(
Dimitry K
3
HOSTALIASY działają tylko dla plików wykonywalnych, które nie mają ustawionej flagi setuid. Więc nie będzie działać dla ping (chyba że jesteś już rootem podczas wykonywania ping). Wydaje mi się, że jest to zrobione, aby uniknąć oszukiwania plików wykonywalnych setuid w celu połączenia się z innym hostem, niż zamierzał.
Boris
1
Nie działa również na zwijanie
Benubird,
7
rzadko kończy się to oczekiwanym rezultatem. HOSTALIASES działa tylko w przypadku aplikacji korzystających z getaddrinfo (3) lub gethostbyname (3) - oznacza to, że będzie działać w aplikacjach próbujących jawnie rozwiązać nazwę hosta za pomocą określonego wywołania systemowego: nigdy tak nie jest. patrz unix.stackexchange.com/questions/10438/…, więc jedynym rozwiązaniem są lokalne dns (dnsmasq)
Nadir
1
Wygląda na to, że ta sztuczka jest przestarzała. Funkcje gethostbyname * (), gethostbyaddr * (), herror () i hstrerror () są przestarzałe. Jeśli twój system uruchamia DNSMasq lokalnie, możesz alias w tym dla dowolnej rozdzielczości korzystającej z DNS.
teknopaul
24

Możesz to skonfigurować na serwerze DNS, rekordy CNAME pozwalają na rozpoznanie komputera przez więcej niż jedną nazwę hosta. Dodaj więc rekordy CNAME do swojego serwera DNS w ten sposób:


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

Ali Mezgani
źródło
3
lekki serwer DNS do wypróbowania byłby dnsmasq(obsługuje również DHCP).
sybreon
17

Często robię to ze zmiennymi środowiskowymi. Wiem, że działa to tylko w wierszu poleceń, ale tutaj najczęściej pragnę aliasów nazw hostów (pracowałem z kilkoma kontami superkomputerów, wszystkie z długimi adresami URL). Oto przykład, jeśli używasz BASH. W ~ / .bashrc:

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

następnie w świeżej skorupce:

ssh christopher @ $ fakehost


źródło
11

Jedynym sposobem, aby to zrobić, jest posiadanie własnego lokalnego serwera DNS.

inne
źródło
1
Tak, teraz wydaje się to jedynym rozwiązaniem. Dzięki. Nie mogę głosować, ponieważ nie mam wystarczającej reputacji.
Jeśli problemem jest ciągle zmieniający się adres IP łącza DSL lub połączenia modemowego, dyndns jest lepszym rozwiązaniem, IMHO.
Sven
Nie, to nie jest lepsze rozwiązanie. Gdy serwer ma nazwę hosta obsługiwaną przez coś innego, wówczas wystarczy OP dla CNAME dla pierwszej nazwy hosta. DYNDNS i podobne korzystają z hosta informującego serwer dns, że zmienił się jego adres IP.
theotherreceive
5

Zastosowanie /etc/hosts.aliases jest standardową funkcją bibliotek resolvera wiązania. Jest bardziej solidny niż dodawanie wpisów do / etc / hosts i może być używany, jeśli nie możesz dodać CNAMES do swojego DNS (nie masz do niego dostępu).

Ogólnie najlepszą praktyką jest używanie CNAMES w DNS z odpowiednim WYSZUKIWANIEM zdefiniowanym w /etc/resolv.conf.

Aktualizacja / etc / hosts nie jest bardzo niezawodna, ponieważ wpisy muszą być synchronizowane ze zmianami adresu IP. To naprawdę działa tylko na małą skalę lub gdy używasz usługi nazw do dystrybucji mapy hostów (np. Przez ldap).

Innym rozwiązaniem może być DNSMasq http://en.wikipedia.org/wiki/Dnsmasq

Tom Hallam
źródło
Próbowałem użyć /etc/hosts.aliases w CENTOS 6, ale ta funkcja nie działa. Nie mogę również znaleźć żadnej dokumentacji dotyczącej jego wykorzystania lub istnienia. Gdzie powinienem szukać?
mdpc
5

Będziesz potrzebował serwera dyndns, który zamapuje twój obecny adres IP na nazwę hosta. Po zalogowaniu się poinformujesz ten serwer o swoim bieżącym adresie IP, a on zaktualizuje rekord nazwy hosta.

Sven
źródło