PHP/Ruby 强制门户第一个域名似乎被缓存

PHP/Ruby 强制门户第一个域名似乎被缓存

我已经使用 iptables 创建了一个强制门户

我使用许多人似乎都在使用的方法:用户可以请求 DNS,数据包标记为 99。99 表示没有互联网,否则用户可以访问。

当用户访问页面时,例如访问 Stack Overflow。用户会收到免责声明。他/她点击确定。服务器会执行以下规则:

`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`;

我已尝试过:

使用 Thin 独立版 sinatra。使用 erb 渲染模板。当用户在身份验证后重新加载时,他们会在访问初始域时获得免责声明。当他们访问另一个域时,他们不会获得免责声明页面。

使用 php 设置 apache2,用 php 重写所有内容。添加元标记以防止在浏览器中缓存,但结果相同。原始域名始终重定向到免责声明,但其他网站没问题。

我想要实现的目标

用户需点击免责声明上的“接受”后,方可使用WIFI。

重新加载 apache2 或重新启动 Sinatra 确实可以解决这个问题,但这不是一个低端 alix 主板上的正确解决方案。

答案1

发现将 mac 地址插入 iptables 后我需要使用 conntrack。

/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\"); }"

http://aryo.info/labs/captive-portal-using-php-and-iptables.html

相关内容