1. Network Address Translation(网络地址转换)概述


  • 实现私有地址到公网地址的转换功能(私网地址无法在公网上路由)和隐藏私有地址(安全)
  • NAT 一般部署在接入公网的网关设备上
  • 「IP Header」「TCP/UDP Header」信息进行转换

    2. 实现方式


1)动态地址池/静态

  • 实现私有地址和公有地址的一对一、静态转换、动态转换
  • 一个公网 IP 只能分配给唯一且固定的内网主机「既转换 IP 地址,也转换 TCP/UDP 协议的端口号」
    • 缺点 ①
      • 整个的唯一公网地址全部被占用
      • 整个ip协议栈全部做了转换,既不安全也不实用(几乎用不着)
    • 缺点 ②
      • 静态 NAT 公网地址绝对不能和拨号地址相同(不能节约公网地址)

        2)接入互联网

        由内至外(先查找路由表,在进行 NAT 转换)

image.png

  • 实现多对一 、端口多路复用(PAT、NAPT)
    • 利用 ACL 来控制哪些内部地址可以进行地址转换,实现端口和地址的转换,通过使用“IP地址+端口号”的形式,使多个内网用户共用一个外网IP地址访问外网「既转换 IP,也转换 TCP/UDP 端口号」
    • 可以直接使用出接口的 IP 地址作为转换后的源地址「地址复用,所有的私网地址都转换为出接口 IP 地址」

      3)向互联网提供服务(变种)

      由外之内(先查找 NAT 表项,在查找路由表)

image.png

  • 根据报文的目的 IP 地址和端口号查找地址转换表项(静态 / Easy NAT 表项)

    4)双出口并对外提供web服务

    双出口并对外提供web服务.pdf

    3. NAT ALG 穿越


点到点网络的 NAT 穿越技术,主要解决 NAT 对应用层协议无法转换(无感知)的问题(例如 FTP 协议等,由于 NAT 只能对 IP 报文的头部地址和 TCP/UDP 头部的端口信息进行转换,所以这种特殊协议的报文不能被 NAT 转换)

1)NAT ALG 原理

NAT ALG 利用带有 ALG 功能的 NAT 设备对特定应用层协议的支持,当设备检测到新的连接请求时,先根据传输层端口信息判断是否为已知应用类型。如果判断为已知应用,则调用该应用协议的 ALG 功能对报文的深层内容进行检查。若发现任何形式表达的 IP 地址和端口信息,NAT 都会将这些信息同步进行转换,[并为这个新的连接建立一个附加的转换表项]

2)支持的NAT ALG穿越协议

支持的应用协议 做NAT转换的字段
DNS Response 报文中的 IP 和 Port
FTP
- Port Request 报文中载荷里的 IP 和 Port
- Passive Response 报文中载荷里的 IP 和 Port
SIP
- Request line
- From
- To
- Contact
- Via
- O
- Message body 的 C 字段地址和 M 字段的端口
- record-router
RTSP Setup/Reply OK 报文中的端口字段
PPTP 分 PPTP Client 在私网还是 PPTP Server 在私网两种场景
- PPTP Client 在私网:PPTP Server 在外网时,仅对 Client-Call-ID 进行端口替换
- PPTP Server 在私网:PPTP Client 在外网时,仅对 Server-Call-ID 进行端口替换