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

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

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

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

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

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

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

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

решение1

Для ускорения интернета в 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

решение2

Эта ошибка до сих пор у меня проявляется ( 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 меня разочаровывает.

решение3

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

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

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

решение4

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пока дополнительные данные хостов предоставляются в альтернативном файле.

Связанный контент