Jak udostępnić maszynę z sieci LAN za pomocą jej nazwy hosta

120

Oto szczegóły maszyny, do której chcę uzyskać dostęp za pomocą jej nazwy hosta:

$ hostname
hostname
$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   hostname.company.local  hostname

Jest to domyślna instalacja Debian 6 (Squeeze), więc jeszcze niczego nie majstrowałem.

Oto, co otrzymuję od komputera (działającego pod kontrolą Debiana Unstable) próbującego uzyskać dostęp do powyższej maszyny:

$ ping hostname
ping: unknown host hostname
$ ping hostname.company.local
ping: unknown host hostname.company.local
$ cat /etc/resolv.conf
nameserver 192.168.2.21
nameserver 192.168.2.51
search company.local
tshepang
źródło
Musisz zrobić coś na kliencie (maszynie, na której działasz ping) lub na maszynie, z którą klient się konsultuje. Jaki jest system operacyjny na kliencie? Jaka jest jego konfiguracja DNS?
Gilles
Co to jest konfiguracja DNS? Zobacz także zaktualizowany post.
tshepang
1
Czy moja odpowiedź jest tym, czego szukałeś? Jeśli tak, to pytanie wymaga uproszczenia - kto wie o ping, a /etc/hostsjednak nie o DNS tak?
Gilles
Wielkie dzięki. Spojrzę. Aha, i to bardziej artykuł niż odpowiedź :)
tshepang
3
Odpowiedź brzmi: „zainstaluj i skonfiguruj dnsmasq”. Gotowy. :)
Warren Young,

Odpowiedzi:

145

W Internecie, w tym w sieciach lokalnych, urządzenia wywołują się nawzajem według adresów IP . Aby uzyskać dostęp do komputera B z komputera A przy użyciu nazwy komputera B, komputer A musi mieć sposób na zmapowanie nazwy B na jej adres IP. Istnieją trzy sposoby deklarowania nazw komputerów na A:

  • plik hosts . Jest to prosty plik tekstowy, który mapuje nazwy na adresy.
  • System nazw domen (DNS) . Jest to metoda stosowana w globalnym Internecie. Na przykład po załadowaniu tej strony w przeglądarce pierwszą rzeczą, którą robi komputer, jest wysłanie żądania DNS o podanie adresu unix.stackexchange.com.
  • inne bazy danych nazw, takie jak NIS , LDAP lub Active Directory . Są one używane w niektórych sieciach korporacyjnych, ale niezbyt często (wiele sieci korzystających z NIS, LDAP lub AD w bazach danych użytkowników używa DNS do nazw komputerów). Jeśli Twoja sieć korzysta z jednego z nich, masz profesjonalnego administratora sieci i powinieneś zapytać go, co robić.

Istnieje wiele sposobów, w jakie mogą one działać w praktyce; nie można ich wszystkich objąć. W tej odpowiedzi opiszę kilka typowych sytuacji.

Plik hostów

Zaletą metody pliku hosts jest to, że nie wymaga żadnej specjalnej metody. Może to być kłopotliwe, jeśli masz kilka komputerów, ponieważ musisz aktualizować każdy komputer, gdy zmienia się nazwa jednego komputera. Nie nadaje się, jeśli adres IP B jest przypisywany dynamicznie (aby uzyskać inny za każdym razem, gdy łączysz się z siecią).

Plik hosts to prosta lista linii mapujących nazwy na adresy IP. To wygląda tak:

127.0.0.1       localhost localhost.localdomain
198.51.100.42   darkstar darkstar.bands

W systemach unix plik hosts to /etc/hosts. W systemie Windows tak jest c:\windows\system32\drivers\etc\hosts. Prawie każdy system operacyjny, który można połączyć z Internetem, ma podobny plik; Wikipedia ma listę .

