如何在 Windows 7 中创建 wifi 热点 + 重定向到本地网页?

Fed*_*ico 7 windows-7 wireless-access-point dhcp-server captive-portal

在深入研究这个问题之前,先介绍一下背景信息:
我已经构建了一个与运行 Windows 7 的计算机一起工作的小型实验。在这台计算机上,有一个小型网络服务器,提供不断更新的网页,其中包含来自实验的状态信息。现在这个实验将在一些活动中展示(想象一下 MakerFaire,...),如果人们可以使用他们的智能手机(或笔记本电脑)直接显示这个网页,尽可能少的配置,我会很高兴。

基本上我想要实现的是:

  1. 使用人们可以连接的计算机内置 wifi 适配器创建一个 Wifi 接入点(打开或受密码保护)

  2. 拦截和重定向 DNS 和/或 HTTP 请求,以便在他们打开浏览器(如强制门户)时显示实验网页

到目前为止,我已经能够使用 Windows 7 的托管网络功能实现第 1 点,该功能非常适合 Wifi AP 部分。但是,当涉及到修改 DHCP 答案以提供自定义 DNS 服务器时,我陷入了困境,而该服务器又会将所有流量转发到我的网络服务器:有什么方法可以做到吗?

我有一些限制(否则就太容易了;-)):

  • 我坚持使用 Windows 7(我知道使用 Linux 问题早就解决了!)
  • 计算机是独立的机器,即无法访问其他网络或 Internet。这也意味着没有路由器或任何其他外部设备!

非常感谢任何帮助或建议!

Eve*_*ett 2

    \n
  1. 获取 MaraDNS
  2. \n
\n\n

MaraDNS 是一款免费、轻量级且相对易于配置的 DNS 服务器,适用于 Windows 和 Linux。从这里下载它并将其解压缩到某个文件夹。

\n\n
    \n
  1. 配置 MaraDNS
  2. \n
\n\n

打开 \xe2\x80\x9csecret.txt\xe2\x80\x9d 并将值更改为其他内容(随机字符)。

\n\n

MaraDNS 配置位于同一目录下的 \xe2\x80\x9cmararc\xe2\x80\x9d 文件中。DNS 服务器有两组功能。它们可以充当 \xe2\x80\x9c 权威名称服务器\xe2\x80\x9d 或 \xe2\x80\x9c 递归/缓存名称服务器\xe2\x80\x9d。

\n\n

权威名称服务器指定域名的 IP 地址。递归名称服务器存储来自权威名称服务器的信息并以递归方式传递查询。

\n\n

我们将在 MaraDNS 中配置权威和递归功能。

\n\n

2.1 权威配置

\n\n

我们将配置服务器以提供局域网域名的权威名称。选择任何域名,我选择 \xe2\x80\x9clocal.com\xe2\x80\x9d (但请注意,如果您选择一个现有的域名)。

\n\n

将配置行添加到 \xe2\x80\x9cmararc\xe2\x80\x9d ,如下所示:

\n\n
csv2 = {}\ncsv2["local.com."] = "db.lan.txt"\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中 local.com 是您选择的域名,db.lan.txt 是我们接下来要创建的第二个配置文件的名称(如果您想命名第二个配置文件,请更改它)。

\n\n

在与 MaraDNS 相同的目录中创建一个名为 \xe2\x80\x9cdb.lan.txt\xe2\x80\x9d 的新文件。

\n\n

对于要解析为名称的每台计算机,将一行添加到 \xe2\x80\x9cdb.lan.txt\xe2\x80\x9d。例如,对于两台计算机(一台 \xe2\x80\x9cdev.local.com\xe2\x80\x9d 和另一台 \xe2\x80\x9cblog.local.com\xe2\x80\x9d),添加以下行:

\n\n
dev.%       192.168.1.4 ~\nblog.%        192.168.1.6 ~\n
Run Code Online (Sandbox Code Playgroud)\n\n

完毕!

\n\n

2.2 递归配置

\n\n

我们将设置 MaraDNS 向您的默认名称服务器询问所有其他域,以便您可以将所有其他域名解析为其正确的 IP 地址。

\n\n

找出您的 ISP\xe2\x80\x99s DNS 服务器地址。这些可能会在路由器状态页面上列出,或者通过检查网络适配器上的详细信息来列出。

\n\n

现在将您的 ISP\xe2\x80\x99s DNS 服务器添加为 \xe2\x80\x9cmararc\xe2\x80\x9d 中的上游服务器:

\n\n
upstream_servers = {}\nupstream_servers["."] = "xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy"\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中 xxx.xxx.xxx.xxx 和 yyy.yyy.yyy.yyy 是您的 ISP\xe2\x80\x99s DNS 服务器。

\n\n

完毕!

\n\n
    \n
  1. 运行 MaraDNS 并使用 Askmara.exe 进行测试
  2. \n
\n\n

双击 \xe2\x80\x9crunmara.bat\xe2\x80\x9d ,并使服务器保持运行状态。

\n\n

打开命令提示符,导航到 MaraDNS 目录并尝试运行:

\n\n
askmara.exe Agoogle.com.\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
askmara.exe Ablog.local.com.\n
Run Code Online (Sandbox Code Playgroud)\n\n

您应该得到这样的回复:

\n\n
# Querying the server with the IP 127.0.0.1\n# Question: Agoogle.com.\ngoogle.com. +300 a 74.125.67.100\ngoogle.com. +300 a 74.125.53.100\ngoogle.com. +300 a 74.125.45.100\n# NS replies:\n# AR replies:\n
Run Code Online (Sandbox Code Playgroud)\n\n

和:

\n\n
# Querying the server with the IP 127.0.0.1\n# Question: Ablog.local.com.\nblog.local.com. +86400 a 192.168.1.6\n# NS replies:\n#local.com. +86400 ns synth-ip-7f000001.local.com.\n# AR replies:\n#synth-ip-7f000001.local.com. +86400 a 127.0.0.1\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您在第一个查询中遇到问题,则说明您搞乱了递归 DNS 设置(您的 ISP DNS 服务器地址是否正确?),如果您在第二个查询中遇到错误,则说明您搞乱了权威设置。

\n\n
    \n
  1. 更改 MaraDNS 以回复来自 LAN 的查询
  2. \n
\n\n

关闭 MaraDNS 窗口,并将 \xe2\x80\x9cmararc\xe2\x80\x9d 的前两行更改为:

\n\n
ipv4_bind_addresses = "192.168.1.2\nrecursive_acl = "192.168.1.0/24"\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中 192.168.1.2 是将运行服务器的计算机的 IP 地址,并且 recursive_acl 的 \xe2\x80\x9c192.168.1\xe2\x80\xb3 部分与您的网络上的相同(可能是 192.168.0.0 /24)。

\n\n

再次启动 MaraDNS,并保持其运行。

\n\n
    \n
  1. 设置您的路由器以分发新的 DNS 服务器
  2. \n
\n\n

打开您的 router\xe2\x80\x99s Web 界面并找到 DHCP 服务器设置。应该有一个设置 DNS 服务器的选项。写入将运行 DNS 服务器的计算机的 IP 地址。

\n\n

对于每台计算机,断开网络连接(例如,通过在 Windows 中禁用和启用网络,或使用 \xe2\x80\x9cifconfig eth0 down\xe2\x80\x9d/\xe2\x80\x9difconfig eth0 up\xe2\x80\ Linux 上的 x9d)。

\n\n

\xe2\x80\x99s 它,您现在应该能够通过域名引用您的 LAN 计算机。

\n\n

来源

\n