NetworkManager के साथ dnsmasq का उपयोग करना


15

यह अच्छी तरह से ज्ञात था कि NetworkManager dnsmasq(रेफ: यहाँ ) के साथ अच्छा नहीं खेलता है । मैंने यहां लंबी चर्चा से किनारा कर लिया है, लेकिन अभी भी निश्चित नहीं है कि स्थिति से निपटने के लिए अनुशंसित तरीका क्या है।

मुझे जो कुछ भी करना है, वह dnsmasqमेरे स्थानीय नेटवर्क को DNS और DHCP प्रदान करने के लिए उपयोग करना है । इस मामले में अनुशंसित तरीका क्या होगा?

ऐसा लगता है कि समस्या Ubuntu 14.04 के लिए भी बनी हुई है, यहां तक ​​कि बग को ठीक करने का दावा किया गया है।

काम के आसपास के रूप में, लोग एनएम-गुलाम को अक्षम कर रहे हैं dnsmasq-baseक्योंकि निम्नलिखित कारण हैं:

dnsmasqNM- ग़ुलाम हार्डकोड विकल्प (C में) का उपयोग करता है जो बेहद सीमित कार्यक्षमता प्रदान करते हैं।

  • यह एथिक्स ( --listen-address=127.0.0.1) पर नहीं सुनता है । इसलिए हम अपने सर्वर का उपयोग अपने स्थानीय नेटवर्क पीसी के लिए DNS सर्वर के रूप में नहीं कर सकते हैं, अर्थात यह LAN के लिए पूरी तरह से बेकार है।
  • यह कैश अनुरोध ( --cache-size=0) नहीं करता है । कोई कैशिंग ==> कोई DNS क्वेरीज़ स्पीडअप नहीं। यह फिर से LANs के लिए बहुत महत्वपूर्ण है क्योंकि कई समवर्ती उपयोगकर्ता हैं।
  • अंत में, हमें dnsmasq के DHCP और TFTP कार्यक्षमता की भी आवश्यकता है, इसलिए भले ही NM + dnsmasq में एक वास्तविक DNS सर्वर शामिल हो, हमें एक और dnsmasq चलाना होगा

लेकिन मुझे यकीन नहीं है कि वे अभी भी पकड़ते हैं और / या कैसे फिक्स ने समस्या को हल किया है। इसके अलावा, उनमें से कोई भी बहुत स्पष्ट नहीं है कि उन्होंने अपनी समस्या को हल करने के लिए क्या किया और कैसे किया। यानी, लंबी चर्चा से समाधान भाग गायब है । क्या कोई खाली जगह भर सकता है? अर्थात,

dnsmasqउबंटू द्वारा बॉक्स के बाहर के प्रदान की काम कर रहा है नहीं, सर्वर साइड पर, उपरोक्त कारणों के लिए। और यह भी, ग्राहक के पक्ष, "dnsmasq उन उबंटू लैपटॉप पर स्थापित लैन DNS पूछताछ मेरी DNS सर्वर से ऐसा नहीं कर सकते" , क्योंकि "(उबंटू लैपटॉप ') NetworkManager एक अजीब 127.0.1.1 नेम सर्वर सेटिंग करने के लिए उन्हें खड़ी कर रहा है" ( रेफरी: लैन या स्थानीय घरेलू नेटवर्क के लिए DNS समाधान )

NetworkManager के साथ सुचारू रूप से काम करने के लिए dnsmasq कैसे बनाया जाए, ताकि मेरे स्थानीय नेटवर्क को DNS और DHCP (और TFTP) प्रदान किया जा सके, सर्वर और क्लाइंट दोनों तरफ?

TL'dr

जवाब मांगने वालों के लिए। नीचे दिए गए सभी उत्तरों में, मैंने पाया कि सबसे सरल समाधान @ ब्रैड का है, सर्वर साइड के लिए (अभी भी क्लाइंट पक्ष के लिए कोई अच्छा जवाब नहीं है):

