Настроить dnsmasq NetworkManager для использования / etc / hosts

18

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

Я узнал, что у ubuntu уже был пакет dnsmasq, и он работает.

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

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

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

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

    
задан bakytn 01.04.2012 в 12:48
источник

4 ответа

19

Чтобы ускорить интернет, 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\)$/#/" > /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 [email protected] | sed -e s/--no-hosts//'
EOF

sudo chmod 755 /usr/sbin/dnsmasq

Отметьте ошибку как влияющую на вас.

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

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

addn-hosts=/etc/hosts
    
ответ дан kbenoit 02.05.2012 в 22:32
источник
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 27.05.2015 в 10:39
5

По состоянию на август 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 .
ответ дан mightyiam 11.08.2015 в 22:17
0

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

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

service dnsmasq reload

kill -HUP $(pidof dnsmasq)

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

    
ответ дан BillThor 01.04.2012 в 13:40