<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://photonicat.com/index.php?action=history&amp;feed=atom&amp;title=Photonicat_2_%E8%AE%BF%E5%AE%A2%E9%97%A8%E6%88%B7_Captive_Portal</id>
	<title>Photonicat 2 访客门户 Captive Portal - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://photonicat.com/index.php?action=history&amp;feed=atom&amp;title=Photonicat_2_%E8%AE%BF%E5%AE%A2%E9%97%A8%E6%88%B7_Captive_Portal"/>
	<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E8%AE%BF%E5%AE%A2%E9%97%A8%E6%88%B7_Captive_Portal&amp;action=history"/>
	<updated>2026-07-26T15:59:02Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E8%AE%BF%E5%AE%A2%E9%97%A8%E6%88%B7_Captive_Portal&amp;diff=914&amp;oldid=prev</id>
		<title>C2h2：​New topic: OpenNDS-based guest captive portal — branded one-tap splash, settings toggle, caveats and CLI verification</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E8%AE%BF%E5%AE%A2%E9%97%A8%E6%88%B7_Captive_Portal&amp;diff=914&amp;oldid=prev"/>
		<updated>2026-07-12T16:23:23Z</updated>

		<summary type="html">&lt;p&gt;New topic: OpenNDS-based guest captive portal — branded one-tap splash, settings toggle, caveats and CLI verification&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 适用 / Applies to&lt;br /&gt;
