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

Nic*_*ice 24 dns dnsmasq 18.04 20.04

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

经过大量阅读后,我终生无法在 18.04 的全新安装中解决相同的问题。

我目前想要达到的目标是:

  • 用于ping example.com ping 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 的解析,但前提是要破坏其他一切。

我怎样才能做到这一点?

pim*_*pim 48

这是自 18.04 以来 ubuntu 的步骤。这是一个有点长,因为systemd-resolved不发挥得很好NetworkManager时配置dnsmasq

然而,我还是建议你从dnsmasqNetworkManager,因为网络连接的变化(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
Run Code Online (Sandbox Code Playgroud)

让网络管理员管理 /etc/resolv.conf

sudo rm /etc/resolv.conf ; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

配置 example.com

echo 'address=/.example.com/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/example.com-wildcard.conf
Run Code Online (Sandbox Code Playgroud)

重新加载NetworkManager和测试

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

sudo systemctl reload NetworkManager
Run Code Online (Sandbox Code Playgroud)

然后我们可以验证我们可以访问一些常用站点:

dig askubuntu.com +short
151.101.129.69
151.101.65.69
151.101.1.69
151.101.193.69
Run Code Online (Sandbox Code Playgroud)

最后验证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
Run Code Online (Sandbox Code Playgroud)

  • 对于那些更喜欢恢复到 systemd-resolved 的人,`/etc/resolv.conf` 默认指向 `/run/systemd/resolve/stub-resolv.conf`。 (3认同)
  • 惊人的。我已经阅读了许多不同的技术。这是最终有效的方法。 (2认同)