NetworkManager ile dnsmasq kullanma


15

NetworkManager'ın iyi oynamadığı iyi biliniyordu dnsmasq(ref: burada ). Burada uzun süren tartışmalardan kaçtım ama yine de durumla başa çıkmanın önerilen yolunun ne olduğundan emin değilim.

Tek istediğim dnsmasqyerel ağıma DNS ve DHCP sağlamak için kullanmak . Bu durumda önerilen yol ne olurdu?

Sorun, Ubuntu 14.04 için bile devam ediyor gibi görünüyor, hatta hatanın düzeltildiği iddia ediliyor.

Etrafında çalışırken, insanlar NM-köleliğini devre dışı bırakıyor dnsmasq-baseçünkü aşağıdaki nedenlerden dolayı:

NM-köleleştirilmiş dnsmasq, son derece sınırlı işlevsellik sağlayan sabit kodlanmış seçenekler (C cinsinden) kullanır.

  • EthX'i ( --listen-address=127.0.0.1) dinlemez . Dolayısıyla sunucularımızı yerel ağ bilgisayarlarımız için DNS sunucusu olarak kullanamayız, yani LAN'lar için tamamen işe yaramaz.
  • İstekleri önbelleğe almaz ( --cache-size=0). Önbellek yok ==> DNS sorgusu hızlandırması yok. Bu, LAN'lar için çok önemlidir, çünkü birçok eşzamanlı kullanıcı vardır.
  • Son olarak, dnsmasq'ın DHCP ve TFTP işlevlerine de ihtiyacımız var, bu yüzden NM + dnsmasq gerçek bir DNS sunucusu içeriyor olsa bile, başka bir dnsmasq çalıştırmamız gerekir

Ama hala tutup tutmadıklarından ve / veya düzeltmenin problemleri nasıl çözdüğünden emin değilim. Ayrıca, hiçbiri tam olarak ne yaptıkları ve problemlerini çözmek için nasıl yaptıkları konusunda net değildir. Yani, çözüm kısmı uzun tartışmadan yoksundur . Birisi boşlukları doldurabilir mi lütfen? yani,

dnsmasqUbuntu tarafından sağlanan dışı kutu yukarıdaki nedenlerle, sunucu tarafında, çalışmıyor. Ve ayrıca, istemci tarafında, "bu Ubuntu dizüstü bilgisayarlara kurulan dnsmasq DNS sunucumdan LAN DNS sorgusu yapamaz" , çünkü "(Ubuntu dizüstü bilgisayarlar) NetworkManager garip bir 127.0.1.1 ad sunucusu ayarına sahip oluyor" ( ref: LAN veya yerel ev ağı için DNS çözümü )

Hem sunucu hem de istemci tarafında yerel ağıma DNS ve DHCP (ve TFTP) sağlamak için dnsmasq'ın NetworkManager ile sorunsuz çalışmasını nasıl sağlayabilirim?

TL'dr

cevap arayanlar için. Aşağıdaki tüm cevaplardan, en basit çözümün sunucu tarafı için @ brad's olduğunu gördüm (hala istemci tarafı için iyi bir cevap yok):

sorunun tek çözümü NM-sürücüsü dnsmasq ... 'ı devre dışı bırakmak ve "standart" dnsmasq'ı kurmak ve ardından standart /etc/dnsmasq.confyapılandırma dosyası üzerinden yapılandırmaktır.


2
Sadece Google çalışanları için (benim gibi): NetworkManager'ın içindeki ubuntu dnsmasq-core'un yeni sürümlerinde biraz daha arkadaş canlısı. Buraya bakın: askubuntu.com/questions/233195/…
A. Rabus

Yanıtlar:


3

Senin de problemlerin var.

Prensip olarak, wiki.archlinux'dan sonra , önbelleğe almayı etkinleştirmek için /etc/NetworkManager/dnsmasq.d/cachebasitçe aşağıdakileri içeren bir dosya oluşturmak yeterli olacaktır

$ cat /etc/NetworkManager/dnsmasq.d/cache 
cache-size=1000

Bunu denedim ama NM yeniden başladıktan sonra hala önbellek yok:

