在深入探讨这个问题之前,先简单介绍一下背景信息:
我构建了一个小型实验,它与一台运行 Windows 7 的计算机协同工作。在这台计算机上,有一个小型网络服务器,它提供网页,不断更新来自实验的状态信息。现在,这个实验将在某些活动中展示(想象一下 MakerFaire,...),如果人们可以使用他们的智能手机(或笔记本电脑)直接显示这个网页,并且尽可能少地进行配置,我会很高兴。
基本上我想要实现的是:
创建 Wifi 接入点使用电脑内置的 wifi 适配器人们可以连接到哪些网站(开放或受密码保护)
拦截并重定向 DNS 和/或 HTTP 请求,以便在打开浏览器时显示实验网页(如强制门户)
到目前为止,我已经能够使用 Windows 7 的托管网络功能实现第 1 点,该功能对于 Wifi AP 部分非常有用。但是,当涉及到修改 DHCP 答案以提供自定义 DNS 服务器(该服务器反过来会将所有流量转发到我的 Web 服务器)时,我遇到了困难:有什么办法吗?
我有一些限制(否则就太简单了 ;-) ):
- 我仍然使用 Windows 7(我知道使用 Linux 这个问题早就解决了!)
- 该计算机是一台独立的机器,即无法访问其他网络或互联网。这也意味着没有路由器或任何其他外部设备!
非常感谢任何帮助或建议!
答案1
- 获取 MaraDNS
MaraDNS 是一款适用于 Windows 和 Linux 的免费、轻量且相对易于配置的 DNS 服务器。从此处下载并将其解压到某个文件夹中。
- 配置 MaraDNS
打开“secret.txt”并将值更改为其他内容(随机字符)。
MaraDNS 配置位于同一目录中的“mararc”文件中。DNS 服务器具有两组功能。它们可以充当“权威名称服务器”或“递归/缓存名称服务器”。
权威域名服务器指定域名的 IP 地址。递归域名服务器存储来自权威域名服务器的信息,并以递归方式传递查询。
我们将在 MaraDNS 中配置权威功能和递归功能。
2.1 权威配置
我们将配置服务器以提供 LAN 域名的权威名称。选择任何域名,我选择了“local.com”(但请注意,如果您选择现有域名,您将无法访问实际的“local.com”网站)。
向“mararc”添加配置行,如下所示:
csv2 = {}
csv2["local.com."] = "db.lan.txt"
其中 local.com 是您选择的域名,db.lan.txt 是我们接下来要创建的第二个配置文件的名称(如果要命名第二个配置文件,请更改它)。
在与 MaraDNS 相同的目录中创建一个名为“db.lan.txt”的新文件。
对于您要解析名称的每台计算机,在“db.lan.txt”中添加一行。例如,对于两台计算机,一台是“dev.local.com”,另一台是“blog.local.com”,添加以下几行:
dev.% 192.168.1.4 ~
blog.% 192.168.1.6 ~
完毕!
2.2 递归配置
我们将设置 MaraDNS 来询问您所有其他域的默认名称服务器,以便您可以将所有其他域名解析为其正确的 IP 地址。
找出你的 ISP 的 DNS 服务器地址。这些地址可能列在路由器状态页面上,或者可以通过检查网络适配器上的详细信息来找到。
现在将您的 ISP 的 DNS 服务器添加为“mararc”中的上游服务器:
upstream_servers = {}
upstream_servers["."] = "xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy"
其中 xxx.xxx.xxx.xxx 和 yyy.yyy.yyy.yyy 是您的 ISP 的 DNS 服务器。
完毕!
- 运行 MaraDNS 并使用 askmara.exe 进行测试
双击“runmara.bat”,让服务器保持运行。
打开命令提示符,导航到 MaraDNS 目录并尝试运行:
askmara.exe Agoogle.com.
和
askmara.exe Ablog.local.com.
你应该会收到如下回复:
# Querying the server with the IP 127.0.0.1
# Question: Agoogle.com.
google.com. +300 a 74.125.67.100
google.com. +300 a 74.125.53.100
google.com. +300 a 74.125.45.100
# NS replies:
# AR replies:
和:
# Querying the server with the IP 127.0.0.1
# Question: Ablog.local.com.
blog.local.com. +86400 a 192.168.1.6
# NS replies:
#local.com. +86400 ns synth-ip-7f000001.local.com.
# AR replies:
#synth-ip-7f000001.local.com. +86400 a 127.0.0.1
如果第一次查询出现问题,则说明您搞乱了递归 DNS 设置(您的 ISP DNS 服务器地址正确吗?);如果第二次查询出现错误,则说明您搞乱了权威设置。
- 更改 MaraDNS 以回复来自 LAN 的查询
关闭 MaraDNS 窗口,并将“mararc”的前两行更改为如下内容:
ipv4_bind_addresses = "192.168.1.2
recursive_acl = "192.168.1.0/24"
其中 192.168.1.2 是服务器将在其上运行的计算机的 IP 地址,并且 recursive_acl 的“192.168.1”部分与您网络上的相同(可能是 192.168.0.0/24)。
再次启动 MaraDNS并保持其运行。
- 设置路由器以分配新的 DNS 服务器
打开路由器的 Web 界面并找到 DHCP 服务器设置。应该有一个设置 DNS 服务器的选项。写下将运行 DNS 服务器的计算机的 IP 地址。
对于每台计算机,断开网络(例如,在 Windows 中禁用和启用它,或者在 Linux 上使用“ifconfig eth0 down”/”ifconfig eth0 up”)。
就这样,您现在应该能够通过域名来引用您的 LAN 计算机。