Dalam file konfigurasi untuk antarmuka jaringan lokal (file yang cocok dengan pola nama /etc/systemd/network/*.network
) kita harus menentukan apakah 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, kita 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, systemd-resolved halaman manual):
Pencarian untuk nama host yang diakhiri dengan salah satu domain per antarmuka secara eksklusif dirutekan ke antarmuka yang cocok.
Lewat sini hostX.domainA.example
akan diselesaikan secara eksklusif oleh server DNS lokal kami.
Kita tentukan dengan ~example
bahwa semua domain diakhiri dengan example
harus diperlakukan sebagai domain khusus rute untuk mendapatkan perilaku berikut (dari deskripsi komit ini):
Server DNS yang memiliki domain khusus rute hanya boleh digunakan untuk domain yang ditentukan.
Lewat sini hostY.on.the.internet
akan diselesaikan secara eksklusif oleh server DNS jarak jauh global kami.
Catatan
Idealnya, saat menggunakan protokol DHCP, nama domain lokal harus diperoleh dari server DHCP, bukannya ditentukan secara eksplisit dalam file konfigurasi antarmuka jaringan di atas. Lihat UseDomains=
pilihan. Namun masih ada masalah dengan fitur ini – lihat masalah opsi domain pencarian DHCP systemd-networkd.
Kami perlu menentukan server DNS jarak jauh sebagai server DNS global sistem kami. Kita bisa melakukannya di /etc/systemd/resolved.conf
berkas:
[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 ulang layanan:
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved
Perhatian!
Jaminan di atas hanya berlaku jika nama diselesaikan dengan diselesaikan dengan sistem – lihat halaman manual untuk nss-resolve, libnss_resolve.so.2 dan halaman manual untuk systemd-resolved.service, systemd-resolved.
Lihat juga:
- Deskripsi permintaan pencarian perutean di halaman manual terkait sistem tidak jelas
- Bagaimana cara memecahkan masalah DNS dengan systemd-resolved?
Referensi:
- Halaman manual untuk systemd-resolved.service, systemd-resolved
- Halaman manual untuk resolve.conf, resolve.conf.d
- Halaman manual untuk systemd-network
Hanya untuk memperluas jawaban bagus @piotrDobrogost , jangan lupa untuk mengonfigurasi /etc/nsswitch.conf
untuk menggunakan systemd-resolved
sebagai sumber resolusi DNS. hosts
Anda direktif akan terlihat seperti berikut untuk kasus penggunaan khusus Anda:
/etc/nsswitch.conf
hosts: files resolve dns
Jadi, jika Anda membatasi resolusi hanya untuk domain yang ditentukan dalam Domains
direktif dalam /etc/systemd/resolved.conf
seperti perincian Piotr di atas, DNS selanjutnya harus dikonsultasikan dalam urutan sumber resolusi nama yang ditentukan /etc/nsswitch.conf
saat domain BUKAN ditemukan di Domains
direktif:
Tautan berikut mereferensikan persyaratan untuk menentukan penyelesaian di /etc/nsswitch.conf
jadi systemd-resolved
dikonsultasikan selama resolusi nama:
https://github.com/systemd/systemd/issues/940
Dokumentasi SystemD menurut saya mengerikan. Saya harus mengumpulkan pemahaman dari berbagai tautan, termasuk jawaban Piotr di atas;-)