

























openNDS 是一个高性能、轻量级的强制门户(Captive Portal)解决方案。它的核心作用是在公共Wi-Fi网络中,作为一道“看门人”,在设备获得完整互联网访问权限之前,先向用户展示一个特定的登录或通知页面(也就是我们常说的“认证页”或“Splash Page”)。
具体来说,它的作用和价值体现在以下几个方面:
它主要扮演一个“边界控制网关”的角色,用于管理从公共局域网到互联网的访问。这个过程通常是自动触发的:
自动拦截:当你的手机或电脑连接到一个由openNDS管理的Wi-Fi网络时,几乎所有现代设备都会自动发起一个网络请求(Captive Portal Detection,CPD)。
展示页面:openNDS会识别并拦截这个请求,然后向你的设备推送一个“Splash Page”。
授予权限:你在页面上完成所需的操作(比如点击“继续”按钮、同意条款或输入凭证)后,才能获得完整的互联网访问权限。
为了适应不同场景,openNDS默认提供了两种简单的方式:
“点击继续”(Click to Continue):这是默认模式。用户连接网络后,只需点击一个按钮(比如“我同意条款”)即可上网,主要用于告知服务条款和记录基本设备信息。
用户名/邮箱登录(username/email-address login):用户需要输入用户名和邮箱地址才能继续。这种方式可以用于收集用户信息,便于后续统计或营销,同时也能记录访问日志。
openNDS的独特之处在于,它不仅仅是一个简单的页面显示工具,更是一个功能强大的开发平台,被设计为复杂认证系统的“引擎”。这得益于它提供的几个关键API:
Forward Authentication Service (FAS):这是最主要的认证服务。它允许你把认证页面放在一个独立的网络服务器上(可以是在路由器本地、局域网内,甚至是云端),从而实现高度定制化的登录逻辑。
PreAuth:可以看作是FAS的轻量级版本。认证页面直接由openNDS自带的web服务器生成,无需额外搭建独立服务器,非常适合那些硬件资源(如内存、闪存)有限的路由器。
BinAuth:一种后认证脚本。当用户认证成功后,可以触发执行一个自定义的脚本或程序,用于实现更复杂的后续操作,比如统计流量、设置带宽限制等。
openNDS源自一个叫NoDogSplash的老牌强制门户项目。后来开发者为了能更专注于开发和创新,决定将其拆分为两个项目:
openNDS:目标是开发定制化、功能丰富的强制门户解决方案,也就是现在我们在讨论的这个。
NoDogSplash:则专注于保持极简和轻量,以兼容硬件资源极其有限的旧设备。
所以,可以简单地把openNDS理解为NoDogSplash的“进化加强版”,它在易用性的基础上,提供了更广阔的开发和定制空间。
流量配额:支持对单个客户端设置上传和下载的数据总量配额,单位是KB。当客户端使用量超过配额后,会被强制下线,需要重新认证才能继续上网。
上下行限速:支持限制客户端的上下行速率,单位是Kb/s。它内置了动态令牌桶过滤器,允许客户端在短时间内突发高速传输(比如快速加载网页),但如果平均速率持续超过阈值,就会开始限速,从而实现“公平使用策略”。你还可以通过配置OpenWrt的SQM(智能队列管理)软件包来实现更精细的流量整形。
通过FAS集成Radius计费:这是可行的,主要通过以下两种方式实现:
FAS (Forward Authentication Service) 的三种级别:
级别 3 (fas_secure_enable=3):这是最标准的方式,使用Authmon守护进程。FAS可以决定每个客户端的配额和速率,并覆盖全局配置,是实现与Radius等外部认证系统集成的推荐路径。
级别 0, 1, 2:在这些级别下,也可以通过BinAuth脚本或ndsctl auth命令来传递并覆盖配额和速率值。
BinAuth (二进制认证) 脚本:BinAuth是openNDS内置的“后认证”脚本机制,在客户端认证、下线、配额用完等事件发生时被调用。通过编写自定义的BinAuth脚本,你可以:
动态下发策略:脚本可以解析从FAS传来的自定义变量,从而覆盖单个客户端的会话时长、数据速率和数据量配额。
响应配额事件:当客户端的下载或上传配额用尽时,BinAuth会收到downquota_deauth或upquota_deauth事件,此时脚本可以执行你定义的操作,比如与Radius服务器进行计费结算。
你可以通过编辑 /etc/config/opennds 文件来设置全局的流量配额和速率限制:
请注意:在openNDS的语境中,"上传"指的是客户端向互联网发送数据,"下载"指的是客户端从互联网接收数据。你可以在社区论坛找到更详细的讨论,例如关于配置配额后是直接断网还是降低速率的方案。
支持主流系统(Windows、Apple iOS、Android 等)的网络探测与认证门户(Captive Portal)检测流程,设备系统无需安装任何第三方软件。
当前的OpenNDS集成了preauthenticated_fqdn_list(预认证客户端的条件FQDN访问)功能,可以理解是一个白名单功能,用于在未登录的情况仅能访问指定URL的充值网站,反馈网站等,提升用户体验。


============ End
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。