我喜欢创建一个简单的强制门户,它适用于作为桥梁一部分的界面。
网桥接口 br0 (10.19.1.1/16) 由两个接口 eth0 和 eth1 组成。eth1 后面是客户端计算机。eth0 后面是一个连接互联网网关的交换机。
对于强制门户,所有来自 eth1 后面的客户端对端口 80 的 tcp 请求都需要定向到本地 Web 服务器。
当网站请求被重定向到本地 Web 服务器时,以下几行似乎有效。问题是一旦使用下面的认证行,客户端就不能再加载任何常规网站了。
我已经搜索了互联网,但没有找到解决方案。
PORTAL_INT="eth1"
PORTAL_IP="10.19.1.1"
#'drop' packets from being bridged
ebtables -t broute -A BROUTING -i $PORTAL_INT -p IPv4 --ip-proto tcp --ip-dport 80 -j redirect --redirect-target DROP
iptables -N internet -t mangle
iptables -t mangle -A PREROUTING -j internet
#authenticated
#iptables -t mangle -I internet 1 -m mac --mac-source $CLIENT_MAC -j RETURN
#mark all traffic
iptables -t mangle -A internet -j MARK --set-mark 99
#redirect website access
iptables -t nat -A PREROUTING -m mark --mark 99 -p tcp --dport 80 -j DNAT --to-destination $PORTAL_IP
iptables -t filter -A FORWARD -m mark --mark 99 -j DROP
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -m mark --mark 99 -j DROP