我用iptables创建了一个强制门户网站
我使用了许多人似乎使用的东西:用户可以请求DNS,数据包标记为99. 99表示没有其他用户可以访问的互联网。
当用户访问页面时,例如堆栈溢出。用户获得免责声明。他/她点击好了。发生的事情是服务器执行以下规则:
`sudo /sbin/iptables -t mangle -I captivePortal 1 -m mac --mac-source {$mac} -j RETURN`;
`sudo /sbin/iptables -t mangle -I captivePortal 1 -s {$_SERVER['REMOTE_ADDR']} -j RETURN`;
我尝试了什么:
使用sinatra独自站着薄。用erb渲染模板。当用户在验证后重新加载时,他们在访问初始域时获得免责声明。当访问另一个他们没有得到免责声明页面。
用php设置apache2,在php中重写。添加了meta标签以防止在浏览器中缓存但结果相同。原始域名总是重定向到免责声明,但其他网站都没问题。
我想要实现的目标
用户需要在免责声明上点击接受才能使用WIFI。
编辑:重新加载apache2确实解决了这个问题。
答案 0 :(得分:1)
如下所述使用rmtrack:http://www.andybev.com/index.php/Using_iptables_and_PHP_to_create_a_captive_portal
/usr/sbin/conntrack -L \
|grep $1 \
|grep ESTAB \
|grep 'dport=80' \
|awk \
"{ system(\"conntrack -D --orig-src $1 --orig-dst \" \
substr(\$6,5) \" -p tcp --orig-port-src \" substr(\$7,7) \" \
--orig-port-dst 80\"); }"