Bu sorunun hala kabul edilmiş bir cevabı yok ve ayrıca ana bilgisayardaki kapsayıcı adlarını çözmede büyük problemler yaşadığım için çözümümü sağlamam gerektiğini düşündüm. Bunu yapıyorum, çünkü bu sayfa sytemd-resolved.service’deki kalıcı değişiklikleri ararken bu ilk google sonucudur. Son olarak, bu sorunun kendine özgü göründüğünden Ubuntu >= 18.04
ve bunun versiyonundan bahsetmek istiyorum systemd-resolved.service
.
Bu nedenle, mand systemd-resolved.service zaten belirtilmiştir. LXD durumunda ise, yanıltıcı sonuçlar çıkarılmıştır. LXD arayüzünün tanımlanması gerekmez /etc/systemd/network/<iface>.{conf|network}
. Arabirim zaten çalışıyor ve bu nedenle sistemin ağ yöneticisi için tanımlanması gerekmiyor. Varsayılan olarak LXD, ağlarında ilk ana bilgisayar adresini dinleyen, çalışan bir DNS sunucusuna sahiptir. Tek yapmamız gereken systemd-resolved.service
bu sunucuyu tanımak.
Manpage (yukarıda bağlantılı) şunlardan bahseder /etc/systemd/resolved.conf
:
Varsayılan yapılandırma derleme sırasında tanımlanmıştır, bu nedenle bir yapılandırma dosyası yalnızca bu varsayılanlardan sapmak gerektiğinde gereklidir. Varsayılan olarak, / etc / systemd / içindeki yapılandırma dosyası, varsayılanları yöneticiye kılavuz olarak gösteren yorumlanmış girişler içerir. Bu dosya yerel geçersiz kılmalar oluşturmak için düzenlenebilir.
Vurgulamak istiyorum: Bu dosya yerel geçersiz kılmalar oluşturmak için düzenlenebilir . @quat aslında asıl sorunuza da atıfta bulunuyorsunuz:
Yukarıdakileri kalıcı kılmak için, http://manpages.ubuntu.com/manpages/bionic/man8/systemd-resolved.service.8.html systemd-solve manpage sayfasını inceledim . Bir /etc/systemd/resolved.conf.d/lxd.conf
dosya oluşturmayı önerir, ancak bu tür bir yapılandırmayı belirli bir NIC'ye özgü yapmama izin verecek hiçbir parametre yoktur.
1. lxd'nin dnsmasq servisini systemd-resolved.service global dns ayarlarına ekleme: Son cümlenizi
anlamıyorum. NIC'yi belirtmeniz gerekmez. Sadece LXD dns sunucusu adresini belirtmeniz gerekir. Ağ bilgilerinizi kullanarak çalışan bir konfigürasyon /etc/systemd/resolved.conf
şöyle görünecektir (varsayılanları değiştirmek zor
[Resolve]
DNS=10.78.38.1
#OBFallbackDNS=
Domains=LXD
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes
Dosyayı kaydettikten sonra sunucunuzu yeniden başlatın veya sadece systemctl restart systemd-resolved.service
Benim için bu, yeni bir Ubuntu-18.04.02 kurulumunda gayet iyi çalıştı. Sizin için işe yaramazsa, varsayılan olmayan bir LXD kurulumu yaptığınızı veya işletim sisteminizin yükseltilmesi nedeniyle sorunlarınız / ihtilaflarınız olduğunu farz ediyorum.
2. GÜNCELLEME (NIC'e özel kurulum): Simos'un Blog'una
göre, devam etmenin tek yolu
, sistem başlangıcında NIC'ye özel yapılandırmayı başlatan özel bir sistemd servisi oluşturmaktır. Bu yol şu anda "yarı resmi" linuxcontainers.org "kabul" yaklaşımı$ sudo systemd-resolve --interface lxdbr0 --set-dns 10.78.38.1 --set-domain lxd
Blogda belirtilen örnek:
Sistemd-çözümlemesi yoluyla belirli belirli dns'ler sağlayan Shell betiği (lxdhostdns_start.sh)
$ cat /usr/local/bin/lxdhostdns_start.sh
#!/bin/sh
LXDINTERFACE=lxdbr0
LXDDOMAIN=lxd
LXDDNSIP=`ip addr show lxdbr0 | grep -Po 'inet \K[\d.]+'`
/usr/bin/systemd-resolve --interface ${LXDINTERFACE} \
--set-dns ${LXDDNSIP} \
--set-domain ${LXDDOMAIN}
Shell betiği, nicd belirli dns'leri systemd solve (lxdhostdns_stop.sh) ile devre dışı bırakma
$ cat /usr/local/bin/lxdhostdns_stop.sh
#!/bin/sh
LXDINTERFACE=lxdbr0
/usr/bin/systemd-resolve --interface ${LXDINTERFACE} --revert
İki komut dosyasını yönetmek ve sistem başlangıcında başlatılmalarını sağlamak için bir systemd hizmeti oluşturma:
$ sudo cat /lib/systemd/system/lxd-host-dns.service
[Unit]
Description=LXD host DNS service
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/local/bin/lxdhostdns_start.sh
RemainAfterExit=true
ExecStop=/usr/local/bin/lxdhostdns_stop.sh
StandardOutput=journal
[Install]
WantedBy=multi-user.target
Son fakat en az değil systemctl enable lxd-host-dns.service
ve değişiklikleri devam ettirerek kalıcı olduğunu doğrulamak için ana bilgisayarı yeniden başlatın systemd-resolve --status
. lxbr0
Arayüzü artık DNS kapsamında olması gerekir ( Current Scopes: DNS
). Ağınızı göz önüne alarak şöyle görünmelidir:
Link 3 (lxdbr0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 10.78.38.1
DNS Domain: lxd
Bunun ideal bir çözüm olmadığının farkındayım ve teknik olarak hala bu yapılandırmayı sistem çözümlemesi içinde sürdürme konusundaki sorunuza cevap vermiyor. Bununla birlikte, bunu sürdürmedeki sorun, lxbr0 arayüzünün netplan tarafından değil Ubuntu18.04'teki systemd tarafından yönetildiği gerçeğinden kaynaklanmaktadır. Netplan arayüz hakkında bir şey bilmediğinden, yukarıda belirtilen *.network
arayüz konfigürasyonlarını dns ve domain ayarlarını eklemek için kullanamazsınız lxbr0
.
Bu cevap şimdi uzun bir metin duvarı ama umarım sorunu biraz açıklığa kavuşturur. Her iki çözüm de bir ubuntu ana bilgisayarındaki konteyner adlarını çözer. İkincisi daha doğrudur, ancak tek gereksinim ana bilgisayardaki ad çözümlemesiyse, lxd'nin dnsmasq hizmetini global olarak erişilebilir kılmak /etc/systemd/resolved.conf
, özellikle bir yapılandırma dosyasında yalnızca iki düzenleme gerektirdiğinden uygulanabilir bir alternatiftir.