Как добавить dnsmasq и сохранить системное разрешение (18.04)

10

Я хочу получить быстрое разрешение DNS с помощью dnsmasq и сохранить системное разрешение по умолчанию.

Ищете элегантный способ сделать это

cmak.fr
источник
Вы понимаете, что systemd-resolved также кэширует DNS-запросы? Вам не нужен dnsmasq в системе с системным разрешением. Вы должны прочитать Полезен ли systemd-resolved?
Aeyoun
Я знаю - Но есть очень существенная «деталь» ... - dnsmasq в виде огромного DNS-кеша - DNS-кэш системного разрешения очень мал и не может быть настроен - Скорость разрешения DNS значительно повышается по сравнению с огромным кешем dnsmasq был заполнен запросами.
cmak.fr
Не сконфигурированный по умолчанию кэш в systemd-resolved действительно больше, чем dnsmasq.
Aeyoun
На самом деле, dnsmasq делает намного больше, чем разрешено systemd; См. Gist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666 и gist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-sh, чтобы назвать несколько ..
Юлий
@Aeyoun: читая исходный код, разрешенный systemd, вы можете увидеть, что ограничение dns-кэша в 4096 - это байты, а не записи. dnsmasq имеет больший и настраиваемый размер кэша DNS.
cmak.fr

Ответы:

10

Я хотел получить быстрое разрешение DNS с помощью dnsmasq и оставить настройки systemd-resolved / NetworkManager по умолчанию нетронутыми для будущего использования. Да, огромное DNS-кэширование dnsmasq может улучшить скорость просмотра. Да, цель состояла в том, чтобы сохранить настройку DNS по умолчанию 18.04

  1. Установить dnmasq
  2. Настроить его (прослушать адрес и днс серверы)
  3. Настройте NetWorkManager для ручного адреса DNS-сервера
  4. Проверить проверить

1 - с судо

apt-get -y install dnsmasq

2 - с судо

tee -a /etc/dnsmasq.conf << ENDdm
interface=lo
bind-interfaces
listen-address=127.0.0.1
# DNS server from OpenDns. Use yours...
server=208.67.222.222
server=208.67.220.220
ENDdm

systemctl restart dnsmasq
systemctl enable dnsmasq

3 - С ПОЛЬЗОВАТЕЛЕМ настройте NetworkManager

# Get NM first active profile name
NetManProfile=$(nmcli -t  connection show --active | cut -f 01 -d ':')
# remove, if exists, current dns servers
nmcli con mod "$NetManProfile" ipv4.dns ""
# set 'manual' dns server
nmcli con mod "$NetManProfile" ipv4.ignore-auto-dns yes
# set dnsmasq as manually set dns server
nmcli con mod "$NetManProfile" ipv4.dns 127.0.0.1
# i also disabled ip6, do what u want
nmcli con mod "$NetManProfile" ipv6.method ignore
# reconnect to take effect
nmcli connection down "$NetManProfile"
nmcli connection up "$NetManProfile"

4 - Проверить проверить

  • прослушивание systemd-resolved на 127.0.0.53, как и должно по умолчанию
  • dnsmasq прослушивает 127.0.0.1, как установлено в / etc / dnsmasq
  • systemd-resolved взял 127.0.0.1 из NetworkManager
netstat -antup
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat       PID/Program name    
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1036/dnsmasq        
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      766/systemd-resolve
cat /run/systemd/resolve/resolv.conf 
nameserver 127.0.0.1
cmak.fr
источник
1

Я попытался найти разумное решение и выглядит, что есть разные подходы.

Я хотел остаться максимально в пределах схемы распространения, сохраняя все деловые требования выполненными. Вот что я собрал и протестировал для работы над чистым Ubuntu 18.04 и KDE Neon:

# Install required package and reconfigure service plans (i.e. disablesystemd-resolved, enable dnsmasq
sudo apt-get install dnsmasq
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl enable dnsmasq

# These two lines should work on most environments, but .. :-) - so I kept them commented out for less experienced users
# Just add or change 'dns=dnsmasq' to your NetworkManager.conf to the section [main]
# and yes, the sed expression can be better :-)

#sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.backup
#sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.backup |sed -e "s/^dns=.*//"| sed -e "s/\[main\]/\[main\]\ndns=dnsmasq/" >/etc/NetworkManager/NetworkManager.conf'

# Restart NetworkManager to make the change above applied
sudo systemctl restart NetworkManager

# This removes the systemd resolv.conf link only if it has NetworkManager replacement :-)
ls /var/run/NetworkManager/resolv.conf && sudo rm /etc/resolv.conf

# And add NetworkManager's resolv.conf available for the system resolver
sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

(обратите внимание, что единственное общее отличие от приведенных выше ответов заключается в том, что NetworkManager обрабатывает назначения DNS-сервера dnsmasq автоматически

Venca B Spam
источник
работает, но что происходит, когда networkmanager обновляется с помощью apt-get --upgrade
cmak.fr
Если честно, я не знаю. Это зависит от того, что решит сопровождающий Ubuntu 18.04. Если он / она не отключит службу, разрешенную системой, и не изменит NetworkManager.conf (который по умолчанию разрешается в интерактивном режиме в случае конфликта), то он может сохраниться до Ubuntu 20.04, где, как мы надеемся, будет исправлено.
Спам Venca B
0

Как вы знаете, Docker копирует файл хоста /etc/resolv.conf в контейнеры, но удаляет любой локальный сервер имен.

Мое решение этой проблемы состоит в том, чтобы продолжать использовать systemd-resolvd и NetworkManager, но добавить dnsmasq и использовать его для «пересылки» Docker- контейнеров DNS- запросов в systemd-resolvd .

Пошаговое руководство:

  • Сделать /etc/resolv.conf «настоящим» файлом sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • Создайте файл /etc/NetworkManager/conf.d/systemd-resolved-for-docker.conf, чтобы сообщить NetworkManager сообщить systemd-resolvd, но не трогать /etc/resolv.conf [main] # NetworkManager will push the DNS configuration to systemd-resolved dns=systemd-resolved # NetworkManager won’t ever write anything to /etc/resolv.conf rc-manager=unmanaged
  • Установить dnsmasq sudo apt-get -y install dnsmasq
  • Сконфигурируйте dnsmasq в /etc/dnsmasq.conf для прослушивания DNS- запросов, поступающих с Docker и использующих сервер имен systemd-resolvd # Use interface docker0 interface=docker0 # Explicitly specify the address to listen on listen-address=172.17.0.1 # Looks like docker0 interface is not available when dnsmasq service starts so it fails. This option makes dynamically created interfaces work in the same way as the default. bind-dynamic # Set systemd-resolved DNS server server=127.0.0.53
  • Отредактируйте /etc/resolv.conf, чтобы использовать systemd-resolvd nameserver (127.0.0.53) и IP-адрес хоста (172.17.0.1) в сети Docker # systemd-resolvd name server nameserver 127.0.0.53 # docker host ip nameserver 172.17.0.1
  • Перезапустите сервисы sudo service network-manager restart sudo service dnsmasq restart sudo service docker restart

Для получения дополнительной информации см. Мой пост (на испанском языке) https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/

rubensa
источник
-1

Ubuntu 18.10

ИМХО, если вы собираетесь запускать dnsmasq, вы должны статически назначать свой IP-адрес, а не получать его от dhcp. Таким образом, вы можете просто отключить systemd-resolved все вместе.

  1. sudo apt-get установить dnsmasq

  2. sudo systemctl отключить systemd-resolved

  3. sudo systemctl stop systemd-resolved

  4. Вручную назначьте свой IP-адрес, шлюз и назначьте IP-адрес вашей машине как DNS.

  5. настроить /etc/dnsmasq.conf (действительно ... RTFM -> man dnsmasq.conf)

  6. sudo systemctl включить dnsmasq

  7. перезагрузка
  8. sudo systemctl status dnsmasq

  9. укажите dhcp на вашем dhcp-сервере на ваш новый блестящий dnsmasq-сервер (..if yumpto)

ливерная колбаса
источник
Я не буду реализовывать то, что вы описали. Я хочу, чтобы системное разрешение по умолчанию оставалось нетронутым для возможного будущего использования NetworkManager.
cmak.fr