带有 iptables 和本地 DNS 服务器的强制门户

带有 iptables 和本地 DNS 服务器的强制门户

我正在尝试将所有浏览器的请求从我的 wifi 接口 wlan1 重定向到一个强制门户。我在 10.4.30.34:4040 上的目标上运行着一个节点 Web 服务器。

它必须将浏览器直接重定向到 Web 服务器,在正确的端口上,就像我在位置栏中输入的“10.4.30.34:4040”一样。

目前,它仅重定向到 Web 服务器的第一页,但是当我尝试浏览小部件时,什么也没有发生,就像它仅重定向第一个请求一样。

此外,它仅当目标连接到互联网时才会重定向。我认为这是因为断开连接时 DNS 服务器丢失,所以我需要运行自己的 DNS 服务器并重定向 DNS 请求。

这是我的 iptables:

# Completed on Tue Mar  8 09:19:04 2016
# Generated by iptables-save v1.4.21 on Tue Mar  8 09:19:04 2016
*nat
:PREROUTING ACCEPT [9574:1494526]
:INPUT ACCEPT [4431:653511]
:OUTPUT ACCEPT [101:17500]
:POSTROUTING ACCEPT [47:8227]
-A PREROUTING -i br0 -p tcp -m mark --mark 0x63 -m tcp --dport 80 -j DNAT --to-destination 10.4.30.34:4040
-A PREROUTING -i br0 -p tcp -m mark --mark 0x63 -m tcp --dport 443 -j DNAT --to-destination 10.4.30.34:4040
-A POSTROUTING -o eth1 -j MASQUERADE
-A POSTROUTING -o wlan0 -j MASQUERADE
COMMIT
# Completed on Tue Mar  8 09:19:04 2016
# Generated by iptables-save v1.4.21 on Tue Mar  8 09:19:04 2016
*mangle
:PREROUTING ACCEPT [47457:9766851]
:INPUT ACCEPT [37596:7677987]
:FORWARD ACCEPT [5111:1392701]
:OUTPUT ACCEPT [16333:6011533]
:POSTROUTING ACCEPT [21605:7471587]
:internet - [0:0]
-A PREROUTING -i br0 -p tcp -m tcp --dport 80 -j internet
-A PREROUTING -i br0 -p tcp -m tcp --dport 443 -j internet
-A internet -j MARK --set-xmark 0x63/0xffffffff
COMMIT
# Completed on Tue Mar  8 09:19:04 2016
# Generated by iptables-save v1.4.21 on Tue Mar  8 09:19:04 2016
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -j ACCEPT
-A FORWARD -j ACCEPT
-A OUTPUT -j ACCEPT
COMMIT
# Completed on Tue Mar  8 09:19:04 2016

我的/etc/resolv.conf:

nameserver 8.8.8.8
nameserver 8.8.4.4

我安装了 dnsmasq 和 bind,并遵循了本教程: http://openexhibits.org/wp-content/uploads/2012/05/CaptivePortalHowto.pdf

但它没有用...

谢谢

答案1

解决方案如下:

1- 安装一个绑定服务器作为本地 DNS,它将始终返回相同的 IP 地址

2-将 DNS 请求重定向到绑定。

iptables -A PREROUTING -i br0 -p tcp -m mark --mark 0x63 -m tcp --dport 53 -j DNAT --to 10.4.30.34
iptables -A PREROUTING -i br0 -p udp -m mark --mark 0x63 -m udp --dport 53 -j DNAT --to 10.4.30.34
iptables -A PREROUTING -i br0 -p tcp -m tcp --dport 53 -j internet
iptables -A PREROUTING -i br0 -p udp -m udp --dport 53 -j internet
iptables -A internet -j MARK --set-xmark 0x63/0xffffffff

3-安装 lighttpd,将所有互联网请求重定向到特定的 URL

/etc/lighttpd.conf : 

server.modules          = ( "mod_redirect", "mod_rewrite" )
server.document-root    = "/www/pages/"
server.port             = 80

url.redirect = ( "^/(.*)$" => "http://10.4.30.34:4040" )

相关内容