Przekieruj pełną TLD (na przykład * .dev) do 127.0.0.1

29

Do celów programistycznych chcę, aby wszystkie żądania DNS wysyłane do TLD .dev były przekazywane na mój komputer.

Plik hosts nie wystarczy. Używam wielu domen, a także wielu subdomen. Musiałbym dodać linię dla każdej kombinacji.

Czytałem, że do wykonania zadania można użyć usługi przesyłania dalej DNS, takiej jak DNSmasq (na przykład, jak opisano tutaj ). Również to oprogramowanie jest już zainstalowane na Ubuntu 12.10.

Problem polega na tym, że nie widzę, jak i gdzie mam skonfigurować DNSmasq, tj. Gdzie powinienem umieścić tę linię:

address=/dev/127.0.0.1
Roel van Duijnhoven
źródło
1
Możesz nie chcieć używać tego, .devco zrobił Google. Nadal badam, do czego będą go używać i czy planują, aby zwykli ludzie się z nim połączili, czy tylko pracownicy, ale możesz nie chcieć przekierowywać całego dostępu w przypadku, gdy jest to pierwsze, chyba że jest to wyłącznie pole testowe, które nigdy nie połączy się z hostami zewnętrznymi.
trysis

Odpowiedzi:

18

Kompletny autonomiczny serwer dnsmasq (serwer DHCP i DNS) nie jest domyślnie instalowany w Ubuntu 12.04 i 12.10, ale pakiet o nazwie dnsmasq-base jest instalowany domyślnie w Ubuntu Desktop 12.04 i 12.10. Pakiet dnsmasq-base zawiera plik binarny dnsmasq i jest używany przez NetworkManager.

Aby zrobić to, co chcesz, musisz użyć dnsmasq jako buforującego serwera DNS. Musisz:

  • Zainstaluj dnsmasq sudo apt-get install dnsmasq
  • Zmień ustawienia sieciowe, aby komputer sam korzystał z serwera DNS.
  • Wprowadź zmiany w plikach konfiguracyjnych:

Utwórz za /etc/dnsmasq.d/dev-tldpomocą tych treści:

local=/dev/

address=/dev/127.0.0.5

Pierwsze polecenie mówi, że *.devżądania nie mogą być przekazywane na twój prawdziwy serwer DNS. Drugi mówi *.devrozwiązuje, do 127.0.0.5którego należy localhost.

  • Uruchom ponownie usługę dnsmasq (nie menedżer sieci)
Javier Rivera
źródło
Dziękuję Ci! Byłem niezwykle pomocny, gdy dowiedziałem się, że obecny DNSMasq nie był prawdziwą okazją. Po zainstalowaniu pełnego pakietu i skonfigurowaniu go w sposób opisany przed uruchomieniem go. :)
Roel van Duijnhoven
1
Wolałbym inną odpowiedź dla ostatnich instalacji pulpitu. W przypadku najnowszych instalacji na pulpicie uruchomiono by w ten sposób dwie instancje dnsmasq. Twoja odpowiedź może być bardzo przydatna w konfiguracjach innych niż NetworkManager, starszych (nie korzystających z dnsmasq), a nawet w instalacjach serwerów!
gertvdijk
Tak, inna odpowiedź jest najlepsza od Ubuntu 12.10.
BenjaminRH
21

W systemie Ubuntu 12.10 lub nowszym możesz to zrobić za pomocą narzędzia dnsmasq uruchamianego przez NetworkManager.

  1. Utwórz katalog, mkdir /etc/NetworkManager/dnsmasq.djeśli jeszcze nie istnieje.

    sudo mkdir /etc/NetworkManager/dnsmasq.d
    
  2. Wrzuć następujący wiersz do /etc/NetworkManager/dnsmasq.d/dev-tld.

    address=/dev/127.0.0.1
    
  3. (Ubuntu 12.10) Uruchom ponownie NetworkManager.

    sudo service network-manager restart
    
  4. (Ubuntu> 13.04) Uruchom ponownie Dnsmasq.

    sudo service dnsmasq restart
    
  5. Ciesz się niesamowitością.

wprowadź opis zdjęcia tutaj

jrg
źródło
1
Dzięki AbrahamVanHelpsing za link do arch wiki na temat tego, jak to zrobić.
jrg
Po wykonaniu tych kroków nadal widzę „nieznany host” po uruchomieniu polecenia ping. Czy muszę skonfigurować / włączyć DNSMasq w innym miejscu? Lub skonfigurować moje właściwości sieciowe w inny sposób? Dzięki!
Roel van Duijnhoven
Ciekawy. dla mnie jest w porządku.
jrg
Ach, @RoelvanDuijnhoven - korzystasz z wersji 12.10 lub 12.04? Działa dla mnie dobrze 12.10.
jrg
Używam 12.10. Ale muszę wspomnieć, że próbowałem zmienić jakiś plik konfiguracyjny, zanim zadam pytanie. Być może zmiany te łagodzą Twoje rozwiązanie. Jednak rozwiązanie Javiera Rivery załatwiło sprawę!
Roel van Duijnhoven,
1

W Ubuntu 16.04 działały dla mnie następujące elementy:

  1. zainstalować dnsmasq

    sudo apt-get -y install dnsmasq
    
  2. Edytuj dnsmasq.confplik:

    sudo nano /etc/dnsmasq.conf
    
  3. Dodaj swoje polecenie:

    address=/dev/127.0.0.1
    

    W przypadku symboli wieloznacznych (*) możesz użyć kropki (.), A następnie dnsmasq, aby rozpoznać WHATEWER_YOU_PUT_HERE.yourmachine.yourdomainten sam adres IP. Na przykład,address=/.localhost.dev/127.0.0.1

  4. Uruchom ponownie usługę dnsmasq:

    sudo /etc/init.d/dnsmasq restart
    
Jeril
źródło
1

Właśnie zainstalowałem nowy 19.04 i jedynym sposobem, w jaki działałem, było wyłączenie systemd-resolvedi NetworkManagerużycie dnsmasqzamiast niego DNS. NetworkManagerma wbudowaną obsługę dnsmasqi dnsmasq-basepakiet jest instalowany domyślnie.

Ja wskazując wiele domen do różnych maszyn wirtualnych, jak *.customerX.testna 192.168.33.10i *.productY.testna 192.168.33.20i tak dalej. Nie używałbym *.devjuż więcej, ale zamiast tego jednej z zarezerwowanych domen najwyższego poziomu .

Rozwiązanie

  1. Wyłączyć systemd-resolved

    sudo systemctl disable systemd-resolved.service
    sudo systemctl stop systemd-resolved.service
    sudo rm /etc/resolv.conf
    
  2. Edytuj /etc/NetworkManager/NetworkManager.confdo użycia dnsmasqdla DNS.

    [main]
    dns=dnsmasq
    
  3. Wprowadź dnsmasqkonfigurację/etc/NetworkManager/dnsmasq.d/test-tld.conf

    address=/test/127.0.0.1
    address=/customerX.test/192.168.33.10
    
  4. i na koniec uruchom ponownie, NetworkManagerco wygeneruje nowy/etc/resolv.conf

    sudo systemctl restart network-manager.service
    
domo
źródło