如何在 18.04..20.04 上设置本地通配符(127.0.0.1)域解析?

如何在 18.04..20.04 上设置本地通配符(127.0.0.1)域解析?

在 Ubuntu 14.04 上,我使用 dnsmasq 将通配符 example.com 域解析到本地机器(家里的台式计算机)。

读了大量资料之后,我还是无法在全新安装的 18.04 上解决同样的问题。

我目前想要实现的目标是:

  • ping ping example.com 127.0.0.1 而不是 93.184.216.34;
  • ping anysubdomain.example.com ping 127.0.0.1;
  • ping google.com 通过路由器/IP DNS ping 真正的 google.com。

这肯定很简单,甚至微不足道,对吧?

但我被难住了。我可以解决 example.com 的问题,但代价是破坏其他所有东西。

我怎样才能做到这一点?

答案1

以下是 18.04 版以后的 ubuntu 操作步骤。由于配置时systemd-resolved无法很好地运行,因此操作步骤有点长。NetworkManagerdnsmasq

但我仍然建议从dnsmasq开始NetworkManager,因为网络连接变化(WIFI,有线......)将被透明地处理。

在 NetworkManager 中启用 dnsmasq

编辑该文件/etc/NetworkManager/NetworkManager.conf,并将该行添加dns=dnsmasq到该[main]部分,它将看起来像这样:

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

让 NetworkManager 管理/etc/resolv.conf

sudo rm /etc/resolv.conf ; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

配置example.com

echo 'address=/.example.com/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/example.com-wildcard.conf

重新加载NetworkManager并测试

应重新加载 NetworkManager 以使更改生效。

sudo systemctl reload NetworkManager

然后我们可以验证是否可以访问一些常见的站点:

dig askubuntu.com +short
151.101.129.69
151.101.65.69
151.101.1.69
151.101.193.69

最后验证example.com和子域名是否解析为127.0.0.1

dig example.com askubuntu.example.com a.b.c.d.example.com +short
127.0.0.1
127.0.0.1
127.0.0.1

答案2

首先确保/etc/NetworkManager/NetworkManager.conf以下行是不是存在或者注释掉的:

dns=dnsmasq

重新启动 NetworkManager:

sudo systemctl restart NetworkManager

确保 NetworkManager 控制的 dnsmasq 不再运行,可以通过终止进程或重新启动系统来实现。

然后安装 dnsmasq:

sudo apt install dnsmasq

添加以下内容/etc/dnsmasq.d/example.com

address=/example.com/127.0.0.1

重新启动 dnsmasq:

sudo systemctl restart dnsmasq

现在您应该有一个针对 example.com 的通配符 DNS 覆盖。

答案3

基于pim 的回答我创建了一个包含简单 Bash 脚本的要点,该脚本结合使用 DNSMasq 与 NetworkManager 来设置指向 127.0.0.1 的 .test 域

请参阅https://gist.github.com/archan937/d35deef3b1f2b5522dd4b8f397038d27

您可以使用以下命令执行该脚本:

curl -sL https://gist.githubusercontent.com/archan937/d35deef3b1f2b5522dd4b8f397038d27/raw/setup-dnsmasq.sh | sudo bash

干杯!

答案4

可以使用dnsmasq-baseUbuntu 中已预装的版本来dnsmasq达到相同目的。

因此不要安装dnsmasq,而是按照此处的步骤操作https://askubuntu.com/a/1031896/211368

如果您安装dnsmasq它将与已经运行的发生冲突dnsmasq-base,并且您会收到错误:
failed to create listening socket for port 53: Address already in use

相关内容