Aby dodać wpis dla B w pliku hosts A:

  1. Określ adres IP B. Na B uruchom komendę ifconfig(jeśli komenda nie zostanie znaleziona, spróbuj /sbin/ifconfig). Dane wyjściowe będą zawierać takie wiersze:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab
              inet addr:10.3.1.42  Bcast:10.3.1.255  Mask:255.255.255.0
    

    W tym przykładzie adres IP B to 10.3.1.42. Jeśli jest kilka inet addr:linii, wybierz tę, która odpowiada twojej karcie sieciowej, nigdy lowpis lub tunel lub wpis wirtualny.

  2. Edytuj plik hosts na A. Jeśli A ma jakiś system uniksowy, musisz edytować go /etc/hostsjako superużytkownik; zobacz Jak uruchomić polecenie jako administrator systemu (root) .

DHCP + DNS w sieciach domowych lub małych biurach

Ta metoda jest zdecydowanie najprostsza, jeśli masz wymagany sprzęt. Musisz tylko skonfigurować jedno urządzenie, a wszystkie twoje komputery będą wiedzieć o swoich nazwach. Ta metoda zakłada, że ​​komputery uzyskują adresy IP przez DHCP , co jest metodą automatycznego pobierania adresu IP przez komputery po podłączeniu do sieci. Jeśli nie wiesz, co to jest DHCP, prawdopodobnie tak.

Jeśli sieć ma router domowy , najlepiej jest skonfigurować nazwy urządzeń podłączonych do tego routera. Najpierw musisz dowiedzieć się, jaki jest adres MAC B. Każde urządzenie sieciowe ma unikalny adres MAC. Na B uruchom polecenie ifconfig -a(jeśli polecenie nie zostanie znalezione, spróbuj /sbin/ifconfig -a). Dane wyjściowe będą zawierać takie wiersze:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab

W tym przykładzie adres MAC to 01:23:45:67:89:ab. Musisz wybrać linię HWaddr, która odpowiada portowi sieciowemu, który jest podłączony do routera za pomocą kabla (lub karty Wi-Fi, jeśli masz połączenie przez Wi-Fi). Jeśli masz kilka wpisów i nie wiesz, który jest, podłącz kabel i sprawdź, które urządzenie sieciowe otrzymuje adres IP ( inet addrlinia poniżej).

Teraz w interfejsie internetowym routera wyszukaj ustawienie takie jak „DHCP”. Nazwa i lokalizacja ustawienia jest całkowicie zależna od modelu routera, ale większość ma podobny zestaw ustawień podstawowych. Oto jak to wygląda na oprogramowaniu układowym Tomato :

zrzut ekranu pomidora

Wprowadź adres MAC, adres IP i żądaną nazwę. Możesz wybrać dowolny adres IP z zakresu adresów sieci lokalnej. Większość routerów domowych jest wstępnie skonfigurowana dla zakresu adresów w postaci 192.168. x . y lub 10. x . y . z . Na przykład na pokazanym powyżej routerze Tomato na zakładce „Network” znajduje się ustawienie „adresu IP routera” o wartości 10.3.0.1 i „maska ​​podsieci” o wartości 255.255.255.0, co oznacza, że ​​komputery sieć lokalna musi mieć adres 10.3.0. z . Istnieje również zakres adresów dla automatycznie przypisywanych adresów DHCP (10.3.0.129–10.3.0.254); dla ręcznie przypisanego adresu DHCP wybierz adres spoza tego zakresu.

Teraz podłącz B do sieci, która powinna uzyskać podany adres IP i będzie dostępna pod podaną nazwą z dowolnego komputera w sieci.

Stwórz własny serwer DNS z Dnsmasq

Jeśli nie masz sprawnego routera domowego, możesz skonfigurować tę samą funkcjonalność na dowolnym komputerze z systemem Linux. Wyjaśnię, jak używać Dnsmasq do konfigurowania DNS . Istnieje wiele innych podobnych programów; Wybrałem Dnsmasq, ponieważ jest łatwy do skonfigurowania i lekki (jest to, na przykład, przykład wykorzystania routera Tomato zilustrowanego powyżej). Dnsmasq jest dostępny w większości dystrybucji Linuksa i BSD na komputery PC, serwery i urządzenia sieciowe.

