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

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

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

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

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

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

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

22
задан 12 August 2015 в 01:25

4 ответа

По состоянию на август 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.
0
ответ дан 12 August 2015 в 01:25

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

0
ответ дан 12 August 2015 в 01:25

Чтобы ускорить интернет, в 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
0
ответ дан 12 August 2015 в 01:25

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

0
ответ дан 12 August 2015 в 01:25

Другие вопросы по тегам:

Похожие вопросы: