Dalam file konfigurasi untuk antarmuka jaringan lokal kita harus menentukan kita ingin mendapatkan alamat server DNS lokal dari server DHCP menggunakan DHCP=
opsi :
[Network]
DHCP=yes
atau tentukan alamatnya secara eksplisit menggunakan DNS=
opsi :
[Network]
DNS=10.0.0.1
Selain itu kami perlu menentukan (di bagian yang sama) domain lokal menggunakan Domains=
opsi
Domains=domainA.example domainB.example ~example
Kami menentukan domain lokal domainA.example domainB.example
untuk mendapatkan perilaku berikut (dari systemd-resolved.service, halaman manual systemd-resolved ):
Pencarian untuk nama host yang diakhiri dengan salah satu domain per-antarmuka secara eksklusif dialihkan ke antarmuka yang sesuai.
Cara ini hostX.domainA.example
akan diselesaikan secara eksklusif oleh server DNS lokal kami.
Kami menetapkan ~example
bahwa semua domain yang diakhiri example
harus diperlakukan sebagai domain hanya rute untuk mendapatkan perilaku berikut (dari uraian komit ini ):
Server DNS yang memiliki domain hanya rute hanya boleh digunakan untuk domain yang ditentukan.
Cara ini hostY.on.the.internet
akan diselesaikan secara eksklusif oleh server DNS global kami yang jarak jauh.
Catatan
Idealnya, saat menggunakan protokol DHCP, nama domain lokal harus diperoleh dari server DHCP alih-alih ditentukan secara eksplisit dalam file konfigurasi antarmuka jaringan di atas. Lihat UseDomains=
opsi . Namun masih ada masalah luar biasa dengan fitur ini - lihat masalah opsi pencarian domain systemd-networkd DHCP .
Kita perlu menentukan server DNS jarak jauh sebagai server DNS global kami yang mencakup seluruh sistem. Kita dapat melakukan ini di /etc/systemd/resolved.conf
file:
[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
Jangan lupa memuat ulang konfigurasi dan memulai kembali layanan:
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved
Peringatan!
Jaminan di atas hanya berlaku ketika nama sedang diselesaikan oleh systemd-diselesaikan - lihat halaman manual untuk nss-resolve, libnss_resolve.so.2 dan halaman manual untuk systemd-resolved.service, systemd-diselesaikan .
Lihat juga:
Referensi:
.local
dalam contoh ini? Tentu dengan avahi, ini seharusnya dicadangkan untuk MDNS dan menyalahgunakannya adalah no-no besar. Akan lebih jelas bagi saya untuk menggunakanexample.com
atau .example ..local
didefinisikan sebagai domain khusus dalam RFC 6762 - DNS Multicast di bagian Nama DNS Multicast . Terima kasih sudah diperbaiki./etc/systemd/network/*.network
? Ditemukan di sini superuser.com/a/1365864Hanya untuk memperluas jawaban yang sangat bagus dari @piotrDobrogost, jangan lupa konfigurasi
/etc/nsswitch.conf
untuk digunakansystemd-resolved
sebagai sumber resolusi DNS.hosts
Arahan Anda harus terlihat sebagai berikut untuk kasus penggunaan khusus Anda:/etc/nsswitch.conf
Jadi, jika Anda membatasi resolusi hanya untuk domain yang ditentukan dalam
Domains
direktif/etc/systemd/resolved.conf
sebagai rincian Piotr di atas, DNS selanjutnya harus dikonsultasikan dalam urutan sumber resolusi nama yang ditentukan/etc/nsswitch.conf
ketika domain TIDAK ditemukan dalamDomains
direktif:Link berikut referensi persyaratan untuk menentukan tekad di
/etc/nsswitch.conf
sehinggasystemd-resolved
dikonsultasikan selama resolusi nama:https://github.com/systemd/systemd/issues/940
Dokumentasi SystemD yang saya temukan mengerikan. Saya harus mengumpulkan pemahaman dari banyak tautan, termasuk jawaban Piotr di atas ;-)
sumber
/etc/resolve.conf
adalah sebuah symlink ke/run/systemd/resolve/stub-resolv.conf
file yang yang pada gilirannya berisi alamat systemd-tekad ini penyelesai DNS rintisan tidak perlu ke tempatresolve
direktif dalam/etc/nsswitch.conf
file sebagai permintaan DNS akan diarahkan (karena standarnss-dns
direktif) ke resolver stub yang bertindak sesuai dengan aturan yang diselesaikan oleh systemd ./etc/nsswitch.conf``? In the specimen config above,
/ etc / hosts` (" file ") akan diperiksa untuk IP statis : pemetaan nama dan jika tidak ada yang ditemukan, rintisan yang diselesaikan dengan systemd yang diselesaikan selanjutnya akan dikonsultasikan . Saya tidak bisa melihat bagaimana mungkin untuk itu sumber tahap resolusi DNS tanpa menggunakan/etc/nsswitch.conf
. Apakah saya melewatkan trik di sini?/etc/nsswitch.conf
tidak diperlukan. Saya mengatakan bahwa ketika seseorang menggunakan resolver DNS rintisan systemd-resolved maka cukup memilikidns
direktif terdaftarhosts:
sesuai (mungkin setelahfile
direktif). Tidak perluresolve
direktif di sana karena rintisan resolver yang merupakan titik masuk ke logika systemd-resolved dan bukannss-resolve
modul plug-in ...resolve
direktif ➟ nss- resolved modul plug-in NSS ➟ systemd-resolved atau melaluidns
direktif ➟ nss-dns modul plug-in NSS ➟ moduled resolved 'stub DNS resolver ➟ systemd-diselesaikanfiles
kemudianresolve
thingy di/etc/nsswitch.conf
dari bagian 2 dari pertanyaan Anda. Membaca ulang, sepertinya Anda baru saja berbicara tentang mengecek cache lokal untuk IP: pemetaan nama kemudian menjangkau forwarder jika tidak ditemukan. Saya biasanya menetapkanfiles
sumber resolusi DNS pertama untuk mem-bypass DNS agar saya dapat menguji dan tidak menekan host produksi- T