# ps ax | grep dns
11724 ?        S      0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d

Belirtilen conf dosyasının her zaman boş olduğunu unutmayın: Bu yordamı kullanarak herhangi bir seçeneği yapılandıramıyorum.

Sonuçta, 14.04'teki NM-köleleştirilmiş dnsmask'ın (dnsmasq-baz paketi tarafından sağlanan) tamamen kilitli olduğu anlaşılıyor, bu nedenle önbelleğe almayı veya başka bir şeyi (dhcp, tftp) etkinleştirmek mümkün değil.

Bu doğruysa, dediğiniz gibi, sorunun tek çözümünün, hattı yorumlayarak NM-sürücüsü dnsmasq'ı devre dışı bırakmak olduğunu düşünüyorum.

dns=dnsmasq

dosyada /etc/NetworkManager/NetworkManager.confve standart aracılığıyla yapılandırmak sonra "standart" Dnsmasq yükleyip /etc/dnsmasq.confyapılandırma dosyası.


Süper kullanıcı brad hoş geldiniz! Yardımın için teşekkürler!
xpt

1
Onunla çalışıyor beri Aslında bu, önbelleği izin yok --conf-dir=/etc/NetworkManager/dnsmasq.d, cache-sizesen kullanıldığı oluşturulan dosyasında belirtilen. Farkı kullanarak görebilirsinizdig
sirfz

6

Ayarları içine koyarak geçersiz kılmak mümkündür /etc/NetworkManager/dnsmasq.d/*.conf. Yapılandırma dosyası ayarları, komut satırı bayraklarına göre önceliklidir. NetworkManager dnsmasq'ı başlattığında uygulanırlar. sudo service network-manager restartYeniden uygulamak için çalıştırın . (Herhangi bir şüphe varsa: brad'ın cevabı ps ax | grep dnsbir --conf-dirargüman gösteren gerçeği kaçırdı )

Örneğin:

echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

Hatırladığım gibi, NetworkManager önbellek zehirlenmesi konusundaki endişeler nedeniyle varsayılan olarak dnsmasq önbelleğe almayı devre dışı bırakır. Tüm kullanıcıların güvendiği bir makine için sorun olmayabilir.

NetworkManager ile entegre olmaz ve resolvconf paketi kurulu ise adresindeki NM'nin resolvconfsunucusu 127.0.1.1yerel olarak kullanılmaz. resolvconf, ubuntu-minimal ve standart Debian kurulumlarının bir parçasıdır; NetworkManager bu işlevselliği daha entegre, daha az komut dosyası tabanlı bir şekilde yeniden uygular.

NetworkManagerın küresel dnsmasq örneği (ikincil loopback IP bağlanma ve ayar müdahale için emin yapmaz bind-interfacesaracılığıyla /etc/dnsmasq.d/network-manager). Genel bir dnsmasq örneği yüklerseniz ve NM örneğini tutarsanız /etc/resolv.conf, ana bilgisayarın varsayılan olarak hangisini kullanacağını görmek için iki kez tekrar kontrol edin .

NetworkManager'ın dnsmasq örneğini yukarıda gösterildiği gibi özelleştirebilmenize rağmen, genel arabirimlere bağlanan bir DNS sunucusu istiyorsanız, dnsmasqpaketi yüklemeniz gerekir (NetworkManager yalnızca dnsmasq-basegenel bir örneği yapılandırmayan kullanır ) ve yapılandırmanızı yerleştirin /etc/dnsmasq.d/*.conf. NetworkManager'ın slave örneği yalnızca geridöngü arayüzüne bağlanmak ve bu kapsamın ötesinde yapılandırmak onu kırma riskiyle karşı karşıyadır.


Özet olarak, yalnızca yerel DNS önbelleklemesi isteyen biri için:

sudo apt-get remove dnsmasq resolvconf dhcpcd5 rdnssd
echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

Basit bir LAN için, NetworkManager'ın bağlantı paylaşımı hala yeterli olmalıdır. Ancak TFTP ve benzeri özel olarak yapılandırılmış bir LAN için:

sudo apt-get install resolvconf dnsmasq
echo 192.168.0.50,192.168.0.150,12h |sudo tee -a /etc/dnsmasq.d/lan.conf
echo enable-tftp |sudo tee -a /etc/dnsmasq.d/lan.conf
sudo service dnsmasq restart

Teşekkürler. Daha tam olarak "özetle" komutları ne açıklamalıdır rağmen, yani onları anda varsa talimatlar da 4 paketleri kaldırmak Daha bağlantıları ve tartışma at reddit.com/r/Ubuntu/comments/2j0va4/...
nealmcb

Oldukça @nealmcb, Tobu katılıyorum nedenini açıklayınız "sadece yerel bir DNS önbelleği isteyen biri için" onlar gerekir kaldırmakdnsmasq paketi. o zaman bir sonraki echokomut ne içindir? o dnsmasqzaman gitmiş olacak.
xpt

@xpt Tobu kaldırmayı önerir dnsmasq, ancak yine de dnsmasq-baseNM nedeniyle yüklemelisiniz.
Thalis Kalfigkopoulos

0

Belirli bir IP adresine belirli bir MAC atamak istedim ve kararlılık amacıyla, varsayılan Ağ Yöneticisi / dnsmasq ile mümkün olduğunca sopa.

https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.c , yapılandırmaları yoksaymak için --conf dosyasını kullanma hakkında bir yorum içeriyor, ancak dosyada daha sonra var

/* dnsmasq exits if the conf dir is not present */
    if (g_file_test (CONFDIR, G_FILE_TEST_IS_DIR))
        nm_cmd_line_add_string (cmd, "--conf-dir=" CONFDIR);

