如何现代化你的强制网络

如果你曾经在飞机上、咖啡馆或酒店里使用过 Wi-Fi,你可能很熟悉通过一套协议、观看广告或购买方案来上网的经历。这些“强制”网络是上网的重要方式,但往往会让人头疼。“我该如何进入登录页面?在我的流量用完之前,我还有多少时间?”

好消息:你可以通过 iOS 14 和 macOS Big Sur 让使用你的网络的人享有更流畅、更一致的上网体验。如果你要运行一个强制 Wi-Fi 网络,或者构建强制网络解决方案,现在是时候开始更新了——这里有你需要知道的一切。

宣传强制网络

一般而言,强制网络依靠拦截所连接的用户的流量。默认情况下,iOS 和 macOS 会在第一次加入你的网络时自动发送一个探针来检测这种拦截,并显示强制门户登录页面。然而,如果会话过期,这种拦截可能会干扰在 Safari 和其他 App 中访问的页面:Safari 可能会加载错误的页面,或者显示安全警告。

你可以通过在 iOS 14 和 macOS Big Sur 上集成 [Captive Portals 的 DHCP 或 IPv6 Router Advertisement(RA)选项](https://tools.ietf.org/html/draft-ietf-capport-rfc7710bis)为用户带来更好的体验。这些选项是新标准的一部分,让你的接入点在设备首次加入时宣传它是“强制的”,而不是依靠流量拦截

虽然对于传统的强制网络和采用这些标准的网络来说,体验看起来是一样的,但更新可以让你的网络以更可靠的方式将强制状态传达给用户的设备,并为标准支持的新功能奠定基础。

如果你的网络支持这些选项,iOS 和 macOS 将开始自动处理强制网络状态。在每个选项中都有一个 URL,以 JSON 的形式提供一个强制网络会话的状态。注意,如果你使用多种方法来宣传强制网络,如 DHCP 和 IPv6 RA,那么 URL 必须匹配。

```xml
DHCP Option: 114 (Captive-Portal)
    Length: 38
    Value: https://example.org/captive-portal/api

DHCPv6 Option: 103 (Captive-Portal)
    Length: 38
    Value: https://example.org/captive-portal/api

IPv6 RA Option: 37 (Captive-Portal)
    Length: 38
    Value: https://example.org/captive-portal/api

提供会话状态更新

当你采用这个标准时,你的强制网络还可以通过 [JSON API] (https://tools.ietf.org/html/draft-ietf-capport-api) 提供与设备连接的详细状态信息。这可以让设备知道它们是否可以访问互联网,向用户展示哪个网页,以及一个会话还剩多少时间。当你采用这个标准时,你的强制网络还可以通过 [JSON API] (https://tools.ietf.org/html/draft-ietf-capport-api) 提供与设备连接的详细状态信息。这可以让设备知道它们是否可以访问互联网,向用户展示哪个网页,以及一个会话还剩多少时间。

```json
HTTP/1.1 200 OK
Cache-Control: private
Date: Mon, 22 Jun 2020 05:08:13 GMT
Content-Type: application/captive+json
{
    "captive": false,
    "user-portal-url": "https://example.org/portal.html",
    "venue-info-url": "https://flight.example.com/entertainment",
    "seconds-remaining": 326,
    "can-extend-session": true
}
```

你的 Captive Portal API 服务器必须运行在一个有 TLS 加密的主机上。这可以确保你与客户端设备的通信不会被修改或拦截。

3,2,1,连接

如果你构建了强制网络解决方案,请开始支持最新的标准,以宣传你的强制网络并提供会话状态更新。用 iOS 14 和 macOS Big Sur 进行尝试。如果你的公司部署了强制网络门户,请联系你的路由器供应商,确保他们已经准备好为强制网络部署最新的标准。


Specification for Captive Portal Advertisement

Specification for Captive Portal JSON API

Manage captive Wi-Fi networks

NEHotspotHelper