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