NAT 系列:问题及解决方法

NAT 引发的问题以及解决方法

对称型 NAT(Symmetric NAT)在游戏联机(尤其是 P2P 联机)时经常会造成问题。当你在 Xbox、PS、Switch 或 PC 上看到 NAT 类型显示为"严格"、“类型 3”、“类型 D"或"对称"时,很可能会遇到联机困难。

首先需要理解的是,设备本身无法感知它们是否经过 NAT 转换。在互联网上,所有通信都需要使用公共 IP 地址(如 1.1.1.1)。在进行连接时,必须知道目标的公共 IP 地址和端口。

在常规网络通信中(如访问网站),服务器的 IP 地址和端口是固定的,不会改变。但在游戏等应用中,程序可能会使用动态端口。例如:

  1. 你的主机选择一个随机端口用于游戏连接

  2. 其他玩家需要知道你的 IP 地址和端口才能连接

  3. 你的主机会将这些信息发送到游戏服务器(如 Xbox Live 或 PS Network)

  4. 问题在于:

    • 发送的是内部 IP(如 192.168.0.1)和端口(如 54324
    • 而不是 NAT 转换后的公共 IP(如 1.1.1.1)和端口
    • 在对称型 NAT 中,端口会被随机改变(如从 54324 变为 54254

这不仅是游戏的问题,而是 NAT 的普遍问题。

关键问题是:设备如何知道自己位于 NAT 后面,以及如何告知其他设备使用正确的 NAT 转换后的地址和端口?

STUN 是一套帮助设备穿越 NAT 的工具集。它的主要功能是:

  • 让内部设备了解其公共 NAT 的 IP 地址和端口
  • 使设备能够发送正确的连接信息给其他设备

工作原理:

  1. 设备连接到 STUN 服务器(如 Xbox Live 服务器)
  2. 服务器读取收到的数据包中的源 IP 和端口(这是 NAT 转换后的信息)
  3. 服务器将这些信息返回给客户端
  4. 设备现在知道了自己的公网地址和端口
STUN 工作流程

STUN 的局限性:

  • 在对称型 NAT 中无法正常工作

  • 原因:

    • 对称型 NAT 为每个连接创建不同的映射
    • STUN 服务器获得的端口信息只对该连接有效
    • 其他连接会使用不同的随机端口
    • 无法预知这些随机端口

DMZ 是一种网络配置方案,用于减少对互联网访问的限制:

  • 将设备放置在网络防火墙外的区域

  • 创建特定的子网用于提供对外服务

  • DMZ 中的主机可以:

    • 与 DMZ 内的其他主机通信
    • 与外部网络通信
    • 与内部网络的通信受到限制

这种配置的优点是:

  • 可以被内部和外部网络访问
  • 保护内部网络的安全
  • 适合需要对外提供服务的设备

UPnP 是一种网络协议,允许网络设备自动发现彼此并建立功能性网络服务。在 NAT 穿透方面,UPnP 提供了以下功能:

  • 自动端口映射:应用程序可以自动请求路由器开放所需端口
  • 动态配置:无需手动设置端口转发规则
  • 即插即用:设备可以自动发现并配置网络服务

工作流程:

  1. 应用程序向路由器发送端口映射请求
  2. 路由器验证请求并创建相应的映射规则
  3. 应用程序获得确认,开始使用映射的端口
  4. 当应用程序关闭时,映射规则自动删除

适用场景:

  • 在线游戏
  • P2P 应用
  • 远程访问服务
  • 即时通讯软件
特性 STUN DMZ UPnP
配置难度 中等 简单 最简单
安全性 中等
适用 NAT 类型 除对称型外都支持 全部支持 全部支持
自动化程度 中等
资源消耗 中等
  • 确保使用可信的 STUN 服务器
  • 考虑启用 STUN over TLS
  • 定期更新 STUN 客户端软件
  • DMZ 主机完全暴露于互联网,风险较高
  • 建议:
    • 只放置必要的服务器
    • 启用主机防火墙
    • 定期更新系统和应用程序
    • 监控异常访问
  • 存在被恶意程序滥用的风险
  • 建议:
    • 只在可信网络中启用
    • 定期检查端口映射列表
    • 使用支持 UPnP 安全模式的路由器
    • 考虑禁用互联网侧 UPnP
  1. 家庭用户

    • 优先使用 UPnP(便捷性好)
    • 确保路由器固件为最新版本
    • 避免使用 DMZ 除非特别需要
  2. 小型企业

    • 优先考虑 STUN
    • 根据需要配置端口转发
    • 谨慎使用 UPnP
  3. 游戏玩家

    • 尝试顺序:UPnP > STUN > 端口转发 > DMZ
    • 选择支持 UPnP 的路由器
    • 必要时使用游戏专用路由器