分类 NAT 下的文章

IPv6 安全性误解分析:NAT 并非安全特性

一、新闻概述

1. 标题

IPv6 is not insecure because it lacks a NAT

2. 发布时间

2026 年 1 月 20 日

3. 来源

John Maguire 个人博客

二、核心内容

1. 事件摘要

A. 主要内容

作者针对一种常见误解进行澄清:有人认为 IPv4 比 IPv6 更安全,因为 IPv4 默认使用 NAT(网络地址转换),从而获得了默认拒绝的安全策略。

B. 核心观点

  • NAT 不是安全特性,而是地址 conservation 机制
  • 人们误以为的安全效益实际来自有状态防火墙
  • 现代路由器默认配置防火墙规则,无论是否使用 NAT
  • IPv6 同样可以通过防火墙实现安全防护

2. 关键信息

A. 涉及技术

  • IPv4、IPv6
  • NAT(Network Address Translation)
  • 有状态防火墙(Stateful Firewall)
  • UniFi 路由器

B. 核心误解

NAT 的默认拒绝特性被误认为是安全功能

三、详细报道

1. 问题背景

A. 常见误解

有人认为:IPv4 的 NAT 默认特性带来了默认拒绝的安全策略,因此比 IPv6 更安全。

B. 根本混淆点

将 NAT(网络地址转换)与安全混为一谈。

2. NAT 的本质

A. 设计目的

NAT 是地址 conservation 机制,因为 IPv4 地址耗尽而成为必要手段。

B. 工作原理

NAT 允许家庭网络中的多个设备共享一个公网 IP 地址,通过根据目标端口重写数据包的目标 IP 来实现。

C. 端口映射

NAT 根据网络管理员配置的端口映射或端口转发规则选择新的目标 IP。

D. 副作用

当接收到发往 NAT IP 的入站流量时,具有意外目标端口(未被转发)的数据包将保持公网机器的目标 IP,不会被路由到网络中的其他机器。

3. 真正的安全来源

A. 有状态防火墙

人们归于 NAT 的安全效益实际上来自通常与 NAT 路由器捆绑的有状态防火墙。

B. 现代路由器默认策略

现代路由器配备的防火墙策略默认拒绝入站流量,即使不使用 NAT 时也是如此。

防火墙会在考虑是否重写或路由数据包之前,丢弃具有意外目标的数据包。

C. UniFi 路由器示例

UniFi 路由器默认的 IPv6 防火墙规则:

  • 允许已建立/相关的流量(出站返回流量)
  • 阻止无效流量
  • 阻止所有其他流量
graph TD
    A[入站数据包] --> B{有状态防火墙}
    B -->|已建立连接| C[允许通过]
    B -->|新连接| D{端口规则?}
    D -->|已转发| E[NAT 重写]
    D -->|未转发| F[丢弃数据包]
    E --> G[内部设备]
    C --> G
    F --> H[默认拒绝]

IPv6 防火墙与 NAT 工作流程

4. IPv6 安全配置

A. 主动允许规则

要允许发往路由器后托管的任何 IPv6 设备的未经请求的入站流量,必须显式添加防火墙规则以允许流量,无论是否使用 NAT。

B. 默认安全策略

IPv6 路由器的默认防火墙规则提供了与 IPv4 NAT 相同的安全级别:

  • 默认拒绝所有入站连接
  • 允许出站连接的响应流量
  • 阻止无效或恶意数据包

四、影响分析

1. 行业影响

A. 技术认知

澄清 NAT 与安全的关系,有助于正确理解网络安全架构。

B. IPv6 推广

消除对 IPv6 安全性的误解,有利于 IPv6 的推广和部署。

2. 用户影响

A. 安全实践

用户应该关注防火墙配置,而非依赖 NAT 提供的安全错觉。

B. 迁移建议

  • 从 IPv4 迁移到 IPv6 时,确保正确配置防火墙规则
  • 不要因为缺乏 NAT 而认为 IPv6 不安全

3. 技术趋势

A. 防火墙优先

安全策略应基于有状态防火墙,而非 NAT 的副作用。

B. IPv6 可行性

IPv6 完全可以通过防火墙实现与 IPv4 NAT 相同的安全级别。

五、各方观点

1. 作者观点

  • NAT 不是安全特性,而是地址 conservation 机制
  • 安全来自有状态防火墙,而非 NAT
  • IPv6 可以通过防火墙实现同等安全

