AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 446114
Accepted
r0berts
r0berts
Asked: 2018-05-26 22:21:19 +0800 CST2018-05-26 22:21:19 +0800 CST 2018-05-26 22:21:19 +0800 CST

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

  • 772

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

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

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

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

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

linux dnsmasq
  • 2 2 个回答
  • 8014 Views

2 个回答

  • Voted
  1. Best Answer
    user232326
    2018-06-01T03:59:29+08:002018-06-01T03:59:29+08:00

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

    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-dns和systemd.resolved

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

    $ netstat -pantu | grep ':53'
    

    还设置此选项以强制mylocaldomaindnsmasq DNS 解析器以错误 (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 相同,具有 /#/ 匹配任何域的附加功能。因此,--address=/#/1.2.3.4 将始终返回 1.2.3.4 对于任何未从 /etc/hosts 或 DHCP 回答且未通过更具体的 --server 指令发送到上游名称服务器的查询。

    另请阅读:

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

    • 3
  2. Rui F Ribeiro
    2018-05-31T23:02:56+08:002018-05-31T23:02:56+08:00

    首先,我将专注于与客户端正常工作的解决方案,将简单的名称 URL 编写为http://lime以使调试更容易。

    由于您可能不需要提供 Internet 访问权限,因此您可能不需要完全实现强制门户,因为您最终将使用 dnsmasq 回答您给出的任何DNS 答案将指向您的页面。

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

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

    • 2

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve