dnsmasq插件是NetworkManager很好的功能,使用插件时,NetworkManager将配置可自定义的dnsmasq本地副本,而不是使用DHCP发出的任何DNS名称服务器。
背景 你可能会问,为什么要这样做?就我个人而言,我有两个用例: 首先,在我的笔记本电脑上,我运行完整的OpenShift安装以进行测试,为了使这项工作,我真的需要能够添加DNS记录,我可以在没有NetworkManager的情况下运行本地dnsmasq,但是这个配置比管理我自己的配置更容易。 其次,当我在家时,我仍然想在VPN上使用我的家庭网络的DNS,许多VPN配置为仅通过VPN隧道路由特定流量并保留我的默认路由,这意味着我可以访问本地网络的打印机,并仍然连接到VPN上的资源。 这非常好,因为这意味着我仍然可以在工作时访问我的网络打印机或从我的媒体服务器收听音乐,但是,VPN连接会使用来自VPN网络的DNS服务器覆盖我的resolv.conf,因此,我的家庭网络的DNS不再可访问。 dnsmasq插件通过运行由NetworkManager控制的本地dnsmasq服务器来解决此问题,我的resolv.conf总是指向localhost,对于本地定义的记录(例如,对于我的OpenShift群集),dnsmasq正确解析这些记录,使用更高级的dnsmasq配置,我可以有选择地将对某些域的请求转发到特定服务器(例如,始终正确解析我的家庭网络主机),对于所有其他请求,dnsmasq将转发到与当前网络或VPN关联的DNS服务器。
以下是在Fedora 29中配置它的方法 对于某些情况,我的笔记本电脑上的域名称为“laplab”,我的主域名为“.homelab”,在家里我的DNS服务器是172.31.0.1,对于laplab中的DNS条目,其中大多数都在/etc/hosts中定义,然后dnsmasq可以将它们甩掉,我还为通配符DNS和一些别名定义了一些额外的DNS条目。 以下是需要添加的五个文件,dnsmasq.d中的文件可以组合在一起,但可以拆分为希望更好地显示示例: /etc/NetworkManager/conf.d/00-use-dnsmasq.conf /etc/NetworkManager/dnsmasq.d/00-homelab.conf /etc/NetworkManager/dnsmasq.d/01-laplab.conf /etc/NetworkManager/dnsmasq.d/02-add-hosts.conf /etc/hosts ################### # /etc/NetworkManager/conf.d/00-use-dnsmasq.conf # # This enabled the dnsmasq plugin. [main] dns=dnsmasq ################### # /etc/NetworkManager/dnsmasq.d/00-homelab.conf # # This file directs dnsmasq to forward any request to resolve # names under the .homelab domain to 172.31.0.1, my # home DNS server. server=/homelab/172.31.0.1 ################### # /etc/NetworkManager/dnsmasq.d/01-laplab.conf # This file sets up the local lablab domain and # defines some aliases and a wildcard. local=/laplab/ # The below defines a Wildcard DNS Entry. address=/.ose.laplab/192.168.101.125 # Below I define some host names. I also pull in address=/openshift.laplab/192.168.101.120 address=/openshift-int.laplab/192.168.101.120 ################### # /etc/NetworkManager/dnsmasq.d/02-add-hosts.conf # By default, the plugin does not read from /etc/hosts. # This forces the plugin to slurp in the file. # # If you didn't want to write to the /etc/hosts file. This could # be pointed to another file. # addn-hosts=/etc/hosts ################### # /etc/hosts # # The hostnames I define in that will be brought in and resolvable # because of the config in the 02-add-hosts.conf file. # 127.0.0.1 localhost localhost.localdomain ::1 localhost localhost.localdomain # Notice that my hosts be in the .laplab domain, like as configured # in 01-laplab.conf file 192.168.101.120 ose-lap-jumphost.laplab 192.168.101.128 ose-lap-node1.laplab # Name not in .laplab will also get picked up. So be careful # defining items here. 172.31.0.88 overwrite.public.domain.com 完成所有这些文件后,使用systemctl重新启动NetworkManager重新启动NetworkManager,如果一切正常,你应该看到你的resolv.conf指向127.0.0.1并且产生了一个新的dnsmasq进程: $ ps -ef | grep dnsmasq dnsmasq 1835 1188 0 08:01 ? 00:00:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.0.1 --cache-size=400 --clear-on-reload --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d ################### $ cat /etc/resolv.conf # Generated by NetworkManager nameserver 127.0.0.1 ################### $ host ose-lap-jumphost.laplab ose-lap-jumphost.laplab has address 192.168.101.120 这种配置将在重新启动后继续存在,并且在我的测试中,几乎适用于我尝试过的所有网络和VPN。
相关主题 |