2. 业内共识

网络安全社区普遍认为 NAT 的安全效益是副作用,而非设计目标。

六、技术总结

1. 关键要点

  • NAT 的设计目的是地址 conservation,而非安全
  • 真正的安全来自有状态防火墙
  • IPv6 同样可以通过防火墙实现安全防护
  • 默认拒绝策略应该通过防火墙规则实现,而非依赖 NAT

2. 最佳实践

  • 使用有状态防火墙作为主要安全机制
  • 正确配置防火墙规则,默认拒绝入站流量
  • 不要将 NAT 视为安全特性
  • IPv6 部署时确保防火墙规则正确配置

参考资料

  1. IPv6 is not insecure because it lacks a NAT

CGNAT 普及:运营商级 NAT 技术延缓了对公网 IPv4 地址的需求

一、背景与目标

1. 项目背景

A. 业务场景

随着互联网用户数量持续增长和物联网设备爆炸式增加,IPv4 地址池已接近枯竭。区域性互联网注册机构(RIR)早在 2011 年就分配完了最后一个 /8 的 IPv4 地址块。面对这一挑战,互联网服务提供商(ISP)需要一种既能维持现有服务,又能延缓 IPv4 地址耗尽时间的过渡方案。

B. 痛点分析

  • 公网 IPv4 地址资源稀缺,申请新地址成本高昂
  • 直接向 IPv6 迁移需要升级大量网络设备和用户终端
  • 部分应用和用户仍依赖 IPv4 连接
  • 运营商需要平衡成本与用户体验

2. 设计目标

A. 功能目标

通过运营商级 NAT 技术,实现多个用户共享少量公网 IPv4 地址,有效延长 IPv4 地址池的使用寿命。

B. 非功能目标

  • 地址复用率:达到 35:1 甚至更高
  • 并发连接数:支持海量并发连接处理
  • 可追溯性:完整的日志记录以满足合规要求
  • 可扩展性:支持平滑扩容以应对用户增长

二、现状分析

1. 现有系统

A. 传统 NAT 模型

传统网络架构中,用户家庭路由器执行一次 NAT 转换,将私有 IP 地址(如 192.168.x.x)映射到运营商分配的公网 IPv4 地址。这种 1:1 的映射方式每个用户需要一个独立的公网 IP。

B. 存在问题

  • IPv4 地址空间有限,约 43 亿个地址无法满足全球需求
  • 公网 IPv4 地址价格持续上涨
  • 部分地区用户无法获得公网 IP

2. 改进需求

在运营商层面引入第二层 NAT,使多个用户共享一个公网 IPv4 地址,从而大幅降低对公网 IP 的需求。

三、总体设计

1. 设计原则

  • 透明性:对大多数互联网应用透明,无需用户端修改
  • 可扩展性:支持大规模用户接入
  • 可追溯性:保留完整的地址转换日志
  • 渐进式:作为 IPv4 向 IPv6 迁移的过渡方案

2. 系统架构

graph TB
    subgraph 用户网络
        A1[用户A设备 192.168.1.100]
        A2[家庭路由A NAT]
        B1[用户B设备 192.168.1.100]
        B2[家庭路由B NAT]
    end

    subgraph 运营商网络
        C1[私网地址 100.64.0.0/10]
        C2[CGNAT设备 LSN]
        C3[公网IP池 共享地址]
    end

    subgraph 互联网
        D[目标服务器]
    end

    A1 -->|NAPT| A2
    B1 -->|NAPT| B2
    A2 -->|私网IP:端口| C1
    B2 -->|私网IP:端口| C1
    C1 -->|端口块分配PBA| C2
    C2 --> C3
    C3 --> D

    E[IPv6公网 直接访问]
    E --> D

    style A1 fill:#e1f5fe
    style B1 fill:#e1f5fe
    style C2 fill:#fff3e0
    style C3 fill:#ffebee
    style E fill:#e8f5e9

mermaid

CGNAT 网络架构图

3. 组件说明

  • 用户设备:使用私有 IP 地址(如 192.168.x.x)
  • 家庭路由:执行第一层 NAT,将用户设备映射到运营商分配的私网地址
  • CGNAT 设备:运营商级 NAT 设备,执行第二层地址转换
  • 公网 IP 池:多个用户共享的少量公网 IPv4 地址
  • IPv6 直连:部分运营商同时提供 IPv6 公网地址,无需 CGNAT