Ubuntu 16.04 LTS altında, bir Wi-Fi Etkin Noktası kurduktan ve başka bir bağlantı paylaştıktan ps auxgww | grep dnsmasqsonra, dnsmasq işlemlerinin her birinin son komut satırı argümanının:

--conf-dir=/etc/NetworkManager/dnsmasq-shared.d

Böylece, bu dizinde Ağ Yöneticisi tarafından başlatılan tüm dnsmasq çağrıları arasında paylaşılan yapılandırma dosyaları oluşturmak mümkündür.

/Etc/NetworkManager/dnsmasq-shared.d/Hue oluşturdum

dhcp-host=0c:4d:e9:a0:ce:cf,192.168.1.221

ve yine de yeniden başlatıldı,

sudo service network-manager restart

çalışırdı.

Bu, cihazımın uygun IP adresini almasına neden oldu.

Evet, bu yanlıştır, çünkü NetworkManager tarafından dnsmasq'ın tüm çağrılarının bu bildirimi alacağı anlamına gelir, ancak bu durumda zararsızdır, çünkü sadece MAC söz konusu ağda görünüyorsa önemlidir. Ağ 192.168.1 değilse, sorun olacaktır.

Bu, https://gist.github.com/magnetikonline/6236150 adresinde önerildiği gibi / usr / sbin / dnsmasq yerine bir komut dosyası koymak yerine daha sağlamdır.

Doğru çözüm, dnsmasq'ın dnsmasq yapılandırma dosyalarını doğru bir şekilde kullanmak için nasıl çağrıldığını değiştirmek olacaktır. Network Manager'ın "sadece işe yaraması" arzusunu anlıyorum, ama araçları aptal geçirmez yapmak, sadece aptalların bunları kullanabileceği anlamına geliyor.


cevap Christopher için teşekkürler, ancak, gerçekten takip edemiyorum ... "Ben belirli bir IP adresine belirli bir MAC atamak istedim ve istikrar amacıyla" ... "ps auxgww | grep dnsmasq gösterir dnsmasq süreçlerinin her birinin son komut satırı argümanı " ... " Ben yaratırdım ... çalışmış olacaktı " ... " Evet, bu yanlış " ... Yani, düşünce treninizi gerçekten takip edemiyorum , burada ne söylemeye çalıştığınızı anlamlandırmak için.
xpt

0

Benim çözümüm Ağ Yöneticisi'ni ve her şeyi basit bir şekilde yapma yolunu kırabilir. NM'nin dnsmasq ile uğraşmanın kırık yolu ile, sadece aşağıdaki yöntemimle geçersiz kıldım.

