需求場景
有一個免認證的 Wifi SSID,比如叫:OpenWrt,附近的同學可以随便連上這個 SSID,沒有繳過費的同學不管通路什麼位址,都會被跳轉到收費提醒頁面,而繳過費的同學就可以開心上網了。
解決辦法
從需求上來說,這是一個非常标準的 WifiDog 效果,如果未來有很複雜的需求,可以直接通過 WifiDog 來實作跳轉,然後再通過 AuthPuppy 來實作賬戶管理,不過想在 OpenWrt 上同時部署 WifiDog 與 AuthPuppy 也不是一件很容易的事情。
是以我們準備考慮直接通過 iptables 來實作這個需求,未來如果有複雜的擴充需求,也不影響擴充到 WifiDog 來實作。
實作流程
通過 SSH 登入到 OpenWrt,打開 /etc/config/uhttpd,在檔案的最頂部增加以下配置
config uhttpd 'portal'
list listen_http '0.0.0.0:11990'
option home '/www/portal'
option error_page '/index.html'
然後在 /www/portal 下建立一個名為 index.html 的靜态檔案,檔案内容可以如下
Wifi
Email: [email protected]
之後再打開 /etc/firewall.user 檔案,在末尾添加如下配置:
iptables -t nat -A prerouting_lan_rule -p tcp -m tcp --dport 80 -m mark ! --mark 8 -j REDIRECT --to-ports 11990
iptables -t filter -A forwarding_lan_rule -m mark ! --mark 8 -j REJECT
儲存後執行 /etc/init.d/firewall restart 重新載入 iptables 的配置
然後再執行 /etc/init.d/uhttpd restart 重新載入 uhttpd 的配置
然後用手機連接配接這個無線網絡,你就會發現總是彈出這個提示頁面了
使用者授權
當有使用者繳費了之後,向他要到他的MAC位址,同樣打開 /etc/firewall.user 檔案,比如這個使用者有 2 個裝置,MAC 位址分别是 00:00:00:00:BB:AA 與 00:00:00:00:BB:BB 則添加以下 2 條 規則,以後這 2 個裝置就可以随便上網了!
iptables -t mangle -A fwmark -m mac --mac-source 00:00:00:00:BB:AA -j MARK --set-mark 8
iptables -t mangle -A fwmark -m mac --mac-source 00:00:00:00:BB:BB -j MARK --set-mark 8
添加後同樣需要執行 /etc/init.d/firewall restart 以使配置生效
注意事項
如果通過以太網口通路 OpenWrt luci 管理界面也是那個收費提示,隻需要把該機器的 MAC 位址同樣授權一樣即可