四、详细设计

1. 核心技术

A. CGNAT 定义

CGNAT(Carrier-Grade NAT),也称为大规模 NAT(Large-Scale NAT,LSN),是一种在互联网服务提供商层面部署的网络地址转换技术。其核心是允许多个用户共享同一个公网 IPv4 地址访问互联网。

B. 技术标准

CGNAT 的核心规范定义在 RFC 6888 中,该标准规定了运营商级 NAT 的通用要求,包括:

  • 地址和端口转换规则
  • 日志记录要求
  • 端口分配策略
  • 可扩展性要求

C. 关键特性

  • 大规模 IP 地址转换:可处理海量并发连接
  • 高吞吐量:支持运营商级别的数据流量
  • 快速 NAT 转换设置率:能够快速建立地址转换规则
  • 高速日志记录:记录所有转换活动用于审计

2. 过渡技术对比

A. NAT444 架构

NAT444 是一种使用三层 IPv4 地址的网络模型:

  • 第一层:用户设备私有地址(192.168.x.x)
  • 第二层:运营商私网地址(100.64.0.0/10,RFC 6598 定义的运营商级 NAT 地址)
  • 第三层:公网 IPv4 地址

这种架构在用户和互联网之间建立了两层 NAT,因此称为 NAT444。

B. DS-Lite(Dual-Stack Lite)

DS-Lite 是一种结合了隧道技术和 NAT 的过渡方案:

graph LR
    subgraph NAT444架构
        A1[用户设备 IPv4私网]
        A2[家庭路由 NAT]
        A3[运营商CGN NAT]
        A4[公网IPv4]
    end

    subgraph DS_Lite架构
        B1[用户设备 双栈]
        B2[B4 隧道端点]
        B3[IPv6隧道网络]
        B4[AFTR NAT网关]
        B5[公网IPv4]
    end

    A1 --> A2 --> A3 --> A4
    B1 --> B2 -->|IPv4 over IPv6| B3 --> B4 --> B5

    C[优势 简单部署]
    D[优势 促进IPv6]

    A --> C
    B --> D

    style A fill:#fff3e0
    style B fill:#e8f5e9

mermaid

过渡技术对比图

DS-Lite 的关键组件:

  • B4(Basic Bridging BroadBand):用户端设备,负责将 IPv4 数据包封装到 IPv6 隧道中
  • AFTR(Address Family Transition Router):运营商端隧道终结器,执行 NAT 转换

C. 技术选型对比

技术方案优势劣势适用场景
NAT444部署简单,对现有网络改动小双层 NAT 增加复杂性,可能影响 P2P 应用IPv4 为主,IPv6 尚未普及的地区
DS-Lite促进 IPv6 部署,单层 NAT需要运营商网络支持 IPv6IPv6 基础设施完善的地区

3. 端口分配策略

A. 端口块分配(PBA,Port Block Allocation)

CGNAT 采用端口块分配算法,为每个用户分配一组端口而非单个端口。例如:

  • 一个公网 IP 的 1024-65535 端口范围可划分为多个端口块
  • 每个用户分配一个端口块(如 1000 个端口)
  • 用户可自由使用其端口块内的端口

B. 地址复用率

根据 F5 的技术文档,LSN 资源池可实现高达 35:1 的回报率,即一个公网 IP 可服务 35 个用户。具体复用率取决于:

  • 用户平均并发连接数
  • 端口块大小配置
  • 用户行为模式

五、技术影响

1. 对用户的影响

A. 正面影响

  • 降低互联网接入成本(运营商节省 IP 成本可能传递给用户)
  • 更容易获得互联网接入服务
  • 配合 IPv6 部署,可获得真正的公网地址

B. 负面影响

  • 端口映射失效:用户无法从外网主动访问内网设备
  • P2P 应用受阻:BT 下载、在线游戏联机等应用体验下降
  • 服务器托管受限:无法在家中托管需要公网 IP 的服务

2. 对应用的影响

A. 受影响的应用类型

  • P2P 文件共享:BT、eMule 等
  • 在线游戏:依赖 P2P 连接的游戏
  • 远程访问:远程桌面、SSH 等
  • 物联网设备:需要外部访问的智能设备

