在 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
无法很好地运行,因此操作步骤有点长。NetworkManager
dnsmasq
但我仍然建议从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-base
Ubuntu 中已预装的版本来dnsmasq
达到相同目的。
因此不要安装dnsmasq
,而是按照此处的步骤操作https://askubuntu.com/a/1031896/211368
如果您安装dnsmasq
它将与已经运行的发生冲突dnsmasq-base
,并且您会收到错误:
failed to create listening socket for port 53: Address already in use