我想通过 dnsmasq 获得快速的 dns 解析,并保持默认的 systemd-resolved/NetworkManager 设置不变以备将来使用。是的,dnsmasq 的巨大 dns 缓存可以提高浏览速度。是的,目标是保留 18.04 的默认特色 dns 设置
安装 dnmasq
配置它(监听地址和 dns 服务器)
为手动 dns 服务器地址配置 NetWorkManager
检查验证
1 - 使用 sudo
apt-get -y install dnsmasq
2 - 使用 sudo
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"
我有一个很好的特定用例。我在我的 LAN 路由器(一台 Ubuntu 服务器机器,没有 systemd-resolved)上运行 dnsmasq,并让路由器后面的 LAN 机器默认使用 vanilla systemd-resolved DNS 解析。这一切都是可能的,并且工作优雅,对 dnsmasq进行了一些调整:
# Make clients that request IPs use this box for DNS
dhcp-option=option:router,192.168.0.1
domain=mydomain.lan
local=/mydomain.lan/
expand-hosts
现在我可以在我的局域网中建立数以千计的 Ubuntu 虚拟机,而不必再摆弄 DNS - 它可以正常工作。
我想在满足所有业务需求的同时最多保持在分布布局内。这是我收集并测试在干净的 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 自动处理 dnsmasq DNS 服务器分配
[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
# 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
我想通过 dnsmasq 获得快速的 dns 解析,并保持默认的 systemd-resolved/NetworkManager 设置不变以备将来使用。是的,dnsmasq 的巨大 dns 缓存可以提高浏览速度。是的,目标是保留 18.04 的默认特色 dns 设置
1 - 使用 sudo
2 - 使用 sudo
3 - 使用 USER,配置 NetworkManager
4 - 检查验证
我有一个很好的特定用例。我在我的 LAN 路由器(一台 Ubuntu 服务器机器,没有 systemd-resolved)上运行 dnsmasq,并让路由器后面的 LAN 机器默认使用 vanilla systemd-resolved DNS 解析。这一切都是可能的,并且工作优雅,对 dnsmasq进行了一些调整:
现在我可以在我的局域网中建立数以千计的 Ubuntu 虚拟机,而不必再摆弄 DNS - 它可以正常工作。
需要进行调整,因为 systemd-resolved 不允许您使用“单标签”主机名(其中没有点),这与 dnsmasq 和“经典 DNS”不同。一旦你让 dnsmasq 自动将 LAN 主机名扩展为 FQDN,一切都会很愉快。顺便说一句,我花了很长时间才弄清楚。这些 systemd 解决的问题1 2帮助我解决了问题。
我试图找到一个合理的解决方案,并且看起来有不同的方法。
我想在满足所有业务需求的同时最多保持在分布布局内。这是我收集并测试在干净的 Ubuntu 18.04 和 KDE Neon 风格上工作的内容:
(请注意,与上述答案的唯一一般区别是 NetworkManager 自动处理 dnsmasq DNS 服务器分配
如您所知,Docker将主机 /etc/resolv.conf文件复制到容器,但删除任何本地名称服务器。
我对这个问题的解决方案是继续使用systemd-resolvd和NetworkManager但添加dnsmasq并使用它将Docker容器DNS查询“转发”到systemd-resolvd。
分步指南:
有关更多信息,请参阅我的帖子(西班牙语)https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/
Ubuntu 18.10
恕我直言,如果您要运行 dnsmasq,您应该静态分配您的 IP 地址,而不是从 dhcp 获取它。这样你就可以一起禁用 systemd-resolved 。
sudo apt-get install dnsmasq
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
手动分配您的 IP 地址、网关,并将 IP 地址作为 DNS 分配给您的机器。
配置 /etc/dnsmasq.conf (真的...RTFM --> man dnsmasq.conf)
sudo systemctl 启用 dnsmasq
sudo systemctl status dnsmasq
将 dhcp 服务器上的 dhcp 指向闪亮的新 dnsmasq 服务器(..if yumpto)