B. 应对方案

  • 使用中继服务器:通过第三方服务器中转连接
  • 申请独立公网 IP:部分运营商提供付费公网 IP 服务
  • 使用 IPv6:通过 IPv6 建立端到端连接
  • VPN 隧道:通过 VPN 绕过 CGNAT 限制

3. 行业发展趋势

A. 中国运营商实践

中国三大运营商(中国电信、中国联通、中国移动)采用不同的 CGNAT 和 IPv6 部署策略:

  • 中国联通:专注于本地试点
  • 中国电信:专注于 IPv6 研发跟进
  • 中国移动:借助 TD-LTE 网络部署机会推进 IPv6

无锡等城市的城域网通过 NAT444 和 DS-Lite 技术实现规模部署,完成了 10 万双栈用户的网络改造。

B. IPv6 与 CGNAT 的关系

CGNAT 与 IPv6 并非相互排斥,而是互补的过渡方案:

  • CGNAT 解决短期 IPv4 地址短缺问题
  • IPv6 是长期解决方案
  • "IPv6 公网 + IPv4 私网(CGNAT)" 是当前主流的过渡期网络部署方案

六、实施考虑

1. 日志与合规

A. 日志记录要求

根据 RFC 6888 要求,CGNAT 必须记录以下信息:

  • 转换前后的 IP 地址和端口
  • 转换时间戳
  • 用户标识

B. 存储挑战

CGNAT 日志量巨大,需要考虑:

  • 日志压缩和归档策略
  • 快速检索能力
  • 符合数据保留法规要求

C. 实践经验

根据运营商实践经验,平均每条线路每 5 周约产生一个日志条目(通过 CPE 租约/续订和资源池重新平衡优化)。

2. 性能优化

A. 资源池管理

  • 动态资源池重新平衡
  • 基于用户需求的端口块分配
  • 空闲资源回收机制

B. 硬件要求

CGNAT 设备需要满足:

  • 高并发连接处理能力(百万级)
  • 快速 NAT 表查找
  • 高速网络接口(10G/40G/100G)

3. 监控与运维

A. 关键监控指标

  • 公网 IP 利用率
  • 端口块使用率
  • 并发连接数
  • 转换失败率

B. 告警规则

  • 端口池耗尽告警
  • 连接数超限告警
  • 设备资源使用告警

七、未来展望

1. 技术演进

A. 短期(1-3 年)

CGNAT 持续普及,成为运营商标准配置,配合 IPv6 部署提供双栈服务。

B. 中期(3-5 年)

IPv6 渗透率提升,CGNAT 主要服务于老旧设备和应用。

C. 长期(5 年以上)

IPv6 成为主流,CGNAT 逐渐退出历史舞台,但可能在特定场景长期存在。

2. 挑战与机遇

A. 挑战

  • 应用兼容性问题
  • 用户体验下降
  • 运维复杂度增加

B. 机遇

  • 加速 IPv6 普及
  • 促进新型网络架构发展
  • 推动应用层协议改进

八、总结

CGNAT 作为应对 IPv4 地址枯竭的过渡方案,通过在运营商层面部署大规模 NAT 技术,实现了多个用户共享公网 IP 的目标,可有效延缓 IPv4 地址耗尽时间。虽然 CGNAT 带来了端口映射受限、P2P 应用受阻等问题,但配合 IPv6 的部署,为互联网向下一代网络协议平滑演进提供了可行的路径。

对于用户而言,了解 CGNAT 的影响并选择合适的应对方案(如使用 IPv6、申请公网 IP、使用 VPN 等),可以最大程度减少 CGNAT 带来的不便。对于运营商而言,CGNAT 是平衡成本与服务的有效手段,但需要持续优化性能、完善日志管理、加速 IPv6 部署,以提供更好的服务质量。


参考资料

  1. RFC 6888 - Common Requirements for Carrier-Grade NAT - IETF 官方标准
  2. RFC 6333 - Dual-Stack Lite Broadband Deployments - IETF 官方标准
  3. 配置 CGNAT(运营商级 NAT)IP - Cisco - Cisco 技术文档
  4. 使用 BIG-IP CGNAT 提高网络可扩展性 - F5 - F5 技术文档
  5. 运营商级 NAT (CGN) 及其对 IPv4 枯竭的影响 - InterLIR - 技术分析文章
  6. 什么是运营商级 NAT (CGNAT)?- 阿里云开发者社区 - 技术介绍
  7. 电信级 NAT - 维基百科 - 百科资料
  8. CGN 技术白皮书 - 新华三集团 - 厂商白皮书

