将所有 WiFi 请求重定向到我的服务器(如强制门户)

将所有 WiFi 请求重定向到我的服务器(如强制门户)

我实际上正在尝试开发一个公共无线网络(不是商业,只是为了教育目的,我正在研究计算机科学……)。但我缺乏实现这一目标所需的知识(我通常更喜欢编程而不是网络管理 [喜欢 Stack Overflow ;-)])。

我想要做的正是像许多城市/学校的公共网络一样,每个地址在能够访问互联网之前都会被重定向到登录页面。

我当前的设置如下:我将互联网连接到有线路由器。此路由器连接到交换机。我的个人电脑连接到此交换机。我有一个 IIS 服务器连接到路由器。

我有一个无线接入点,但我不知道如何设置它以将传入 IP 重定向到我的 IIS。基本上,我想阻止所有 Internet 并将非本地请求重定向到我的本地 IIS(仅适用于 WiFi 用户,LAN 应该有 Internet)。

我想也许可以在服务器上安装 DNS,并将其设置为路由器中的主 DNS。或者也许将 WiFi 连接到服务器(使用第二个网络适配器)并通过防火墙/代理进行重定向,但在开始学习如何设置其中一个选项之前,我不知道这些在理论上是否可行...

非常感谢您的帮助!

答案1

你正在尝试做的是实现一个强制门户(如您所知)。最受欢迎的强制门户之一是无线狗。它是开源的并且应该能满足您的需求。

您可以使用区域CD,但有些人说它很慢。另外,我不确定这些设置是否可以承受重启(可能不行,因为我认为没有任何东西写入非易失性存储器)

答案2

您的 wifi 需要连接到网关,您可以在此将流量重定向到您的强制门户(登录页面)。

您可以使用 Linux 上的 iptables 来实现这一点。假设您的接口 eth0 已连接到具有192.168.0.0/24子网的接入点,并且您的网关(Linux 服务器)已配置为,192.168.0.1并且可以通过单独的接口访问互联网。您的 IIS 服务器位于192.168.0.2:80

你的 iptables 规则可能是这样的:

iptables -t mangle -N my_access_filter
iptables -t mangle -A INPUT -i eth0 -j my_access_filter

iptables -t mangle -A my_access_filter -m mac --mac-source 11:22:33:44:55:66 -j RETURN # Grant access to mac 11:22:33:44:55:66, by returning and not marking the traffic
iptables -t mangle -A my_access_filter -j MARK --set-mark 99 # Arbitrarily selected number

# that's it for the mangle table, now the nat table
iptables -t nat -A PREROUTING -p tcp --dport 80 -m mark --mark 99 -j DNAT --to 192.168.0.2:80 # ip o
iptables -t nat -A PREROUTING -p udp --dport 53 -m mark --mark 99 -j DNAT --to 192.168.0.1 # For good measure, lets redirect their dns queries to our own dns server.

# now the filter table reads:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # standard rule to accept established connections
iptables -A FORWARD -i eth0 -m mark --mark 99 -j DROP # This will drop traffic that is marked, preventing clients from accessing the internet

你的强制门户只需要把客户端的 ip 或 mac,或者你过滤的内容放入 mangle 表中的 my_access_filter 中,这可以通过以下方式完成

iptables -t mangle -I my_access_filter -m mac --mac-source <mac> -j RETURN

或者

iptables -t mangle -I my_access_filter -s 192.168.0.xx -j RETURN # by ip

希望这能给您带来一些启发。

相关内容