Використання dnsmasq з NetworkManager


15

Добре було відомо, що NetworkManager не грає добре dnsmasq(див .: тут ). Я скупив під час тривалої дискусії тут, але все ще не впевнений, який рекомендований спосіб вирішити ситуацію.

Все, що я хочу зробити, - це використовувати dnsmasqдля надання DNS та DHCP моїй локальній мережі. Що було б рекомендованим способом у цьому випадку?

Здається, проблема залишається навіть для Ubuntu 14.04, навіть помилка, як стверджується, виправлена.

Поки обходиться робота, люди вимикають поневолених до НМ dnsmasq-baseчерез такі причини:

Покріплена NM dnsmasqвикористовує твердо кодовані варіанти (в С), які забезпечують надзвичайно обмежений функціонал.

  • Він не слухає на ethX ( --listen-address=127.0.0.1). Таким чином, ми не можемо використовувати наші сервери як DNS-сервери для локальних ПК у локальній мережі, тобто це абсолютно марно для локальних мереж.
  • Він не кешує запити ( --cache-size=0). Без кешування ==> DNS не запитує прискорення. Це знову ж таки дуже важливо для локальних мереж, оскільки є багато одночасних користувачів.
  • Нарешті, нам також потрібна функція DHCP і TFTP dnsmasq, тому навіть якщо NM + dnsmasq включав реальний DNS-сервер, нам доведеться запустити ще один dnsmasq

Але я не впевнений, чи вони все ще тримаються та / або як виправлення вирішило проблему. Далі жодному з них не дуже ясно, що саме вони робили і як вони зробили для вирішення своєї проблеми. Тобто, частина рішення не відсутня в тривалій дискусії . Чи може хтось заповнити бланки, будь ласка? Тобто,

dnsmasqНадається поза коробки з Ubuntu не працює, на стороні сервера, із зазначених вище причин. Крім того, на стороні клієнта "dnsmasq, встановлений на цих ноутбуках Ubuntu, не може робити запит DNS LAN з мого сервера DNS" , оскільки "NetworkManager ((ноутбуки Ubuntu") змушує їх мати дивні настройки сервера імен 127.0.1.1 " ( ref: рішення DNS для локальної або локальної домашньої мережі )

Як змусити dnsmasq безперебійно працювати з NetworkManager, щоб забезпечити DNS і DHCP (і TFTP) моїй локальній мережі, як на сервері, так і на стороні клієнта?

TL'dr

для тих, хто шукає відповіді. З усіх наведених нижче відповідей я виявив, що найпростішим рішенням є @ brad's для серверної сторони (все ще немає гарної відповіді для клієнтської сторони):

єдине рішення проблеми - відключити NM-накопичувач dnsmasq ... і встановити "стандартний" dnsmasq, а потім налаштувати його через його стандартний /etc/dnsmasq.confфайл конфігурації.


2
Тільки для Googlers (як і я): У новіших версіях ubuntu dnsmasq-core всередині NetworkManager дещо дружніший. Дивіться тут: askubuntu.com/questions/233195/…
А. Рабус

Відповіді:


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

Зауважте, що цитований конф-файл завжди порожній: я не зміг налаштувати жодної опції за допомогою цієї процедури.

Загалом, схоже, що поневолена DM-маска 14.04 (яка надається базовим пакетом dnsmasq) повністю заблокована, тому неможливо ввімкнути кешування, і нічого іншого (dhcp, tftp).

Якщо це правильно, я думаю, що, як ви кажете, єдиним рішенням проблеми є відключення NM-накопичувача dnsmasq, коментуючи рядок

dns=dnsmasq

у файлі /etc/NetworkManager/NetworkManager.confта встановіть "стандартний" dnsmasq, а потім налаштуйте його за допомогою стандартного /etc/dnsmasq.confфайлу конфігурації.


Ласкаво просимо до супер-бреде! Спасибі за вашу допомогу!
xpt

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. resolutionvconf є частиною ubuntu-мінімальної та стандартної установки Debian; NetworkManager повторно реалізує цю функціональність більш інтегрованим, менш заснованим на сценаріях способом.

NetworkManager не перешкоджає глобальному екземпляру dnsmasq (прив'язка до IP вторинного циклу та встановлення bind-interfacesчерез /etc/dnsmasq.d/network-manager). Якщо ви встановите глобальний екземпляр dnsmasq і зберігаєте екземпляр NM, подвійне позначте, /etc/resolv.confщоб побачити, який хост використовуватиме за замовчуванням.

Хоча ви можете налаштувати екземпляр dnsmasq NetworkManager, як показано вище, якщо ви хочете, щоб сервер DNS, який прив'язується до загальнодоступних інтерфейсів, вам слід встановити dnsmasqпакет (NetworkManager використовує лише той dnsmasq-base, який не налаштовує глобальний примірник) і ввести свою конфігурацію /etc/dnsmasq.d/*.conf. Рабський екземпляр NetworkManager призначений лише для прив'язки до інтерфейсу зворотного зв'язку, а конфігурація його поза цією областю ризикує зламати його.


Підсумовуючи, для тих, хто просто хоче локальне кешування DNS:

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

Для простої локальної мережі обміну з’єднаннями 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, Tobu, поясніть, будь ласка , чому «для тих , хто хоче просто локальне кешування DNS» , їм потрібно видалити в dnsmasqпакет. то для чого наступна echoкоманда? оскільки dnsmasqволі вже не буде.
xpt

@xpt Tobu пропонує видалити dnsmasq, але ви все одно повинні бути dnsmasq-baseвстановлені через NM.
Таліс Калфігкопулос

0

Я хотів призначити конкретний MAC для певної IP-адреси і для стабільності дотримуйтесь максимально можливого Network Manager / 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);