Docker默认网络NAT映射的分配与过滤行为技术分析

一、问题提出

1. 核心问题

Docker容器网络使用NAT(网络地址转换)实现容器与外部网络的通信。在实际应用场景中,特别是在WebRTC等P2P通信场景中,了解NAT的具体类型对于穿透策略的选择至关重要。

2. 研究目标

通过实验验证方式,确定Docker默认网络NAT的具体类型,包括:

  • 端口分配行为:NAT如何为内部主机分配外部端口
  • 过滤行为:NAT如何处理和过滤入站数据包

3. 研究意义

  • 为Docker容器的网络通信提供理论依据
  • 为NAT穿透策略的制定提供参考
  • 帮助开发者理解容器网络的底层机制

二、NAT类型分类概述

1. 传统分类(RFC 3489)

RFC 3489将NAT分为四种传统类型:

  • 全锥形NAT(Full Cone NAT)
  • 受限锥形NAT(Restricted Cone NAT)
  • 端口受限锥形NAT(Port Restricted Cone NAT)
  • 对称NAT(Symmetric NAT)

2. 基于行为的分类(RFC 4787)

RFC 4787提出了更科学的分类方法,从两个维度描述NAT行为:

A. 端口分配行为

  • Endpoint-Independent Mapping:端点无关映射
  • Address-Dependent Mapping:地址依赖映射
  • Address and Port-Dependent Mapping:地址和端口依赖映射

B. 过滤行为

  • Endpoint-Independent Filtering:端点无关过滤
  • Address-Dependent Filtering:地址依赖过滤
  • Address and Port-Dependent Filtering:地址和端口依赖过滤

三、实验环境设计

1. 网络拓扑

实验环境由两台主机组成,拓扑结构如下:

graph TB
    subgraph Host124["主机 192.168.0.124"]
        Docker0[docker0 虚拟网桥<br/>172.17.0.1]
        Container1[client1 容器<br/>172.17.0.5<br/>nat-hole-puncher]
        Docker0 --> Container1
    end

    subgraph Host125["主机 192.168.0.125"]
        UDP1[udp-client-addr-display<br/>监听 6000/6001]
        NC[nc 工具<br/>源端口 6000/6001/6002]
    end

    Container1 -->|UDP 出站| UDP1
    NC -->|UDP 入站| Docker0
    Docker0 -->|转发| Container1

实验网络拓扑图

2. 组件说明

  • 主机124:运行Docker容器,容器内运行nat-hole-puncher程序
  • 主机125:运行udp-client-addr-display程序和nc工具
  • NAT设备:主机124上的Docker默认NAT

3. 测试工具

  • nat-hole-puncher:Docker容器内的UDP打洞程序
  • udp-client-addr-display:显示客户端地址的服务程序
  • nc(netcat):网络测试工具

四、实验程序实现

1. 交互流程

三个组件的交互流程设计如下:

sequenceDiagram
    participant Puncher as nat-hole-puncher<br/>(容器内)
    participant Display as udp-client-addr-display<br/>(主机125)
    participant NC as nc 工具<br/>(主机125)

    Puncher->>Display: 发送UDP到 6000端口
    Display-->>Puncher: 返回NAT映射地址<br/>192.168.0.124:5000
    Puncher->>Display: 发送UDP到 6001端口

    Note over Display: 获取NAT映射后的源地址

    NC->>Puncher: 从 6000 端口发送UDP
    Puncher-->>NC: 接收成功
    NC->>Puncher: 从 6001 端口发送UDP
    Puncher-->>NC: 接收成功
    NC->>Puncher: 从 6002 端口发送UDP
    Note over Puncher,NC: 数据包被NAT过滤丢弃

NAT打洞验证流程图

2. nat-hole-puncher程序

该程序的主要功能:

  1. 从指定本地地址向目标地址发送UDP数据包
  2. 在NAT上创建映射关系(打洞)
  3. 监听本地端口,接收入站UDP数据包

核心实现逻辑:

  • 使用net.DialUDP建立UDP连接
  • 向目标IP的连续两个端口发送数据包
  • 使用net.ListenUDP监听本地端口

3. udp-client-addr-display程序

该程序的主要功能:

  1. 同时监听两个连续的UDP端口
  2. 接收UDP数据包
  3. 显示发送端的IP地址和端口