समस्या का एकमात्र समाधान NM- ड्राइव dnsmasq को अक्षम करना है ..., और "मानक" dnsmasq स्थापित करें और फिर इसे अपनी मानक /etc/dnsmasq.confकॉन्फ़िगरेशन फ़ाइल के माध्यम से कॉन्फ़िगर करें।


2
सिर्फ गोगलर्स (मेरे जैसे) के लिए: नेटवर्क मैनजेर के अंदर ubuntu dnsmasq-core के नए संस्करणों में कुछ अधिक अनुकूल है। यहां देखें: askubuntu.com/questions/233195/…
A. Rabus

जवाबों:


3

मुझे आपकी समस्याएं भी हैं।

सिद्धांत रूप में, wiki.archlinux के बाद , ऐसा लगता है कि कैशिंग को सक्षम करने के लिए /etc/NetworkManager/dnsmasq.d/cacheबस एक फ़ाइल बनाने के लिए पर्याप्त होना चाहिए

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

मैंने यह कोशिश की, लेकिन NM के दोबारा शुरू होने के बाद भी मेरे पास कैश नहीं है:

# 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

ध्यान दें कि उद्धृत conf-file हमेशा खाली होती है: मैं इस प्रक्रिया का उपयोग करके किसी भी विकल्प को कॉन्फ़िगर करने में सक्षम नहीं हूं।

कुल मिलाकर, ऐसा लगता है कि 14.04 में एनएम-ग़ुलाम-रहित दासमास्क (जो कि dnsmasq- बेस पैकेज द्वारा प्रदान किया गया है) पूरी तरह से बंद है, इसलिए यह कैशिंग सक्षम करने के लिए संभव नहीं है, और न ही कुछ और (dhcp, tftp)।

यदि यह सही है, तो मुझे लगता है कि, जैसा कि आप कहते हैं, समस्या का एकमात्र समाधान एनएम-ड्राइव dnsmasq को लाइन में टिप्पणी करके अक्षम करना है

dns=dnsmasq

फ़ाइल में /etc/NetworkManager/NetworkManager.confऔर "मानक" dnsmasq स्थापित करें और फिर अपनी मानक /etc/dnsmasq.confकॉन्फ़िगरेशन फ़ाइल के माध्यम से इसे कॉन्फ़िगर करें।


सुपरसाइड ब्रैड में आपका स्वागत है! आपकी सहायताके लिए धन्यवाद!
बजे

1
वास्तव में यह कैश को सक्षम करता है, क्योंकि यह चल रहा है --conf-dir=/etc/NetworkManager/dnsmasq.d, cache-sizeआपके द्वारा बनाई गई फ़ाइल में निर्दिष्ट का उपयोग किया जाता है। आप अंतर का उपयोग करके देख सकते हैंdig
sirfz

6

