Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
ISO/IEC 29341-26-2标准规定了WANConnectionDevice:1模板,作为WANDevice的子设备,用于建模单个逻辑WAN连接上下文。每个WANConnectionDevice实例对应一个活动或可配置的连接会话——例如PPPoE隧道、通过DHCP的直接IP连接或纯桥接模式。该模板使UPnP控制点能够独立枚举、配置和监控各个WAN连接。
每个WANConnectionDevice嵌入一个或多个WAN连接服务,最重要的是WANIPConnection(用于IP路由连接)或WANPPPConnection(用于PPP隧道连接)。设备类型URN为urn:schemas-upnp-org:device:WANConnectionDevice:1。
WANConnectionDevice:1模板定义了支持三种基本WAN连接类型的灵活架构。每种类型映射到实现相应连接协议的特定服务:
| 连接类型 | 服务 | 典型用例 | 协议层 |
|---|---|---|---|
| IP路由 | WANIPConnection:1 | 电缆调制解调器、光纤(DHCP分配IP) | 三层(IP) |
| PPP隧道 | WANPPPConnection:1 | DSL(PPPoE或PPPoA) | 二层(PPP over Ethernet/ATM) |
| 桥接 | WANIPConnection(桥接模式) | 调制解调器透传、透明桥接 | 二层(以太网桥接) |
WANConnectionDevice为这些服务提供宿主容器。它还包含WANCommonInterfaceConfig服务,暴露特定于该连接接口的物理层参数。服务导出的状态变量包括ConnectionStatus(Connected、Disconnected、Connecting)、Uptime(建立连接后的秒数)和AutoDisconnectTime(空闲超时阈值)。
ConnectionType状态变量的不当处理。某些网关允许在运行时更改连接类型(例如从PPPoE切换到IP路由),但这需要拆除现有连接并重新初始化整个网络协议栈。实现必须确保在切换连接类型之前,所有活动端口映射和NAT会话被优雅终止。实践中,WANConnectionDevice:1实现因硬件平台而异。在运行Linux固件的高端路由器上,UPnP守护进程(如miniupnpd或linux-igd)直接与内核的netlink接口交互以查询连接状态和配置NAT规则。在资源受限的嵌入式系统上,UPnP协议栈可能运行在独立的轻量级进程中,通过Unix域套接字或共享内存与主路由守护进程通信。
最重要的工程考虑因素之一是连接状态变更的事件通知性能。当WAN连接断开并重新连接时,WANConnectionDevice必须为所有订阅的控制点生成GENA事件通知。如果事件负载很大(包括更新的端口映射表、DNS服务器地址和连接指标),XML序列化开销可能将通知延迟数百毫秒。工程师应实现增量事件通知,仅在事件负载中包含已更改的状态变量。
GetGenericPortMappingEntry动作虽然在技术上属于WANIPConnection服务,但通常在WANConnectionDevice级别进行缓存,以提供跨多个连接的原子端口映射枚举。领先的实现维护一个以(RemoteHost、ExternalPort、Protocol)元组为键的哈希表,实现对入站连接匹配的O(1)查找和所有映射的O(n)枚举。另一个关键设计决策是DNS服务器信息的处理。WANConnectionDevice将DNSServers公开为逗号分隔的IP地址字符串。一些住宅网关转发通过DHCP或PPP IPCP从ISP接收的DNS服务器,而其他网关运行本地DNS代理(例如dnsmasq)并将网关的LAN IP作为DNS服务器广播。前者实现简单,但将客户端暴露于ISP DNS提供商的变动;后者通过缓存提高性能,但需要额外配置。
SetConnectionType)应受适当的访问控制保护。UPnP规范并未强制要求设备控制进行身份验证,因此实现必须依赖网络层过滤来限制UPnP SOAP请求仅限于可信的LAN接口。在WAN接口上暴露WANConnectionDevice控制端点是一个严重的安全风险,已在多次大规模僵尸网络攻击中被利用。PortMappingEnabled变量通常设置为0,或者根据实现清除整个映射表。大多数网关在非易失性存储中持久化映射,并在连接重新建立时重新应用它们。