核心实现逻辑:

  • 使用sync.WaitGroup并发启动两个监听协程
  • 每个协程监听一个UDP端口
  • 使用ReadFromUDP接收数据并显示客户端地址

五、实验步骤与结果

1. 端口分配行为验证

实验步骤

在主机124的容器中执行:

docker exec client1 /app/nat-hole-puncher 172.17.0.5 5000 192.168.0.125 6000

程序执行以下操作:

  1. 从172.17.0.5:5000向192.168.0.125:6000发送UDP包
  2. 从172.17.0.5:5000向192.168.0.125:6001发送UDP包

观察结果

主机125上的udp-client-addr-display输出:

Received message: Hello, World! from 192.168.0.124:5000
Received message: Hello, World! from 192.168.0.124:5000

进阶验证

为了确认是否为Address-Dependent Mapping,使用不同的目标IP进行测试:

向192.168.0.125发送:

docker exec client1 /app/nat-hole-puncher 172.17.0.5 5000 192.168.0.125 6000

向192.168.0.126发送:

docker exec client1 /app/nat-hole-puncher 172.17.0.4 5000 192.168.0.126 7000

两台主机的输出均显示NAT映射后的地址为192.168.0.124:5000。

结论

端口分配行为:Endpoint-Independent Mapping

无论目标IP和端口如何变化,只要源IP和端口相同,NAT就会分配相同的外部端口。

2. 过滤行为验证

实验步骤

在主机125上使用nc工具向NAT映射地址发送UDP包:

# 从6000端口发送
echo "hello from 192.168.0.125:6000" | nc -u -p 6000 -v 192.168.0.124 5000

# 从6001端口发送
echo "hello from 192.168.0.125:6001" | nc -u -p 6001 -v 192.168.0.124 5000

# 从6002端口发送
echo "hello from 192.168.0.125:6002" | nc -u -p 6002 -v 192.168.0.124 5000

观察结果

容器内nat-hole-puncher程序的输出:

Received message: hello from 192.168.0.125:6000 from 192.168.0.125:6000
Received message: hello from 192.168.0.125:6001 from 192.168.0.125:6001

从6002端口发送的包未被接收,被NAT过滤丢弃。

结论

过滤行为:Address and Port-Dependent Filtering

只有之前通信过的特定IP和端口组合才能成功穿透NAT发送数据包到内部网络。

六、综合分析

1. NAT类型判定

根据RFC 4787的行为分类:

行为维度Docker默认网络NAT类型
端口分配行为Endpoint-Independent Mapping
过滤行为Address and Port-Dependent Filtering

2. 传统类型对应

按照RFC 3489的传统NAT分类:

Docker默认网络的NAT属于端口受限锥形

端口受限锥形NAT的特征:

  • 映射关系:内部IP:端口到外部IP:端口的映射是固定的
  • 过滤规则:只有外部主机从之前通信过的端口发送的数据包才能通过

3. 实践建议

对于实际应用中的NAT类型检测,可以使用成熟工具如pystun3:

docker run -it python:3-alpine /bin/sh
pip install pystun3
pystun3

需要注意的是,此类工具的检测结果通常是多层NAT的综合结果,而非单一Docker NAT的行为。

七、技术要点总结

1. Docker NAT工作原理

Docker默认网络通过以下机制实现NAT:

  1. 创建虚拟网桥docker0
  2. 为容器分配内部IP地址(172.17.0.0/16网段)
  3. 使用iptables规则配置SNAT
  4. 将内部IP和端口转换为主机IP和随机端口

2. 关键发现

  • 端口分配的独立性:同一内部地址映射到固定的外部端口
  • 过滤的严格性:必须同时匹配IP和端口才能通过
  • 与对称NAT的区别:对称NAT会为不同目标分配不同端口

3. 对P2P应用的影响

对于WebRTC等P2P通信应用:

  • Docker容器内的应用可以进行NAT穿透
  • 需要使用STUN服务器获取公网地址
  • 穿透策略应考虑Address and Port-Dependent Filtering的限制
  • 可能需要使用TURN中继服务作为备选方案

参考资料

  1. 探索Docker默认网络NAT映射的分配与过滤行为
  2. RFC 3489 - STUN
  3. RFC 4787 - NAT Behavioral Requirements
  4. pystun3 - Python STUN Client

