我已经使用 Hostapd 设置了个人热点。但此热点未连接到互联网,但我确实安装了 Apache。我试图实现的是,当所有客户端(连接到我的热点)访问另一个网站时,将它们重定向到我的 Apache 页面。因此基本上将所有流量重定向到我的 Apache 页面。
我尝试过的是:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.150.1:80
但是使用此 iptable,客户端不会被重定向到我的 apache 网页。但是当我打开互联网共享以及热点时,它确实可以工作。但我希望它无需共享互联网连接即可工作。
答案1
重定向规则对我来说看起来不错。我认为允许和不允许无线访问互联网连接的唯一区别是 DNS 突然开始工作。
我怀疑问题在于,由于无法解析主机名,您的无线用户:
- 在浏览器中输入 www.google.com
- 他们机器上的解析器在无法联系作为其 DHCP 租约的一部分收到的 DNS 服务器后放弃,因为它(很可能)位于您的 NAT 外部,而 NAT 不会将您的客户端的数据包转发给它。
- 如果他们没有发送 HTTP 请求的 IP 地址,他们就不会发出该请求
- 没有发生重定向,因为没有什么可以重定向。
这看起来像是实际发生的情况吗?如果是这样,您可以通过多种方式解决这个问题:
- 即使您不共享 Internet 连接,也只允许将客户端的请求转发到您提供给他们的 DNS。没有其他的。缺点是,您可以通过将 IP 流量封装在 DNS 请求中(通过使用碘例如)
- 将 DNS 解析器移至 NAT 前面(用户可直接访问)。我的意思是,为其分配一个 IP 地址,用户无需通过 NAT 即可访问。这不会带来太多好处,而且您仍会将解析器暴露给隧道问题。
- 设置一个虚假的解析器,将其地址作为 DHCP 租约的一部分提供,并将其配置为仅提供 Web 服务器的 IP 地址。这是邪恶的,您应该三思而后行。这样做的好处是您不需要 iptables 规则,也不需要将任何用户的数据包转发到 Internet 来实现这一点。
请让我知道这是否对你有用。