Soruna geçici bir çözüm sadece aşağıdakileri yapmaktı:

sudo apt install dnsmasq
cp /etc/dnsmasq.conf ~/

Düzenleme ~/dnsmasq.confNe olmasını ve kaydetmek istediğiniz nasıl kullanıcı dizininde dosya.

sudo rm -v /etc/dnsmasq.conf
sudo cp -v ~/dnsmasq.conf /etc/
sudo chattr +i /etc/dnsmasq.conf
sudo systemctl restart dnsmasq.service

Basit bir bash diğer adı yaptım ve dnsmasq.conf dosyasını düzenlemeyi kolaylaştırmak için ~ / .bash_aliases dosyasının altına koydum. İşte takma ad:

alias="sudo chattr -i /etc/dnsmasq.conf && sudo nano -w /etc/dnsmasq.conf && sudo chattr +i /etc/dnsmasq.conf && sudo systemctl restart dnsmasq.service"

Tabii ki, takma addaki ikinci sudo komutunu beğenmek için herhangi bir editör seçebilirsiniz, ancak orada herkes için kolaylık için nano kullandım. Dosyayı kaydedin, komut terminali sekmenizi / pencerenizi kapatın ve yeniden açın. Bu, takma adın yeni açılan terminal sekmelerinde / pencerelerinde kullanılabilmesini sağlamalıdır.

Sadece eddmckullanıcı hesabınızdan çalıştırın ve yükseltilmiş komutları gerçekleştirmek için şifrenizi soracaktır.

Her zaman chattr +idosya olduğuna dikkat edin . Bu, Network Manager'ın kendi yapılandırmanızın üzerine yazmamasıdır.

Kablolu ethernet bağlantılarında herhangi bir sorun olmamalıdır. Ben bir erişim noktasına bağlandıktan sonra manuel olarak dnsmasq.service yeniden başlatmak zorunda kablosuz ile dizüstü bilgisayarlarda dns önbellek için dnsmasq kullandığımdan beri buldum. Ağ Yöneticisi'nin bağlanırken hizmetleri yeniden başlatma gibi görevleri yerine getirebileceğini düşünüyorum, ancak henüz buna bakmadım.


0

Burada ve başka yerlerde iddialara rağmen, NetworkManager tüm dmsmasq yapılandırma dosyalarını - hatta kendi dizinindeki dosyaları - tamamen yok sayar /etc/NetworkManager/dnsmasq-shared.d. Kanıt, NetworkManager için kaynak kodundadır ... İşte ilgili yorum:

/ * dnsmasq varsayılan yapılandırma dosyası konumundan okuyabilir; bu konum geçerli bir yapılandırma dosyasıysa, buradaki seçeneklerle birleşir ve istenmeyen yan etkilere neden olur. Ağ geçidi olarak sahte IP adresleri göndermek gibi. Bu yüzden dnsmasq'a herhangi bir yapılandırma dosyası kullanmamasını söyleyin. * /

İşte ilgili kaynak kodu (hatlar 139-144) için bağlantıdır.


2
Kaynak kodu işaret eden bir bağlantı, böylece okuyucular bunu doğrulayabilir ve mümkünse ilişkili kodu okuyabilir.
jamesc

1
Yani evet, açık bir yapılandırma dosyası belirtilemez. --conf dosyası sabit olarak / dev / null olarak kodlanmıştır. Ancak, dnsmasq'ı NetworkManager üzerinden başlatmak için kullanılan tam komut satırına bakarsanız, conf-dir komutunun kullanıldığını görürsünüz: '/ usr / sbin / dnsmasq --no-resolv - ön planda tut - no-hosts --bind-interfaces --pid-file = / var / run / NetworkManager / dnsmasq.pid --listen-adres = 127.0.0.1 - önbellek boyutu = 400 - yeniden yüklemede temizle --conf dosyası = / dev / null --proxy-dnssec --enable-dbus = org.freedesktop.NetworkManager.dnsmasq --conf-dir = / etc / NetworkManager / dnsmasq.d ', verilen dizindeki tüm dosyalar okunur.
Hardy
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.