Сконфигурируйте dnsmasq NetworkManager для использования / etc / hosts

22

Я установил DNSMASQ, но он не запускался, так как 53 порт был занят.

Я узнал, что в Ubuntu уже есть пакет dnsmasq, и он работает.

Теперь проблема в том, что ... я просто хочу разрешить хосты в / etc / hosts через него

то есть: nslookup somehostonlan localhost должен быть разрешен для определенного IP-адреса, взятого из файла / etc / hosts.

но этого не происходит.

Зачем? Кстати, как кеширующий DNS-сервер, он работает нормально. Я просто хочу разрешить хосты из файла / etc / hosts, вот и все

bakytn
источник

Ответы:

22

Чтобы ускорить интернет, Ubuntu 12.04 добавил плагин к NetworkManager для запуска dnsmasq, локального сервера DNS, который кэширует записи DNS. Проблема в том, что плагин жестко закодировал строку --no-hosts.

Поэтому одним из решений является закомментировать строку, которая загружает плагин в конфигурационном файле NetworkManager и перезапустить NetworkManager:

sudo mv /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.bak
sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.bak | sed -e "s/^\(dns=dnsmasq\)$/#\1/" > /etc/NetworkManager/NetworkManager.conf'
sudo restart network-manager

Другое решение - обернуть dnsmasq, чтобы отфильтровать нежелательные аргументы:

sudo mv /usr/sbin/dnsmasq /usr/sbin/dnsmasq.bin
sudo bash -c 'cat > /usr/sbin/dnsmasq' << EOF
#!/bin/sh
dnsmasq=/usr/sbin/dnsmasq.bin

exec $dnsmasq `echo $@ | sed -e s/--no-hosts//`
EOF

sudo chmod 755 /usr/sbin/dnsmasq

Пожалуйста, отметьте ошибку как влияющую на вас.

Другое решение без исправления системных файлов

cat /etc/NetworkManager/dnsmasq.d/hosts.conf 

addn-hosts=/etc/hosts
kbenoit
источник
7

Эта ошибка все еще затрагивала меня даже сейчас (Ubuntu 14.04).

Наконец, я нашел решение, которое просто добавляет эту строку 'addn-hosts = / etc / hosts' в файл конфигурации dnsmasq пакета Newworkmanager.

echo 'addn-hosts=/etc/hosts' > /etc/NetworkManager/dnsmasq.d/etc-hosts
service network-manager restart

Идея в том, что мы добавляем / etc / hosts в качестве дополнительного файла хоста.

Даже если бы я мог найти решение, жестко закодированная опция '--no-hosts' в двоичном файле / usr / sbin / NetworkManager разочаровала меня.

harish2704
источник
7

По состоянию на август 2015 года остальные ответы устарели.

Простой ответ

  1. Создать /etc/NetworkManager/dnsmasq.d/hosts.conf.
  2. Положите строки, как address=/whatever/1.2.3.4в нем. Смотрите документы (ищите --address). Wildcards возможны: address/.whatever./1.2.3.4.
  3. Убить dnsmasq( ошибка ).
  4. Перезапустите его: $ service network-manager restart.
mightyiam
источник
1

dnsmasq должен автоматически использовать /etc/hostsфайл. Это можно отключить с помощью параметра -hкомандной строки или no-hostsпараметра конфигурации. Я не ожидал, что либо будет установлен в конфигурации по умолчанию.

Попробуйте заставить dnsmasq перезагрузить файл hosts. (Изменения в файле конфигурации требуют перезагрузки). Любая из этих команд должна работать.

service dnsmasq reload

kill -HUP $(pidof dnsmasq)

Если вы работаете с системой, которая no-hostsуказала, вы сможете использовать addn-hostsопцию, чтобы переопределить ее. Обычно это используется для чтения дополнительного файла в /etc/hostsформате. Это может быть использовано для указания дополнительных данных хоста, которые вы хотите, чтобы DNS предоставил, но не хотите в своем /etc/hostsфайле. Это можно использовать для управления менеджером пакетов и связанными инструментами, в /etc/hostsто время как дополнительные данные хостов предоставляются в альтернативном файле.

BillThor
источник
/etc/dnsmasq.conf закомментировал все параметры. Перезагрузка не помогает
bakytn
Я не знаю, что я сделал. похоже, сейчас работает
Bakytn
3
Почему вы отвечаете на это, когда вы на самом деле не знаете ответа? Тот факт, что вы «не ожидаете, что их также будут установлены в конфигурации по умолчанию», не делает этого так, как на самом деле это задано и жестко закодировано в dnsmasq в NetworkManger.
Джастин Бузер
Для загрузки изменений в конфигурационных файлах необходимо перезапустить dnsmasq
txwikinger
@txwikinger Многие файлы опций перечитываются при dnsmasqполучении HUPсигнала. Это включает в себя /etc/hostsи /etc/ethersфайлы. Время перезапуска достаточно быстрое, и клиенты редко получат ответ.
BillThor