| Photonicat 2, photonicatWrt &amp;#039;&amp;#039;&amp;#039;26.04+&amp;#039;&amp;#039;&amp;#039;（含 OpenNDS、fw4/nftables 的固件）与 pcat-manager-web 2026-06 及以后版本 / Photonicat 2, photonicatWrt 26.04+ images (with OpenNDS on fw4/nftables) and pcat-manager-web builds from 2026-06 onward&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;访客门户（Captive Portal）&amp;#039;&amp;#039;&amp;#039;功能让 photonicat 2 成为一台&amp;#039;&amp;#039;&amp;#039;强制门户网关&amp;#039;&amp;#039;&amp;#039;：连接它 WiFi/LAN 的访客必须先看到 Photonicat 品牌的欢迎页并点击&amp;quot;同意并连接&amp;quot;，才能访问互联网——就像酒店、机场的 WiFi 登录页。这与 [[Photonicat 2 Smart WAN 智能上网|Smart WAN]] 正好相反：Smart WAN 是让设备&amp;#039;&amp;#039;&amp;#039;通过&amp;#039;&amp;#039;&amp;#039;别人的门户上网，本功能是让设备&amp;#039;&amp;#039;&amp;#039;发布&amp;#039;&amp;#039;&amp;#039;自己的门户。&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Captive Portal&amp;#039;&amp;#039;&amp;#039; feature turns the photonicat 2 into a &amp;#039;&amp;#039;&amp;#039;captive gateway&amp;#039;&amp;#039;&amp;#039;: guests joining its WiFi/LAN must pass a Photonicat-branded splash page (&amp;quot;Agree &amp;amp; Connect&amp;quot;) before reaching the internet — like hotel or airport WiFi. It is the inverse of [[Photonicat 2 Smart WAN 智能上网|Smart WAN]]: Smart WAN gets the device &amp;#039;&amp;#039;&amp;#039;through&amp;#039;&amp;#039;&amp;#039; someone else&amp;#039;s portal; this feature &amp;#039;&amp;#039;&amp;#039;serves&amp;#039;&amp;#039;&amp;#039; your own.&lt;br /&gt;
&lt;br /&gt;
== 中文说明 ==&lt;br /&gt;
&lt;br /&gt;
=== 工作原理 ===&lt;br /&gt;
* 基于 &amp;#039;&amp;#039;&amp;#039;OpenNDS&amp;#039;&amp;#039;&amp;#039;（nodogsplash 的持续维护继任者），原生运行在 fw4/nftables 防火墙上。&lt;br /&gt;
* 访客设备（iPhone/Android/Windows）连上 WiFi 后，操作系统的联网探测会&amp;#039;&amp;#039;&amp;#039;自动弹出&amp;#039;&amp;#039;&amp;#039;登录页；点击&amp;#039;&amp;#039;&amp;#039;同意并连接&amp;#039;&amp;#039;&amp;#039;即放行该设备的 MAC。&lt;br /&gt;
* 当前为&amp;#039;&amp;#039;&amp;#039;一键点击直连&amp;#039;&amp;#039;&amp;#039;模式（无需账号密码）；门户页为 Photonicat 品牌定制版，&amp;#039;&amp;#039;&amp;#039;首次点击即完成授权&amp;#039;&amp;#039;&amp;#039;，不会卡在中间页。&lt;br /&gt;
* 会话按 MAC 记录，超过 &amp;lt;code&amp;gt;sessiontimeout&amp;lt;/code&amp;gt; 后需重新点击。&lt;br /&gt;
&lt;br /&gt;
=== 开启方法 ===&lt;br /&gt;
# 打开管理界面 → &amp;#039;&amp;#039;&amp;#039;设置（/settings）&amp;#039;&amp;#039;&amp;#039;页面。&lt;br /&gt;
# 找到&amp;#039;&amp;#039;&amp;#039;访客门户 Captive Portal&amp;#039;&amp;#039;&amp;#039; 开关，打开即可；关闭同理。启停结果和失败原因都会在页面上提示。&lt;br /&gt;
# 开启后约 10–15 秒内防火墙规则重建，新客户端可能短暂无法弹页，属正常现象，稍候重试即可。&lt;br /&gt;
&lt;br /&gt;
=== 注意事项 ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;访客必须通过 DHCP 获取地址&amp;#039;&amp;#039;&amp;#039;：手动配置静态 IP 的客户端会被 OpenNDS 拒绝（403 &amp;quot;IP not allocated by dhcp&amp;quot;）。&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;HTTPS 无法被拦截重定向&amp;#039;&amp;#039;&amp;#039;：弹页依赖操作系统的 HTTP 探测。若没自动弹出，请手动访问任意 http:// 网站。&lt;br /&gt;
* 门户默认作用于 &amp;#039;&amp;#039;&amp;#039;br-lan&amp;#039;&amp;#039;&amp;#039;（含有线口）；生产环境建议为访客单独建一个 SSID/网络再启用。&lt;br /&gt;
* 与 Smart WAN 可&amp;#039;&amp;#039;&amp;#039;同时使用&amp;#039;&amp;#039;&amp;#039;：上行做别人门户的客户端、下行发布自己的门户，互不冲突。&lt;br /&gt;
* 管理页面、DNS 与系统更新域名（如 dl.photonicat.com）已加入&amp;#039;&amp;#039;&amp;#039;白名单（walled garden）&amp;#039;&amp;#039;&amp;#039;，认证前也可访问，避免把自己锁在门外。&lt;br /&gt;
&lt;br /&gt;
=== 命令行验证（SSH） ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ndsctl status          # 守护进程状态&lt;br /&gt;
ndsctl json            # 客户端及认证状态（authenticated / preauthenticated）&lt;br /&gt;
nft list ruleset | grep -i nds    # 查看门户防火墙规则&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
反向验证：第二台&amp;#039;&amp;#039;&amp;#039;未点击同意&amp;#039;&amp;#039;&amp;#039;的设备应无法访问互联网（https 站点超时），直到它也完成点击。&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
&lt;br /&gt;
=== How it works ===&lt;br /&gt;
* Built on &amp;#039;&amp;#039;&amp;#039;OpenNDS&amp;#039;&amp;#039;&amp;#039; (the maintained successor of nodogsplash), running natively on the fw4/nftables firewall.&lt;br /&gt;
* When a guest device (iPhone/Android/Windows) joins, the OS&amp;#039;s connectivity probe &amp;#039;&amp;#039;&amp;#039;auto-pops&amp;#039;&amp;#039;&amp;#039; the login sheet; tapping &amp;#039;&amp;#039;&amp;#039;Agree &amp;amp; Connect&amp;#039;&amp;#039;&amp;#039; authorizes that device&amp;#039;s MAC.&lt;br /&gt;
* Current mode is &amp;#039;&amp;#039;&amp;#039;click-through&amp;#039;&amp;#039;&amp;#039; (no credentials); the splash is Photonicat-branded and &amp;#039;&amp;#039;&amp;#039;authorizes on the first tap&amp;#039;&amp;#039;&amp;#039; — no stranded intermediate pages.&lt;br /&gt;
* Sessions are per-MAC and expire after &amp;lt;code&amp;gt;sessiontimeout&amp;lt;/code&amp;gt;, requiring a fresh tap.&lt;br /&gt;
&lt;br /&gt;
=== Enabling ===&lt;br /&gt;
# Open the manager UI → &amp;#039;&amp;#039;&amp;#039;Settings (/settings)&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Toggle &amp;#039;&amp;#039;&amp;#039;Captive Portal&amp;#039;&amp;#039;&amp;#039; on or off; the page reports success and surfaces start/stop failures with reasons.&lt;br /&gt;
# For ~10–15 s after enabling, nftables rules are rebuilding and new clients may briefly fail to get the splash — normal, just retry.&lt;br /&gt;
&lt;br /&gt;
=== Caveats ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Guests must use DHCP&amp;#039;&amp;#039;&amp;#039;: static-IP clients are rejected by OpenNDS (403 &amp;quot;IP not allocated by dhcp&amp;quot;).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;HTTPS cannot be intercepted&amp;#039;&amp;#039;&amp;#039;: the popup relies on the OS HTTP probe. If no sheet appears, browse any http:// site manually.&lt;br /&gt;
* The portal gates &amp;#039;&amp;#039;&amp;#039;br-lan&amp;#039;&amp;#039;&amp;#039; by default (including wired ports); for production, prefer a dedicated guest SSID/network.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Coexists with Smart WAN&amp;#039;&amp;#039;&amp;#039;: captive client upstream, captive gateway downstream at the same time.&lt;br /&gt;
* The admin UI, DNS and update domains (e.g. dl.photonicat.com) are &amp;#039;&amp;#039;&amp;#039;walled-garden allowed&amp;#039;&amp;#039;&amp;#039; pre-auth, so you can&amp;#039;t lock yourself out.&lt;br /&gt;
&lt;br /&gt;
=== CLI verification (SSH) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ndsctl status          # daemon state&lt;br /&gt;
ndsctl json            # clients and auth state (authenticated / preauthenticated)&lt;br /&gt;
nft list ruleset | grep -i nds    # portal firewall rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Negative test: a second device that has &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; tapped Agree must fail to reach the internet (https times out) until it does.&lt;br /&gt;
&lt;br /&gt;
[[Photonicat 2 Smart WAN 智能上网]] ｜ [[Photonicat 2 管理界面新功能 (2026)]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
</feed>