У Ubuntu 16.04 LTS після налаштування гарячої ps auxgww | grep dnsmasqточки Wi-Fi та спільного доступу до іншого з'єднання показано, що останнім аргументом командного рядка кожного з dnsmasq процесів є:

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

Таким чином, у цьому каталозі можна створити конфігураційні файли, які поділяються між усіма викликами dnsmasq, які запускаються Менеджером мережі.

Я створив /etc/NetworkManager/dnsmasq-shared.d/Hue

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

і перезавантажено, хоча працює

sudo service network-manager restart

працював би.

Це призвело до того, що мій пристрій отримав відповідну IP-адресу.

Так, це неправильно, оскільки це означає, що всі виклики dnsmasq від NetworkManager отримають цю декларацію, але в цьому випадку вона нешкідлива, оскільки це має значення лише в тому випадку, якщо MAC з'явиться у відповідній мережі. Якщо мережа не 192.168.1, то виникнуть проблеми.

Це більш надійно, ніж замінити / usr / sbin / dnsmasq сценарієм, як пропонується на веб- сайті https://gist.github.com/magnetikonline/6236150

Правильним рішенням буде змінити спосіб виклику dnsmasq для правильного використання файлів конфігурації dnsmasq. Я розумію бажання, щоб Менеджер Мережі "просто працював", але зробити інструменти стійкими до ідіотів означає, що ними можуть користуватися лише ідіоти.


дякую за відповідь Крістофер, однак я насправді не в змозі дотримуватися ... "Я хотів призначити певний MAC для певної IP-адреси та для стабільності" ... "ps auxgww | grep dnsmasq показує, що останній аргумент командного рядка кожного з процесів dnsmasq " ... " Я створив ... працював би " ... " Так, це неправильно " ... Тобто, я дійсно не можу слідувати твоїй думці , щоб мати сенс, що ви тут намагаєтеся сказати.
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 і помістив його внизу мого файлу ~ / .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"

Звичайно, ви можете вибрати будь-якого редактора на свій смак для другої команди sudo в псевдонімі, але я нано там для зручності для всіх. Збережіть файл, закрийте та знову відкрийте вкладку / вікно командного терміналу. Це повинно дати можливість псевдоніму бути доступним для нововідкритих вкладок / вікон терміналів.

Просто запустіть eddmcз вашого облікового запису користувача, і він попросить ваш пароль, щоб виконати підвищені команди.

Зауважте, що я завжди chattr +iв файлі. Це так, що Менеджер мережі не замінить вашу конфігурацію власною.

У дротових підключеннях до Ethernet проблем не повинно виникнути. З моменту використання dnsmasq для кешування dns на ноутбуках з бездротовим зв’язком я виявив, що мені потрібно вручну перезапустити dnsmasq.service після підключення до точки доступу. Я думаю, що Менеджер мережі може виконувати такі завдання, як перезапуск послуг під час підключення, але я цього ще не вивчав.


0

Незважаючи на претензії тут і в іншому місці, навпаки, NetworkManager повністю ігнорує будь-які файли конфігурації dmsmasq - навіть ті, що є у власному каталозі /etc/NetworkManager/dnsmasq-shared.d. Доказ є у вихідному коді для NetworkManager ... Ось відповідний коментар:

/ * dnsmasq може читати зі свого розташування конфігураційного файлу за замовчуванням, яке, якщо це місцезнаходження є дійсним файлом конфігурації, поєднується з параметрами тут і спричиняє небажані побічні ефекти. Як надіслати фальшиві IP-адреси в якості шлюзу або будь-якого іншого. Тому скажіть dnsmasq взагалі не використовувати жоден конфігураційний файл. * /

Тут посилання на відповідний вихідний код (рядки 139-144).


2
Посилання на вказівку на вихідний код, щоб читачі могли це підтвердити і прочитати пов'язаний код, було б корисно, якщо можливо.
jamesc

1
Так що так, не можна вказати явний конфігураційний файл. --conf-файл важко закодований в / dev / null. Однак якщо ви подивитесь на повний командний рядок, який використовується для запуску dnsmasq через NetworkManager, ви побачите, що використовується conf-dir: '/ usr / sbin / dnsmasq --no-resolutionv --keep-in-foreground --no-hosts --bind-interface --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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.