![将所有 WiFi 请求重定向到我的服务器(如强制门户)](https://linux22.com/image/507645/%E5%B0%86%E6%89%80%E6%9C%89%20WiFi%20%E8%AF%B7%E6%B1%82%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E6%88%91%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%88%E5%A6%82%E5%BC%BA%E5%88%B6%E9%97%A8%E6%88%B7%EF%BC%89.png)
我实际上正在尝试开发一个公共无线网络(不是商业,只是为了教育目的,我正在研究计算机科学……)。但我缺乏实现这一目标所需的知识(我通常更喜欢编程而不是网络管理 [喜欢 Stack Overflow ;-)])。
我想要做的正是像许多城市/学校的公共网络一样,每个地址在能够访问互联网之前都会被重定向到登录页面。
我当前的设置如下:我将互联网连接到有线路由器。此路由器连接到交换机。我的个人电脑连接到此交换机。我有一个 IIS 服务器连接到路由器。
我有一个无线接入点,但我不知道如何设置它以将传入 IP 重定向到我的 IIS。基本上,我想阻止所有 Internet 并将非本地请求重定向到我的本地 IIS(仅适用于 WiFi 用户,LAN 应该有 Internet)。
我想也许可以在服务器上安装 DNS,并将其设置为路由器中的主 DNS。或者也许将 WiFi 连接到服务器(使用第二个网络适配器)并通过防火墙/代理进行重定向,但在开始学习如何设置其中一个选项之前,我不知道这些在理论上是否可行...
非常感谢您的帮助!
答案1
答案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
希望这能给您带来一些启发。