Wybierz komputer, który jest zawsze włączony, ma statyczny adres IP i działa na nim jakiś system Linux lub BSD; nazwijmy to S (dla serwera). Na S zainstaluj dnsmasqpakiet (jeśli jeszcze go nie ma). Poniżej założę, że plik konfiguracyjny to /etc/dnsmasq.conf; lokalizacja może się różnić w zależności od dystrybucji. Teraz musisz zrobić kilka rzeczy.

  • Powiedz Dnsmasqowi, aby podawał nazwy hostów oprócz tych, które otrzymuje z Internetu. Najprostszym sposobem jest wprowadzenie nazw i adresów IP w /etc/hosts(patrz sekcja „Plik hostów” powyżej) i upewnienie się, że dyrektywa /etc/dnsmasq.confnie została no-hostsodkomentowana. (Linie rozpoczynające się od a #są wykomentowane.) Możesz umieścić nazwy w innym pliku; jeśli nie, umieścić linię addn-hosts=/path/to/hosts/filew /etc/dnsmasq.conf.
  • Powiedz Dnsmasqowi, jak uzyskać adresy IP dla nazw komputerów w Internecie.

    • Jeśli korzystasz z Debiana, Ubuntu lub pochodnej, zainstaluj resolvconfpakiet. W najczęstszych przypadkach wszystko będzie działać od razu po wyjęciu z pudełka.
    • Jeśli administrator sieci lub dostawca usług internetowych podał ci adresy serwerów DNS, wprowadź je /etc/dnsmasq.confna przykład:

      server=8.8.8.8
      server=8.8.4.4
      
    • Jeśli nie wiesz, jakie są twoje obecne ustawienia DNS, zajrzyj do pliku /etc/resolv.conf. Jeśli widzisz, jak linia nameserver 8.8.8.8, umieścić linię server=8.8.8.8w /etc/dnsmasq.conf. Po zmianie /etc/dnsmasq.confuruchom ponownie Dnsmasq. Polecenie, aby to zrobić, zależy od dystrybucji; typowe możliwości obejmują restart dnsmasqlub /etc/init.d/dnsmasq restart.

  • Powiedz S, aby korzystał z usługi Dnsmasq dla wszystkich żądań nazw hostów. Edytuj plik /etc/resolv.conf(jako root), usuń każdą nameserverlinię i wstaw nameserver 127.0.0.1zamiast niej.
    • Jeśli używasz resolvconf na Debianie lub Ubuntu, /etc/resolv.confmoże nie być optymalny, jeśli zainstalowałeś resolvconfpakiet z uruchomioną siecią. Upewnij się, że pliki base, heada tailw /etc/resolvconf/resolv.conf.d/katalogu nie zawiera żadnych nameserverwpisów, a następnie uruchom resolvconf -u(jako root).
  • Powiedz innym komputerom, aby używały S jako serwera DNS. Edytuj /etc/resolv.confi zamień wszystkie nameserverwiersze na jeden, w nameserver 10.3.0.2którym 10.3.0.2 to adres IP S (patrz powyżej, jak znaleźć adres IP S).

Możesz również użyć Dnsmasq jako serwera DHCP , aby maszyny mogły automatycznie uzyskać adres odpowiadający ich nazwie. To wykracza poza zakres tej odpowiedzi; zajrzyj do dokumentacji Dnsmasq (nie jest to trudne). Pamiętaj, że w danej sieci lokalnej może być tylko jeden serwer DHCP (dokładna definicja sieci lokalnej wykracza poza zakres tej odpowiedzi).

Nazwy w globalnym Internecie

Do tej pory założyłem sieć lokalną. Co jeśli chcesz nadać nazwę maszynie, która znajduje się w innym zakątku świata? Nadal możesz używać dowolnej z powyższych technik, z tym wyjątkiem, że części związane z DHCP mają zastosowanie tylko w sieci lokalnej. Alternatywnie, jeśli twoje maszyny mają publiczne adresy IP, możesz zarejestrować dla nich swoją własną nazwę publiczną. (Możesz również przypisać prywatny adres IP do nazwy publicznej; jest on mniej powszechny i ​​mniej przydatny, ale nie ma trudności technicznych).

Uzyskiwanie własnej nazwy domeny

Możesz uzyskać własną nazwę domeny i przypisać adresy IP do nazw hostów w tej domenie. Musisz zarejestrować nazwę domeny u dostawcy nazwy domeny; zazwyczaj kosztuje to 10–15 USD rocznie (w przypadku najtańszych domen). Użyj interfejsu internetowego dostawcy nazwy domeny, aby przypisać adresy do nazw hostów.

Dynamiczny DNS

Jeśli twoje maszyny mają dynamiczny adres IP, możesz użyć dynamicznego protokołu DNS , aby zaktualizować adres IP powiązany z nazwą urządzenia, gdy adres się zmieni. Nie wszyscy dostawcy nazw domen obsługują dynamiczny DNS, więc kupuj przed zakupem. Na własny użytek No-IP zapewnia bezpłatną usługę dynamicznego DNS, jeśli korzystasz z własnych domen (np example.ddns.net.).

Gilles
źródło
Stwórz swój własny serwer DNS za pomocą Dnsmasq: jak mogę powiedzieć innemu komputerowi, aby używał S, kiedy na tym komputerze jest zainstalowany system Windows
Radu Rădeanu 27.04.13
@Radu Gdzieś możesz zmienić serwery DNS powiązane z połączeniem za pomocą panelu sterowania. Myślę, że musisz pobrać właściwości połączenia interfejsu sieciowego.
Gilles
Podobało mi się c: \ windows \ system32 \ drivers \ etc \ hosts i działa. Dzięki!
Radu Rădeanu
Szarpałem włosy, szukając tego i znalazłem to w routerze, jak sugerowałeś. Dzięki za szczegółowe informacje!
Jason Turan,
Jeśli jest to sieć firmowa, muszę poinformować dział infrastruktury. dodać mojego Maca linux do listy serwerów DNS, prawda?
WesternGun
24

Użyj Multicast DNS (mDNS). Jest to protokół zerowej konfiguracji, który działa w podsieciach LAN. Nie wymaga serwera. Używa .localTLD (to jest to, czego już używasz).

Ponieważ pytasz, wszystko inne wydaje się przesadne. Gdyby tak nie było, prawdopodobnie nie zapytałbyś.

tne
źródło
1
Wydaje się, że mDNS nie jest obsługiwany w systemie Windows bez instalacji czegoś na każdym oknie systemu Windows.
Zitrax
1
@Zitrax Dobra uwaga (jest to jednak strona * nix). Można tam znaleźć istotne informacje dotyczące konfiguracji systemu Windows - stosunkowo proste.
tne
3
Aka Zeroconf lub Bonjour. Dostarczone przez avahipakiety. Możesz avahi-browse -alrna przykład wysłać zapytanie do sieci .
DanMan
4
vi /etc/dhcp3/dhclient.conf

send host-name "ubuntu-laptop";

i

/etc/init.d/networking restart
LanceBaynes
źródło
Czy powinienem uruchomić to na kliencie lub hoście?
tshepang
Pierwszy bit zostałby wykonany na serwerze dhcp (i chciałbyś uruchomić service restart dhcpd). Druga część zostanie wykonana na kliencie, a na większości dystrybucji należy teraz uruchomić jako service networking restart.
Caleb
Pamiętam, że muszę to uruchamiać tylko po stronie klienta.
LanceBaynes,
3

Komputery nie tylko magicznie wiedzą, jakie nazwy hostów należą do adresatów IP. Nawet na localhost wymaga pewnego rodzaju wyszukiwania.

Musisz skonfigurować inne systemy, aby korzystały z usługi wyszukiwania nazw. Może to być /etc/hostsna kliencie, ldap, nsswitch lub normalnym serwerze DNS. Używam bindi wprowadzam wszystkie maszyny lokalne w domenie lokalnej, a następnie obsługuję DNS dla tej witryny.

Caleb
źródło