故障排除前先关闭这6个路由器默认设置

一、概述

1. 文档背景

随着家用路由器变得越来越强大,它们也配备了更智能的功能,让使用更加便捷,并为我们的联网设备提供更好的体验。但直到出现问题,你需要排查家庭网络故障时,这些高级功能反而可能成为阻碍,掩盖真正的问题根源。

2. 核心观点

在诊断网络问题时,应该暂时关闭这些默认功能,以便更清晰地了解问题所在。如果你的路由器有内容限制设置,如年龄限制或其他家庭限制,也应该关闭,或者至少在没有限制的新用户配置文件上进行测试。

二、需要关闭的六大默认设置

1. WPA3 安全协议

A. 问题描述

WPA3 是最新且最安全的 Wi-Fi 加密协议,使用 Wi-Fi 7 路由器或接入点时必须使用。尽管它在 2018 年就已获得认证,但仍存在大量兼容性问题,并非所有制造商都清除了其固件中的 bug。

B. 问题根源

许多问题源于 WPA2/WPA3 混合模式,该模式旨在让较老的无线设备在同一 SSID 上共存,但往往导致这些设备无法连接到接入点。

C. 解决方案

在故障排查时将设置更改为 WPA2。如果发现这样可以解决问题,就保持这种设置,或者考虑为仅支持 WPA3 的设备添加另一个 SSID。

2. DNS 重绑定保护

A. 功能说明

对于大多数家庭网络来说,DNS 重绑定保护是一件好事,因为它可以防止攻击者将你的 DNS 请求重定向到受损的网站。简单来说,它阻止 DNS 查询由本地 IP 地址响应。

B. 问题场景

如果你在使用 ISP 的 DNS 服务器、Quad9 或任何其他互联网可达的服务器,这个功能很有用。但如果你在进行自托管,可能有一些想要使用的本地可解析域名,并且可能运行自己的 DNS 服务器、Pi-hole 或类似服务。

C. 影响范围

启用 DNS 重绑定时,Pi-hole 将无法作为 DNS 服务器工作,你的自托管域名也无法解析。如果注意到这些问题,请在路由器上禁用 DNS 重绑定保护。

3. 服务质量(QoS)和流量整形

A. 工作原理

QoS、流量整形和 SQM 以类似的方式工作:通过各种优先级减少整个网络或单个设备的可用带宽。这可以防止一个视频流媒体设备占用所有可用容量。

B. 排查问题

在故障排查时,这些设置会给速度或延迟测试提供不准确的读数。

C. 操作建议

关闭这些功能进行故障排查,并记录测试的最大上传和下载速度,这些将是之后重新设置 QoS 时使用的上限值。

4. 频段引导

A. 设计理念

频段引导是一个很棒的功能,它使用各种技巧将客户端设备推送到最适合它们的 2.4GHz、5GHz 或 6GHz 频段,并尽可能让它们保持在那个频段上。

B. 实际问题

它经常让设备在较低范围的 5GHz 或 6GHz 频段上停留太久,而切换到 2.4GHz 频段会因距离路由器的距离而提供更稳定的连接。这通常看起来像随机的断开连接,但实际上并非如此。

C. 解决方案

制造商固件优化通常可以解决这个问题,但在故障排查时关闭它可以揭示它不适合你的家庭网络配置。

5. UPnP 和 NAT-PMP

A. 功能说明

UPnP 和 NAT-PMP 都是允许设备自动打开防火墙端口的方式。

B. 安全风险

显式控制允许哪些端口通过你的防御对网络来说更好,建议应该一直关闭这些功能。

C. 替代方案

现代设备和软件已经设计了其他处理连接性的方法,不需要永久打开端口。

D. 排查建议

如果在故障排查时注意到这些功能已启用,请关闭它们并保持关闭状态。它们只会掩盖端口转发的问题或创建你不知道的安全漏洞。

6. 空中时间公平性

A. 设计初衷

Wi-Fi 路由器倾向于优先考虑向后兼容性而非性能,使你在每次将路由器升级到新的 Wi-Fi 版本时不必升级所有设备。但这可能会导致你拥有的最新设备出现问题。

B. 工作机制

空中时间公平性旨在防止更快的客户端占用所有带宽,确保物联网设备和其他不支持更高性能 Wi-Fi 模式的设备有足够的空中时间。

C. 实际影响

