Belirli bir ağ arayüzü için “sistem çözümlemesi” yapılandırmasına nasıl devam edilir?


1

Ubuntu Masaüstümü, sistem çözümlemesi olan Bionic Beaver'a yükselttim . Bu değişiklikle birlikte, LXD DNS çözünürlüğü çalışmayı durdurdu.

LXD konteynerlerini bulunabilir duruma getirmek için aşağıdaki komutu çalıştırabilirim. Not IP 10.78.38.1 , lxdbr0 köprüsünün IP adresidir .

$ sudo systemd-resolve --interface lxdbr0 --set-dns 10.78.38.1 --set-domain lxd

Bu yerinde LXD konteynerini isimleriyle keşfedebiliyorum ve konfigürasyon aşağıdaki gibi görünüyor.

$ systemd-resolve --status
.
.
.
Link 10 (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
.
.
.

Bununla birlikte, bir sistem yeniden başlatıldıktan sonra bu yapılandırma gider.

$ systemd-resolve --status
.
.
.
Link 10 (lxdbr0)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
.
.
.

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 dosyası oluşturmayı önerir, ancak bu tür bir yapılandırmayı belirli bir NIC'e özgü yapmama izin verecek hiçbir parametre yoktur.

Yanıtlar:


2

Bu mantıklı geliyor ancak herhangi bir etkisi görünmüyor:

Link manpage man 8 systemd- resolved.service 'e göre, bağlantı başına yapılandırma dosyasını aşağıdaki adreste kullanmak zorundasınız /etc/systemd/network:

Bağlantı kurulan DNS sunucuları, genel ayarlardan /etc/systemd/resolved.conf, /etc/systemd/network/*.networkdosyalardaki bağlantı başına statik ayarlardan, DHCP üzerinden alınan bağlantı başına dinamik ayarlardan ve diğer sistem hizmetleri tarafından sağlanan DNS sunucusu bilgilerinden belirlenir.

Yapılandırmanızı kalıcı kılmak için dosyayı oluşturmanız gerekir /etc/systemd/network/lxdbr0.conf:

[Match]
Name=lxdbr0

[Resolve]
DNS=10.78.38.1
Domains=lxd

Bu mantıklı geliyor ama bu ayarın sistemimde LXD ile herhangi bir etkisi görünmüyor. İlk soruyu gönderdikten sonra, önyüklemede çalışan LXD için DNS'yi yapılandırmak için yukarıda belirtilen komutu yürüten bir Systemd hizmeti oluşturdum. Bu, güvenilir bir şekilde çalışmaz, çünkü lxdbr0 arabirimi bazen o noktada henüz mevcut değildir. Bu nedenle, özel Systemd servisini manuel olarak başlatmam gerekiyor. Sanırım, bu aynı zamanda çözümünüzün LXD ile çalışmamasının da nedeni olabilir, ancak doğru yol olarak görünmesine rağmen ...
quat

Haklısın. Ama bir şekilde systemd-resolve --statusbu komutu girmeden istenen çıktıyı almayı başardım . Diğer bir problem ise, isim çözümleme konteynerlerin içinde çalışmaz. Daha iyi bir çözüm bulursam cevabımı düzeltirim.
ctx

1

Bu sorunun 2 aydır burada olduğunu biliyorum ama belki hala bazı cevaplara ihtiyacın var?

1) Systemd-networkd ağ konfigürasyonlarını (en az) 3 dizinde, belki daha fazlasında depolar. Sizinle en alakalı görünen kişi:

/etc/systemd/network/ 

(diğer 2'yi geçersiz kılar, yani / lib / s / n ve / run / s / n.

Buna benzer bir metin dosyası oluşturun:

[Match]
Name=enp0s4

[Network]
DHCP=yes
DNS=192.168.1.1

Bu dizinde olduğu sürece, istediğinizi adlandırabilirsiniz, benim adı enp0s4.network, içeriğin doğru olması kritiktir , yanlış yaparsanız, ağınızın çalışması durur gibi kötü şeyler olur, en azından Bu arayüzde, çalışan bir config geri yükleyene kadar. Bu kolay değil, benimkileri mahvettim ve çözmem bir saatimi aldı. İyi ki "sunucum" yan odada, uzak bir veri merkezinde değil!

Köprü kurma örnekleri için buradan okuyun:

man systemd.network |grep -A 42 "Example 3"

Orada verilen örnekler ve kod snippet'im ayarlayabilir:

Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 10.78.38.1

DNS etki alanı için sözdiziminin ne olduğundan emin değil, mümkün olmalı, man sayfası 30 sayfa uzunluğunda! Yapabilirseniz, atlayın, "Domain =" yi denemek sistemimi bozdu, yanlış anlamanın kötü, kişisel bir deneyim olduğunu biliyorum. :-) Öyleyse doğru sözdizimini bulun ya da kurtaramazsanız yazmayın.

Kurtarma, yorgun olmama rağmen, başka bir gönderi.

İşte kullandığım referanslar:

Ağın çalışıp çalışmadığını kontrol etme: https://superuser.com/questions/1187633/how-to-debug-systemd-networkd?rq=1#comment1807294_1187633

Devre dışıysa nasıl etkinleştirilir: https://askubuntu.com/posts/681768/revisions

Systemd-resolver'ı yeniden başlatmadan yeniden başlatın:

sudo systemctl restart systemd-resolved

Bilginize: Sistem yöneticisine Ağ Yöneticisi'nin bir arayüzü yönetmesine izin vermesinin yanı sıra "yönetilmeyen" bırakmasını ve /etc/resolv.conf gibi düz dosya yapılandırmalarıyla çalışmasını sağlamanın bir yolu vardır. Ama ayakkabılarındaymış gibi çalışmasını sağlarım. Ve ben, başka bir amaç için farklı arayüzleri yapılandırmaya çalışıyorum, ama tüm bu bilgilere ihtiyacım vardı. kendime yardım etmek için yukarıda, bu yüzden paylaşacağımı düşündüm. Geçici olarak nasıl değiştirileceğini paylaştığınızdan, bu da faydalıdır. :-)

HTH


0

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.04ve 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.servicebu 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.confdosya 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.serviceBenim 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.serviceve değişiklikleri devam ettirerek kalıcı olduğunu doğrulamak için ana bilgisayarı yeniden başlatın systemd-resolve --status. lxbr0Arayü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 *.networkarayü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.


Öneriniz için teşekkür ederiz. Maalesef bu durum kafasındaki tırnağa pek çarpmıyor. Önerilen ayar ile, DNS ayarları geneldir ve ağ arayüzüne (NIC) özgü değildir. Çalıştırmak için olsaydı systemd-resolve --statusyerde ayarlarla, bunu fark edecektir Link 10 (lxdbr0)bölüm DNS yerinde yapılandırma yerine küresel yoktur. Şu an itibariyle, @ctx yanıtının en yakın çağrı olduğuna inanıyorum superuser.com/a/1365864/433376, ancak muhtemelen bir hata çalışmamasının nedeni. Şimdilik bunu Ubuntu 19.04 ile test ettim.
kuat

Evet doğru. Asıl soru, ne başarmak istediniz? Sizi doğru anladıysam, ana bilgisayar üzerinde kapsayıcı adlarının çözümlenmesini istediniz ve önerim bunu yapıyor. Demek istediğim, bu davanızda neden özel olmak gerekiyor? Oh, ve ctx açısından. Ağ yöneticisinde .conf ile çalışmadığını düşünüyorum çünkü ağ yöneticisinde lxcbr0 için hiçbir yerde tanımlanmış bir ağ yoktur. En azından sistemimde bir tane bulamadım.
tobi

Bu sorunun kapsamı, 'systemd-solve' komutunun kullanılmasıyla yapılabilecek ayarları sürdürmektir (tam komut için soruya bakın). YMMV ancak NIC'ye özgü DNS ayarlarının gerekli olduğu durumlar vardır. Ağ yöneticisi ile ilgili olarak, bu konuda haklı olabilirsiniz. Bu sorunun eski stil DNS çözünürlüğü ile yeni sistemd çözümleme yolu arasındaki bir karışıklıktan kaynaklanabileceğini düşünüyorum.
kuat

Tamam haklısın. Odak noktam, lxd dnsmasq sunucusunu global kapsamda kaldırarak bir geçici çözüm bulmaktı. Dürüst olmak gerekirse, systemd solve komutunu sürdürmenin bir yolu olduğundan şüpheliyim. Temelde çünkü ağ başlangıçta yapılandırmak için netplan değil systemd kullanıyor. Buna karşılık, değişiklikleri sürdürmek için sisteme de ihtiyacınız olacak. Linuxcontainers.org'da benim iddiam bazı [yedekleme] buluyor ( Discuss.linuxcontainers.org/t/… ). Bu bilgiyle cevabımı güncelleyeceğim.
tobi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.