Як додати dnsmasq і зберегти системне рішення (18.04)


10

Я хочу отримати швидку роздільну здатність dns за допомогою dnsmasq і зберегти системне рішення за замовчуванням.

Шукаєте елегантний спосіб зробити це


Ви розумієте, що вирішені системою також кешують пошук DNS? Вам не знадобиться dnsmasq в системі із системним дозволом. Ви повинні прочитати Чи корисна система вирішена?
Ейюн

Я знаю - Але є дуже важлива «деталь» ... - dnsmasq як величезний кеш-код dns - кеш-пам'ять dns системно-вирішеного дуже невеликий і не може бути налаштований - швидкість роздільної здатності dns стає значно покращеною, як і величезний кеш dnsmasq заповнений запитами.
cmak.fr

Неконфігурований кеш-пам'ять за замовчуванням у системному дозволі
Ейюн

Насправді, dnsmasq робить набагато більше, ніж вирішено системою; Див. Gist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666 та gist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-sh, щоб назвати лише декілька ..
Юлій

@Aeyoun: прочитавши вихідний код, вирішений системою, ви можете побачити, що межа кеш-пам'яті dns 4096 - це байти, а не записи. dnsmasq має більший розмір кешу, який можна налаштувати.
cmak.fr

Відповіді:


10

Я хотів отримати швидку роздільну здатність dns за допомогою dnsmasq і зберегти налаштування системного дозволу / NetworkManager за замовчуванням недоторканим для подальшого використання. Так, величезне кешування даних dnsmasq може покращити швидкість перегляду. Так, мета полягала в тому, щоб зберегти встановлену за замовчуванням налаштування dns 18.04

  1. Встановіть dnmasq
  2. Налаштуйте його (послухайте адресу та сервери dns)
  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 - За допомогою USER налаштуйте 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 - Перевірте перевірку

  • прослуховування, вирішене системою, за замовчуванням 127.0.0.53
  • dnsmasq слухати 127.0.0.1 як встановлено в / etc / dnsmasq
  • системне вирішення взяло 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

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


працює, але що станеться, коли
мережевий менеджер

Якщо чесно, я не знаю. Залежить від того, що вирішить сервіс Ubuntu 18.04. Якщо він / вона залишить відключену системну службу відключеною і не змінить NetworkManager.conf (який за замовчуванням вирішується інтерактивно в разі конфлікту), то він може дожити до Ubuntu 20.04, де він буде сподіватися виправити.
Venca B Спам

0

Як відомо, Docker копіює файл host /etc/resolv.conf у контейнери, але видаляє будь-який локальний сервер імен.

Моє рішення цієї проблеми полягає в тому, щоб продовжувати використовувати systemd-resolutionvd і NetworkManager, але додавати dnsmasq і використовувати його для "пересилання" запитів DNS- контейнерів Docker на systemd-resvd .

Покрокове керівництво:

  • Зробіть /etc/resolv.conf "реальним" файлом sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • Створіть файл /etc/NetworkManager/conf.d/systemd-used-for-docker.conf, щоб сказати NetworkManager повідомити systemd-resolutionvd, але не торкатися /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-resolutionvd # 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-resolutionvd (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/


-1

Ubuntu 18.10

IMHO, якщо у вас буде запущений dnsmasq, вам слід статично призначити ip адресу, а не отримувати її від dhcp. Таким чином, ви можете просто відключити вирішені системою всі разом.

  1. sudo apt-get install dnsmasq

  2. sudo systemctl відключити systemd-вирішено

  3. sudo systemctl зупинка systemd-вирішена

  4. Вручну призначте ip-адресу, шлюз та призначте ip-адресу своєму пристрою як DNS.

  5. конфігуруйте /etc/dnsmasq.conf (справді ... RTFM -> man dnsmasq.conf)

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

  7. перезавантажити
  8. sudo systemctl статус dnsmasq

  9. вкажіть dhcp на своєму dhcp-сервері на новий блискучий сервер dnsmasq (..if yumpto)


Я не буду реалізовувати те, що ви описали. Я хочу, щоб рішення, встановлене за замовчуванням, залишалося недоторканим для подальшого використання NetworkManager.
cmak.fr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.