在实践中,它会在连接的设备数量之间分割广播电波上的空中时间。这对你笔记本电脑或手机等快速设备的影响较小,但可能会让你的智能家居设备传输数据的时间更长。

D. 性能代价

这需要更多的处理能力,如果你的路由器已经过载,这可能成为一个问题。

E. 解决方案

如果发现那些慢设备是罪魁祸首,将它们移动到自己的网段、SSID 或 VLAN 会有所帮助,这样它们就不会与你拥有的快速通道设备混在一起。

graph TD
    A[网络故障排查] --> B{问题类型?}
    B --> C[连接问题]
    B --> D[速度问题]
    B --> E[自托管问题]
    B --> F[设备兼容性]

    C --> C1[关闭 WPA3<br/>使用 WPA2]
    C --> C2[关闭频段引导]

    D --> D1[关闭 QoS]
    D --> D2[关闭空中时间公平性]

    E --> E1[关闭 DNS 重绑定保护]

    F --> F1[关闭 UPnP/NAT-PMP]

    C1 --> G[测试连接]
    C2 --> G
    D1 --> H[记录最大速度]
    D2 --> H
    E1 --> I[测试自托管服务]
    F1 --> J[检查端口转发]

    G --> K[问题解决?]
    H --> K
    I --> K
    J --> K

    K -->|是| L[保持修改或逐个启用]
    K -->|否| M[深入排查其他原因]

网络故障排查流程图

三、故障排查后的操作

1. 逐个重新启用

既然你已经(希望)找到了导致网络问题的原因,现在是时候逐个重新启用这些设置,每个设置都给一点时间稳定后再启用下一个。

2. 安全例外

UPnP 可以保持关闭,因为它即使在最好的情况下也是一个安全问题。现代设备和软件已经设计了其他处理连接性的方法。

3. 带宽权衡

需要记住的是,启用的网络管理设置越多,设备通信的可用总带宽就越少。对于使用最新版本 Wi-Fi 的新型 Wi-Fi 路由器来说,这不应该是一个问题,但对于较老的广播设备,可能会降低网络的有效性。

4. 硬件升级

如果仍然有问题,且你的硬件使用时间超过五年左右,值得考虑升级到新路由器。


参考资料

  1. Disable these 6 router defaults before you troubleshoot your network

https://www.meiqiantu.com/977863.html

Nat类型

1. Full Cone NAT(简称NAT1):

所有来自同一 个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,而不管这些请求是不是属于同一个应用或者是多个应用的。除此之外,当X-Y的转换关系建立之后,任意外部主机均可随时将Y中的地址和端口作为目标地址 和目标端口,向内部主机发送UDP报文,由于对外部请求的来源无任何限制,因此这种方式虽然足够简单,但却不那么安全。

2. Restricted Cone NAT(简称NAT2):

它是Full Cone的受限版本:所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,这与Full Cone相同,但不同的是,只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z)后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部主机发送UDP请求报文,这意味着,NAT设备只向内转发(目标地址/端口转换)那些来自于当前已知的外部主机的UDP报文,从而保障了外部请求来源的安全性。

3. Port Restricted Cone NAT(简称NAT3):

它是Restricted ConeNAT的进一步受限版。只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z且端口为P)之后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部主机发送UDP报文,同时,其请求报文的源端口必须为P,这一要求进一步强化了对外部报文请求来源的限制,从而较Restrictd Cone更具安全性。

4. Symmetric NAT(简称NAT4):

这是一种比所有Cone NAT都要更为灵活的转换方式:在Cone NAT中,内部主机的内部Tuple与外部Tuple的转换映射关系是独立于内部主机所发出的UDP报文中的目标地址及端口的,即与目标Tuple无关。

上面是我百度出来,反正只要认为nat1是最好的就行,根据我的经验来说,像爱快,高恪之类的软路由都是nat4,。Lede可以nat1,而平常普通路由拨号的nat类型为3,刷高恪和openwrt就可以做到nat1。当然只要你路由器做了dmz也是可以变成nat1,但是这个只能指定内网的一个主机,你多台的就不行。那nat1对提高收益有帮助吗?对此,我还专门做了测试,拿出矿渣newifi3,编译了对应的openwrt固件,感谢lean大雕的源码,开始挂上,做为期几天的测试,结论是确实可以提高收益,而且对p2p游戏下载啥的也有帮助。