Я установил DNSMASQ, но он не запускался, так как 53 порт был занят.
Я узнал, что в Ubuntu уже есть пакет dnsmasq, и он работает.
Теперь проблема в том, что ... я просто хочу иметь возможность разрешать мои хосты в / etc / hosts через него
, то есть: nslookup somehostonlan localhost
для разрешения определенного IP-адреса, взятого из / etc / hosts файл.
но этого не происходит.
Почему? Кстати, как кеширующий DNS-сервер, он работает нормально. Я просто хочу, чтобы он разрешил хосты из файла / etc / hosts, вот и все
По состоянию на август 2015 года другие ответы устарели.
Эта ошибка всё ещё действовала на меня (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 разочаровывает меня.
Чтобы ускорить интернет, в 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
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
, в то время как дополнительные данные хостов предоставляются в альтернативном файле.