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


18

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

经过大量阅读后,我无法终生使用全新安装的18.04进行整理。

我目前想要实现的是:

  • 用于ping example.com ping 127.0.0.1而不是ping 93.184.216.34;
  • 对于ping anysubdomain.example.com 要同时ping 127.0.0.1;
  • ping google.com 通过路由器/ IP DNS对真正的google.com进行ping操作。

当然这必须很简单,甚至是微不足道的吗?

但是我很沮丧。我可以得到example.com的解决方案,但只能以破坏其他一切为代价。

我怎样才能做到这一点?


1
为什么不像在14.04上那样安装dnsmasq?
vidarlo

1
@vidarlo当然,正如我在问题中指出的那样,这当然是我要做的第一件事。但是与14.04中的情况不同,这会导致“无法为端口53创建监听套接字:地址已在使用中”错误。我接受的答案可以正常运行,而无需显式安装dnsmasq。
尼克·赖斯

Answers:


30

以下是ubuntu 18.04的步骤。这有点长,因为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

让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

你说“ systemd-resolved在NetworkManager中不能很好地发挥作用”是什么意思?
塞巴斯蒂安·史塔克

1
当NetworkManager使用dns = dnsmasq时,应该告诉systemd-resolved使用dnsmasq,可以是自动的。
pim

1
谢谢,这很完美!看来我无法再再给您一个赏金了,因为早上已经不在这里了,所以我现在要上床睡觉,明天我再回来的时候就去做。
尼克·赖斯

2
太棒了 我读过许多不同的技术。这是最后起作用的那个。
Redsandro '18年

3
对于那些希望恢复为systemd-resolved的用户,默认情况下/etc/resolv.conf指向/run/systemd/resolve/stub-resolv.conf
Pothi Kalimuthu

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替代。


1
我无法使它正常工作。干净的最小安装(带有“擦除磁盘”选项)后,立即sudo apt install dnsmasq出现“无法为端口53创建侦听套接字:地址已在使用”错误。无论如何,我还是继续到最后,以防以后的步骤解决了这个问题,但是没有成功,这没有用。
尼克·赖斯

然后,由NetworkManager启动的dnsmasq仍在运行。因此,应首先将其停用,最后将其杀死,然后才应安装dnsmasq软件包。
塞巴斯蒂安·史塔克

谢谢,塞巴斯蒂安。但是,我已经接受了pim的回答,该回答完美无缺,所以我现在可以继续进行下去,而不必再进行任何操作。
尼克·赖斯

@NickRice没问题,但也许其他人想尝试
Sebastian Stark

是的,塞巴斯蒂安。我确实尝试过您的答案,因为这是最简单的,如果只需要增加一个初始步骤,那么它就是一个很好的步骤。
尼克·赖斯

0

这不会像编辑主机文件那样简单。您有两种选择:

此python DNS代理将处理/ etc / hosts中的通配符

使用DNSmasq


谢谢。您到DNSmasq问题的链接是我在14.04中正在做什么。由于端口冲突,在全新的18.04安装中执行相同操作无法正常工作。因此,与之相比,开箱即用还需要做其他事情。查看python DNS代理所需的所有代码,我不相信所有这些都是必要的。我想,对于那些坚持使用/ etc / hosts的人来说,这不是之前。
尼克·赖斯

netstat -tulpn可以检查端口在使用什么吗?编辑:没关系,看到了可接受的答案。问题是系统解决。
Harikrishnan R
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.