将所有对 TLD 的请求发送到一个 IP

将所有对 TLD 的请求发送到一个 IP

我已经解决这个问题好几天了,但我不知道我做错了什么。我正在开发一个将使用动态子域的网站,所以我试图让所有以 .test 结尾的域路由到一个 IP 地址(我意识到不仅子域会路由,而且所有 .test 域都会路由,但我在 .test 域下开发了所有网站)。

我一直在尝试设置 dnsmasq 来实现这一点,但似乎无法让它工作。我知道 NetworkManager 运行自己的 dnsmasq 实例。我已在多个地方进行了以下输入,试图让它工作。我尝试的输入是:地址=/.测试/192.168.10.10

我已在以下位置进行了记录:

  • /etc/NetworkManger/dnsmasq.d/hosts.conf
  • /etc/NetworkManager/dnsmasq-shared.d/hosts.conf
  • /etc/dnsmasq.d/hosts.conf
  • /etc/dnsmasq.conf

我首先尝试安装 dnsmasq NetworkManager 目录。安装失败后,我安装了 dnsmasq 并尝试了其他位置,但同样失败。

我尝试重新启动我的网络接口并且多次重新启动了我的计算机。

我不确定我做错了什么。任何帮助我都会很感激。

答案1

我也遇到过同样的问题几天了。下面是我为解决这个问题所做的事情(但我不确定这是否是解决问题的正确方法)。

Ubuntu 默认有一个53名为 的存根 DNS 服务器(监听端口 ) 。如果不首先禁用存根,systemd-resolved我就无法工作。我不确定关闭是否可行,但既然它被称为存根 DNS,我想应该没问题()。dnsmasqsystemd-resolvedsudo systemctl disable systemd-resolved.service

然后我对/etc/dnsmasq.conf:进行了更改,取消注释bind-interfaces并让 dnsmasq 监听127.0.0.1:53listen=127.0.0.1port=53)。

通过添加 (在类别中)告诉 NetworkManager 用作dnsmasqDNS 服务器。dns=dnsmasq/etc/NetworkManager/NetworkManager.conf[main]

现在,由于systemd-resolved已关闭,您可以自由编辑/etc/resolve.conf(至少直到您安装另一个生成和管理的服务resolve.conf)。nameserver 127.0.0.53不再需要,请将其更改为nameserver 127.0.0.1

您现在应该能够配置dnsmasq将 TLD 解析为所需的地址。/etc/dnsmasq.d/test.conf使用 创建文件address=/.test/127.0.0.1

重新启动,dnsmasqNetworkManagersudo servicectl restart dnsmasq.servicesudo servicectl restart network-manager.service)。

developer@ubuntu:~$ dig hi_eric.test

; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> hi_eric.test
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59442
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;hi_eric.test.          IN  A

;; ANSWER SECTION:
hi_eric.test.       0   IN  A   127.0.0.1

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Jul 01 07:30:46 PDT 2018
;; MSG SIZE  rcvd: 46

缺点是,这迫使我使用硬编码的 DNS 服务器来处理传出流量(因为现在.test是您的服务器可以解析的唯一域)。我不得不添加resolv-file=/etc/resolve.dnsmasq并使用 Google 公共 DNS 服务器来/etc/dnsmasq.conf创建:/etc/resolve.dnsmasq

nameserver 8.8.8.8
nameserver 8.8.4.4

重新启动dnsmasq上次(sudo servicectl restart dnsmasq.service)。现在,一切,无论多或少,都应该正常工作。.test解析为127.0.0.1,其他一切都由 Google 开放 DNS 服务器解析。您可以调整dnsmasq配置,增加缓存大小等。

就像我说的,我对这个解决方案不是 100% 确定(我 99% 确定有更好的解决方案),但它确实有效。我希望其他人能纠正我做错的一切,并指导你用更好、更稳定的方式解决你(和我!)的问题。干杯!

相关内容