W pliku konfiguracyjnym interfejsu sieci lokalnej musimy albo określić, że chcemy uzyskać adres lokalnego serwera DNS z serwera DHCP, używając DHCP=
opcji :
[Network]
DHCP=yes
lub wyraźnie podaj adres, używając DNS=
opcji :
[Network]
DNS=10.0.0.1
Ponadto musimy określić (w tej samej sekcji) domeny lokalne za pomocą Domains=
opcji
Domains=domainA.example domainB.example ~example
Określamy domeny lokalne, domainA.example domainB.example
aby uzyskać następujące zachowanie (ze strony systemd-resolved.service, systemd-resolved man):
Wyszukiwanie nazwy hosta kończącej się na jednej z domen interfejsu jest kierowane wyłącznie do pasujących interfejsów.
Ten sposób hostX.domainA.example
zostanie rozwiązany wyłącznie przez nasz lokalny serwer DNS.
Podkreślamy, ~example
że wszystkie domeny kończące się na example
mają być traktowane jako domeny tylko trasy, aby uzyskać następujące zachowanie (z opisu tego zatwierdzenia):
Serwery DNS, które mają domeny tylko trasy, powinny być używane tylko dla określonych domen.
Ten sposób hostY.on.the.internet
zostanie rozwiązany wyłącznie przez nasz globalny, zdalny serwer DNS.
Uwaga
Idealnie, gdy używasz protokołu DHCP, lokalne nazwy domen powinny być uzyskiwane z serwera DHCP zamiast być wyraźnie określone w pliku konfiguracyjnym interfejsu sieciowego powyżej. Zobacz UseDomains=
opcję . Jednak nadal występują nierozwiązane problemy z tą funkcją - zobacz problem opcji systemd-networkd domen wyszukiwania DHCP .
Musimy określić zdalny serwer DNS jako nasz globalny systemowy serwer DNS. Możemy to zrobić w /etc/systemd/resolved.conf
pliku:
[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
Nie zapomnij ponownie załadować konfiguracji i zrestartować usługi:
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved
Uwaga!
Powyższe gwarancje mają zastosowanie tylko wtedy, gdy nazwy są rozwiązywane przez systemd-resolved - patrz strona podręcznika dla nss-resolver , libnss_resolve.so.2 i strona podręcznika dla systemd-resolved.service, systemd-resolved .
Zobacz też:
Referencje:
.local
w tym przykładzie? Z pewnością w przypadku avahi miało to być zarezerwowane dla MDNS, a nadużywanie tego było dużym nie-nie. Byłoby dla mnie łatwiejsze w użyciuexample.com
lub .przykład ..local
jest zdefiniowany jako domena specjalna w RFC 6762 - DNS multiemisji w sekcji Nazwy DNS multiemisji . Dzięki, naprawione./etc/systemd/network/*.network
? Znaleziono tutaj superuser.com/a/1365864Aby rozwinąć doskonałą odpowiedź @piotrDobrogost, nie zapomnij o konfiguracji,
/etc/nsswitch.conf
aby używać jejsystemd-resolved
jako źródła rozpoznawania nazw DNS. Twójhosts
dyrektywa powinna wyglądać następująco dla konkretnego przypadku użycia:/etc/nsswitch.conf
Jeśli więc ograniczysz rozdzielczość tylko do domen określonych w
Domains
dyrektywie w/etc/systemd/resolved.conf
powyższym opisie Piotra, DNS należy następnie skonsultować w kolejności źródeł rozpoznawania nazw określonych,/etc/nsswitch.conf
gdy domeny NIE znajdują się wDomains
dyrektywie:Poniższe odnośniki Link Wymóg określenia determinację w
/etc/nsswitch.conf
taksystemd-resolved
jest konsultowany podczas rozpoznawania nazw:https://github.com/systemd/systemd/issues/940
Dokumentacja SystemD okazała się tragiczna. Musiałem zebrać zrozumienie z wielu linków, w tym powyższej odpowiedzi Piotra ;-)
źródło
/etc/resolve.conf
znajduje się dowiązanie symboliczne do/run/systemd/resolve/stub-resolv.conf
pliku, które z kolei zawiera adres systemu rozpoznawania kodów pośredniczących DNS systemud- resolver, nie ma potrzeby umieszczaniaresolve
dyrektywy w/etc/nsswitch.conf
pliku, ponieważ żądania DNS będą kierowane (ze względu na standardowąnss-dns
dyrektywę) na przelicznik kodów pośredniczących, który działa zgodnie z regułami systemd-resolved ./etc/nsswitch.conf``? In the specimen config above,
/ etc / hosts` (" pliki ") byłyby sprawdzane pod kątem statycznych adresów IP: mapowania nazw, a jeśli nie znaleziono, należy skonsultować się z rozwiązanym skrótem rozstrzygniętym . Nie rozumiem, w jaki sposób byłoby możliwe zebranie źródeł rozstrzygania DNS bez użycia/etc/nsswitch.conf
. Czy brakuje mi tutaj podstępu?/etc/nsswitch.conf
jest potrzebne. Mówię, że jeśli ktoś używa systemowego rozpoznawania nazw kodów DNS przez systemd-resolved, wystarczy miećdns
dyrektywę na liściehosts:
(prawdopodobnie pofile
dyrektywie). Nie ma potrzeby stosowaniaresolve
dyrektywy tam jak to jest rezolwer stub że jest punktem wejścia do Systemd-rozdzielczej znajduje się logiką a nienss-resolve
plug-in module ...resolve
dyrektywa ➟ NSS-resolve NSS plug-in module ➟ Systemd-rozdzielczej lub za pośrednictwemdns
dyrektywy ➟ NSS-DNS plug-in NSS modułu ➟ Systemd-Rozwiązany'S 'rezolwerem stub DNS ➟ systemd-resolvedfiles
czymresolve
thingy w/etc/nsswitch.conf
od 2 części pytania. Po ponownym przeczytaniu wygląda to tak, jakbyś właśnie mówił o sprawdzeniu lokalnej pamięci podręcznej pod kątem adresu IP: mapowanie nazwy, a następnie skontaktowanie się z usługą przesyłania dalej, jeśli nie zostanie znalezione. Zasadniczo ustawiamfiles
pierwsze źródło rozdzielczości DNS tak, aby