इन्हें लगाकर सेटिंग्स को ओवरराइड करना संभव है /etc/NetworkManager/dnsmasq.d/*.conf। कॉन्फ़िगरेशन फ़ाइल सेटिंग्स कमांड-लाइन झंडे पर पूर्वता लेती हैं। जब NetworkManager dnsmasq शुरू करता है तो वे लागू होते हैं। फिर से चलाने के sudo service network-manager restartलिए। (यदि कोई संदेह है: ब्रैड का जवाब इस तथ्य से चूक गया जो ps ax | grep dnsएक --conf-dirतर्क दिखाता है )

उदाहरण के लिए:

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

जैसा कि मुझे याद है NetworkManager कैश विषाक्तता पर चिंताओं के कारण डिफ़ॉल्ट रूप से dnsmasq कैशिंग अक्षम करता है। एक मशीन के लिए जहां सभी उपयोगकर्ताओं पर भरोसा किया जाता है, यह एक मुद्दा नहीं हो सकता है।

NetworkManager के साथ एकीकृत नहीं है resolvconf, और NM के सर्वर को 127.0.1.1स्थानीय रूप से उपयोग नहीं किया जाएगा यदि रिज़ॉल्वोन्फ़ पैकेज स्थापित किया गया है। resolvconf ubuntu-minimal और standard Debian इंस्टॉल का हिस्सा है; NetworkManager उस कार्यक्षमता को अधिक एकीकृत, कम स्क्रिप्ट-आधारित तरीके से पुन: लागू करता है।

NetworkManager कर यकीन है कि एक वैश्विक dnsmasq उदाहरण (एक माध्यमिक लूपबैक IP के लिए बाध्य और स्थापित करने के साथ हस्तक्षेप करने के लिए नहीं है bind-interfacesके माध्यम से /etc/dnsmasq.d/network-manager)। यदि आप एक वैश्विक dnsmasq इंस्टाल स्थापित करते हैं और NM का इंस्टेंस रखते हैं, तो यह देखने के लिए डबल चेक /etc/resolv.confकरें कि कौन सा होस्ट डिफ़ॉल्ट रूप से उपयोग करेगा।

जब आप ऊपर दिखाए गए अनुसार NetworkManager के dnsmasq उदाहरण को कस्टमाइज़ कर सकते हैं, यदि आप एक DNS सर्वर चाहते हैं जो सार्वजनिक इंटरफेस से जुड़ता है, तो आपको dnsmasqपैकेज स्थापित करना चाहिए (NetworkManager केवल उपयोग करता है dnsmasq-base, जो एक वैश्विक उदाहरण को कॉन्फ़िगर नहीं करता है) और आपके कॉन्फ़िगरेशन में डाल दिया /etc/dnsmasq.d/*.conf। NetworkManager का दास उदाहरण केवल लूपबैक इंटरफ़ेस से जुड़ने के लिए है और इसे उस दायरे से परे कॉन्फ़िगर करने से इसे तोड़ने का जोखिम होगा।


संक्षेप में, किसी ऐसे व्यक्ति के लिए जो सिर्फ स्थानीय डीएनएस कैशिंग चाहता है:

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

एक साधारण LAN के लिए, NetworkManager का कनेक्शन साझाकरण अभी भी पर्याप्त होना चाहिए। लेकिन एक कस्टम-कॉन्फ़िगर लैन के लिए, TFTP और इतने पर:

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

धन्यवाद। हालांकि आप अधिक पूरी तरह से अपने "सारांश में" आदेशों करना क्या वर्णन करना चाहिए, यानी निर्देश भी अगर आप उन्हें वर्तमान में 4 पैकेजों को निकालना अधिक लिंक और पर चर्चा reddit.com/r/Ubuntu/comments/2j0va4/...
nealmcb

काफी @nealmcb, uTobu से सहमत हैं, कृपया समझाएं कि "किसी के लिए जो सिर्फ स्थानीय डीएनएस कैशिंग चाहता है" , उन्हें पैकेज को हटाने की आवश्यकता है dnsmasq। फिर अगला echoकमांड किसके लिए है? जब से dnsmasqचला जाएगा।
xpt

@xpt टोबू को हटाने का सुझाव देता है dnsmasq, लेकिन आपको dnsmasq-baseएनएम के कारण अभी भी स्थापित होना चाहिए ।
थलिस कलफिगकोपॉल्स

0

मैं एक विशेष मैक को एक विशेष आईपी पते पर और स्थिरता के प्रयोजनों के लिए, डिफ़ॉल्ट नेटवर्क प्रबंधक / dnsmasq के साथ जितना संभव हो सके छड़ी करना चाहता था।

https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.c के पास कॉन्फ़िगरेशनों को अनदेखा करने के लिए -conf- फाइल का उपयोग करने के बारे में टिप्पणी है, लेकिन बाद में हमारे पास मौजूद फ़ाइल में

/* 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);

उबंटू 16.04 एलटीएस के तहत, वाई-फाई हॉट स्पॉट स्थापित करने और एक अन्य कनेक्शन साझा करने के बाद, ps auxgww | grep dnsmasqपता चलता है कि प्रत्येक dnsmasq प्रक्रियाओं का अंतिम कमांड लाइन तर्क है:

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

इस प्रकार, नेटवर्क प्रबंधक द्वारा शुरू किए गए dnsmasq के सभी इनवोकेशन के बीच साझा की गई उस निर्देशिका में कॉन्फिग फाइल बनाना संभव है।

मैंने /etc/NetworkManager/dnsmasq-saring.d/Hue बनाया

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

और चल रहा है, हालांकि रिबूट

sudo service network-manager restart

काम किया होगा।

इसके परिणामस्वरूप मेरे डिवाइस को उचित IP पता प्राप्त हुआ।

हां, यह गलत है क्योंकि इसका मतलब है कि NetworkManager द्वारा dnsmasq के सभी आह्वान को यह घोषणा मिल जाएगी, लेकिन इस मामले में, यह हानिरहित है क्योंकि यह केवल तब ही मायने रखता है जब MAC नेटवर्क में सवाल दिखाता है। अगर नेटवर्क 192.168.1 नहीं है, तो परेशानी होगी।

यह स्क्रिप्ट के साथ / usr / sbin / dnsmasq की तुलना में अधिक मजबूत है, जैसा कि https://gist.github.com/magnetikonline/6236150 पर प्रस्तावित है।

सही समाधान यह संशोधित करना होगा कि dnsmasq विन्यास फाइल का उपयोग ठीक से करने के लिए dnsmasq कैसे लगाया जाता है। मैं नेटवर्क मैनेजर "सिर्फ काम" करने की इच्छा को समझता हूं, लेकिन टूल को बेवकूफ बनाने का मतलब है कि केवल बेवकूफ ही उनका उपयोग कर सकते हैं।


जवाब के लिए धन्यवाद क्रिस्टोफर, हालांकि, मैं वास्तव में पालन करने में सक्षम नहीं हूं ... "मैं एक विशेष मैक को एक विशेष आईपी पते पर और स्थिरता के प्रयोजनों के लिए असाइन करना चाहता था" ... "ps auxgww | grep dnsmasq से पता चलता है कि dnsmasq प्रक्रियाओं में से प्रत्येक के अंतिम कमांड लाइन तर्क " ... " मैंने बनाया ... काम किया होगा " ... " हाँ, यह गलत है " ... Ie, मैं वास्तव में आपके विचार की ट्रेन का पालन नहीं कर सकता , यह समझने के लिए कि आप यहाँ क्या कहना चाह रहे हैं।
xpt

0

मेरा समाधान नेटवर्क मैनेजर को तोड़ सकता है और यह सब कुछ करने का सरल तरीका रखता है। NM के dnsmasq से निपटने के टूटे हुए तरीके के साथ, मैं इसे नीचे अपनी विधि के साथ ओवरराइड करता हूं।

समस्या का समाधान केवल निम्नलिखित कार्य करना था:

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

~/dnsmasq.confफ़ाइल को अपनी उपयोगकर्ता निर्देशिका में संपादित करें कि आप इसे कैसे चाहते हैं और इसे सहेज सकते हैं।

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

मैंने एक साधारण बैश उपनाम बनाया और इसे मेरे ~ / .bash_aliases फ़ाइल के नीचे रख दिया ताकि dnsmasq.conf फ़ाइल को संपादित करना आसान हो सके। यहाँ उपनाम है:

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

बेशक, आप उपनाम में दूसरे सूडो कमांड के लिए अपनी पसंद के किसी भी संपादक को चुन सकते हैं, लेकिन मैंने सभी के लिए आसानी के लिए नैनो का इस्तेमाल किया। फ़ाइल को सहेजें, बंद करें और अपने कमांड टर्मिनल टैब / विंडो को फिर से खोलें। यह उर्फ ​​को नए खुले टर्मिनल टैब / विंडो के लिए उपलब्ध होने में सक्षम बनाना चाहिए।

बस eddmcअपने उपयोगकर्ता खाते से चलाएं और यह आपके पासवर्ड के लिए एलिवेटेड कमांड करने के लिए कहेगा।

ध्यान दें कि मैं हमेशा chattr +iफ़ाइल। ऐसा इसलिए है क्योंकि नेटवर्क मैनेजर आपके कॉन्फिगरेशन को अपने आप से अधिलेखित नहीं करेगा।

वायर्ड ईथरनेट कनेक्शन पर कोई समस्या नहीं होनी चाहिए। मैंने पाया है कि जब से मैं वायरलेस के साथ लैपटॉप पर डीएनएस कैशिंग के लिए dnsmasq का उपयोग करता हूं, मुझे एक्सेस बिंदु से कनेक्ट करने के बाद मैन्युअल रूप से dnsmasq.service को पुनरारंभ करना होगा। मुझे लगता है कि नेटवर्क प्रबंधक कनेक्ट करते समय सेवाओं को पुनरारंभ करने जैसे कार्य कर सकता है, लेकिन मैंने अभी तक उस पर ध्यान नहीं दिया है।


0

यहां दावों के बावजूद और इसके विपरीत, NetworkManager पूरी तरह से किसी भी और सभी dmsmasq कॉन्फ़िगरेशन फ़ाइलों को अनदेखा करता है - यहां तक ​​कि अपनी स्वयं की निर्देशिका में भी /etc/NetworkManager/dnsmasq-shared.d। प्रमाण NetworkManager के लिए स्रोत कोड में है ... यहाँ प्रासंगिक टिप्पणी है:

/ * dnsmasq अपनी डिफॉल्ट कॉन्फिग फाइल लोकेशन से पढ़ सकता है, जो कि अगर वह वैद्य कॉन्फिग फाइल है, तो यह यहां के ऑप्शंस के साथ कंबाइन करेगा और अनचाहे साइड-इफेक्ट्स पैदा करेगा। जैसे गेट या जो भी हो फर्जी आईपी एड्रेस भेजना। तो बता दें कि dnsmasq किसी भी कॉन्फिग फाइल का इस्तेमाल बिल्कुल भी नहीं करता है। * /

यहां प्रासंगिक स्रोत कोड (लाइनें 139-144) से जुड़ा हुआ है।


2
स्रोत कोड पर इंगित करने के लिए एक लिंक ताकि पाठक इसे सत्यापित कर सकें और संबंधित कोड को पढ़ सकें यदि संभव हो तो उपयोगी होगा।
शाम

1
तो हाँ, एक स्पष्ट विन्यास फाइल को निर्दिष्ट नहीं किया जा सकता है। -conf- फ़ाइल हार्ड कोड / देव / अशक्त है। हालाँकि, यदि आप नेटवर्क कमांड के माध्यम से dnsmasq शुरू करने के लिए उपयोग की जाने वाली पूर्ण कमांड लाइन को देखते हैं, तो आप देखते हैं कि conf-dir का उपयोग किया जाता है: '/ usr / sbin / dnsmasq --no-resolv --keep-in-front -no -no-मेजबान --bind-interfaces --pid-file = / var / run / NetworkManager / dnsmasq.pid --listen-address = 127.0.0.1 --cache-size = 400 --clear-on-reload --conf-file = / dev / null --proxy-dnssec --enable-dbus = org.freedesktop.NetworkManager.dnsmasq --conf-dir = / etc / NetworkManager / dnsmasq.d ', जिसका अर्थ है कि दी गई निर्देशिका की सभी फाइलें पढ़ी जाती हैं।
हार्डी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.