我可以让 dnsmasq 删除/拒绝/重定向除一个之外的任何地址查询吗?

我可以让 dnsmasq 删除/拒绝/重定向除一个之外的任何地址查询吗?

我正在建立一个本地调查系统。 Linux 笔记本电脑将运行 Limesurvey(在典型的 LAMP 堆栈上),并且可以通过分发给会议参与者的 5 台平板电脑进行访问。平板电脑没有问题,因为它们会预先配置加载调查。但是我想允许与会者也可以通过手机访问调查链接。我打算做的是这样的:

  1. 笔记本电脑用作接入点。 DNSMASQ 在加入 AP 后给出 IP。我会给他们一个简单的本地地址(例如http://lime)访问调查界面,这应该是可能的,因为 DNSMASQ 将充当他们的 DNS 服务器 - 所以它将知道如何解析石灰。

  2. 我想迅速处理客户端错误 - 例如,他们在加入 AP 后,意外输入不同的地址(或者只是想上网,例如 google.com) - 我希望 DNSMASQ立即地返回错误,最好重定向到自定义错误页面,为他们提供正确的链接。

  3. 编辑:我对此进行了调查;可能我必须做一个强制门户类型解决方案。我仍然希望以最简单的方式显示启动页面 - 列出调查并将所有其他请求删除/重定向到启动页面。我不需要身份验证,因为不会通过此连接提供互联网;在这种情况下,身份验证只是额外的点击,但我希望人们能够轻松访问调查。

这可能吗?是否有更好的方法来执行这个计划?

答案1

当然!使用以下命令将所有名称解析重定向到一个地址:

address=/#/10.0.0.101

这是文件中所需的条目/etc/dnsmasq.conf。我建议使用它,因为如果服务器因任何原因重新启动,它将强制执行此类配置。

在命令行上,该选项称为:

-A, --address=/<domain>[/<domain>...]/[<ipaddr>]  

下面是dnsmasq 手册的副本address=

-i vlan然而,即使设置(到要使用的预期接口)和-a 10.6.66.1(到预期 dnsmasq 将侦听 DNS 解析的地址)似乎是合理的。不要那样做!。

允许 dnsmasq 以通配符模式绑定到端口 53 上的任何和所有服务器地址。这样,任何向服务器发出的有关 DNS 解析的请求都将由 dnsmasq 应答。

这三种模式是“通配符”、“绑定接口”和“绑定动态”。
在“通配符”模式下,dnsmasq 绑定通配符 IP 地址(0.0.0.0 或 ::)。这允许它在相关端口上接收发送到服务器的所有数据包。访问控制(--interface、--except-interface、--listen-address 等)由 dnsmasq 实现:它查询内核以确定接收数据包的接口以及发送数据包的地址,并且应用配置的规则。如果未指定其他模式,则通配符模式为默认模式。

使用端口 53(外部客户端默认使用该端口):

port=53   # It is set to be 53 by default, not really needed.

关闭(并禁止)两者avahi-dnssystemd.resolved

确保没有其他程序/服务正在侦听端口 53 或 5353。

$ netstat -pantu | grep ':53'

还可以设置此选项以强制 dnsmasq DNS 解析器解析类似(无点)的名称mylocaldomain并显示错误(NXDOMAIN),并且(某些)名称解析不会转发到任何其他服务器:

# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv

确保/etc/resolv.conf未使用中设置的任何服务器:

no-resolv
no-poll

上述所有内容都将配置 dnsmasq 的 DNS 端,以将所有域解析为一个简单的地址。仍然可以通过将其包含在文件中来添加任何其他名称来解析其他所需的地址/etc/hosts,例如

127.0.0.1
10.0.3.101   linum

最后一个地址应该是用于调查的网络服务器的地址。
上面的初始地址 (10.0.0.101) 应该是错误页面,解释如何访问调查页面。

但这还不是全部。您还需要配置 DHCP 服务器以提供带有 dnsmasq DNS 解析器地址的名称服务器选项(不要使用选项号 5,它已过时(应该已经存在 20 多年了)):

dhcp-option=6,10.0.0.101

加上 dnsmasq 的 DHCP 部分所需的所有其他配置。

这将允许计算机(也包括平板电脑或手机)通过定义的 DNS 服务器获取 DHCP 给定地址。所有符合协议的计算机都将遵循此类配置选项,并且无法解析任何其他地址。

但是,设备也可能尝试直接访问 IP 号码(不请求 DNS 解析)。必须在为本地网络提供服务的路由器上使用 IPFilter 配置来避免这种情况。


man dnsmasq:

-A, --address=/[/...]/[]
指定要为给定域中的任何主机返回的 IP 地址。域中的查询永远不会被转发,并且始终使用指定的 IP 地址(可以是 IPv4 或 IPv6)进行回复。要为域提供 IPv4 和 IPv6 地址,请使用重复的 -A 标志。要在单个查询中包含多个 IP 地址,请改用 --addn-hosts=。请注意,/etc/hosts 和 DHCP 租约会覆盖单个名称的此设置。其常见用途是将整个 doubleclick.net 域重定向到一些友好的本地 Web 服务器以避免横幅广告。域规范的工作方式与 --server 相同,但具有 /#/ 匹配任何域的附加功能。因此,对于任何未从 /etc/hosts 或 DHCP 应答且未通过更具体的 --server 指令发送到上游名称服务器的查询,--address=/#/1.2.3.4 将始终返回 1.2.3.4。至于 --server,一个或多个没有地址的域会返回 no-such-domain 答案,因此 --address=/example.com/ 相当于 --server=/example.com/ 并返回 NXDOMAIN 例如。 com 及其所有子域。

另请阅读:

添加伪造的 DNS 条目
绑定配置以将所有查询仅解析到一个地址

答案2

首先,我将重点关注正常工作的解决方案,客户端编写一个简单的名称 URL,如下所示http://lime使调试更容易。

由于您可能不需要提供互联网访问,因此您可能不需要完全实施强制门户,因为您最终会回答任何您给出的 DNS 答案将通过 dnsmasq 指向您的页面。

因此,最简单的方法是在您的 Web 服务器中创建预期的虚拟主机,以及将任何请求重定向到该虚拟主机的默认侦听套接字 (*)。

然而,这是一个很大的问题,Android 和 iOS 设备有点坚持访问某些 URL,认为它们是连接的。尽管如此,我还是会将这些 URL 放在您的网站上,然后就完成了。

相关内容