作为第 3 层设备的路由器如何在 PAT 中转换第 3 层设备的端口地址?

网络工程 路由器 纳特 第3层 第4层
2021-07-15 04:17:07

当我在阅读 PAT 即端口地址转换时。路由器被配置为将所有私有 IP 地址转换为一个公共 IP。由于路由器是第 3 层设备,它可以通过更改 IP 中的源 IP 来完成该转换标题。但是它是如何改变传输层报头中的端口号的。路由器可以做这种转换吗,它转换这些端口的依据是什么。

请帮我解决这个问题。如果我遗漏了什么或我走错了方向,请告诉我。

谢谢!

3个回答

您所说的 PAT,实际上是 NAPT(网络地址端口转换)。该术语由RFC 2663、IP 网络地址转换器 (NAT) 术语和注意事项定义

4.1.2. 网络地址端口转换 (NAPT)

NAPT 通过还翻译传输标识符(例如,TCP 和 UDP 端口号、ICMP 查询标识符)进一步扩展了翻译的概念。这允许将多个私有主机的传输标识符多路复用为单个外部地址的传输标识符。NAPT 允许一组主机共享一个外部地址。请注意,NAPT 可以与基本 NAT 结合使用,以便将外部地址池与端口转换结合使用。

对于从专用网络出站的数据包,NAPT 将转换源 IP 地址、源传输标识符和相关字段,例如 IP、TCP、UDP 和 ICMP 标头校验和。传输标识符可以是 TCP/UDP 端口或 ICMP 查询 ID 之一。对于入站数据包,将转换目标 IP 地址、目标传输标识符以及 IP 和传输标头校验和。

图 2 中的 NAPT 路由器可以配置为将源自 N-Pri 的会话转换为单个外部地址,例如 Addr-i。

很多时候,NAPT路由器的外部接口地址Addr-Nx被用作映射N-Pri的地址。

RFC 3022,传统 IP 网络地址转换器(传统 NAT)更详细。使用 NAPT,执行 NAT 的设备必须查看 UDP、TCP 和 ICMP 数据报,并且它也必须修改这些数据报。这涉及大量处理,并且是资源密集型的。

NAPT 实际上只适用于 UDP、TCP 和 ICMP。其他传输协议在 NAPT 方面存在问题,一些应用层协议可能会因 NAPT 而中断。IP 被认为是一种端到端协议,其中每个主机都有一个唯一的地址,而 NAPT 打破了 IP 模型。

2.2. NAPT概述

比如说,一个组织有一个私有 IP 网络和一个到服务提供商的 WAN 链接。专用网络的末节路由器在 WAN 链接上分配了一个全局有效地址,组织中的其余节点具有仅具有本地意义的 IP 地址。在这种情况下,可以允许专用网络上的节点在 NAPT 的帮助下使用单个注册的 IP 地址同时访问外部网络。NAPT 将允许将类型(本地 IP 地址、本地 TU 端口号)的元组映射到类型(注册的 IP 地址、分配的 TU 端口号)的元组。

此模型适合大多数小型办公室家庭办公室 (SOHO) 组使用单个服务提供商分配的 IP 地址访问外部网络的要求。通过为注册 IP 地址的每个服务 TU 端口静态映射本地节点,可以扩展此模型以允许入站访问。

在下面图 3 的示例中,存根 A 在内部使用 A 类地址块 10.0.0.0/8。服务提供商为末节路由器的 WAN 接口分配了一个 IP 地址 138.76.28.4。

                                 \ | /
                               +-----------------------+
                               |Service Provider Router|
                               +-----------------------+
                             WAN |
                                 |
             Stub A .............|....
                                 |
     ^{s=138.76.28.4,sport=1024, |  v{s=138.76.29.7, sport = 23,
     ^ d=138.76.29.7,dport=23}   |  v d=138.76.28.4, dport = 1024}
                     +------------------+
                     |Stub Router w/NAPT|
                     +------------------+
                       |
                       |  LAN
 --------------------------------------------
    |        ^{s=10.0.0.10,sport=3017, |  v{s=138.76.29.7, sport=23,
    |        ^ d=138.76.29.7,dport=23} |  v d=10.0.0.10, dport=3017}
    |                                  |
   +--+      +--+                    +--+
   |--|      |--|                    |--|
  /____\    /____\                  /____\
 10.0.0.1  10.0.0.2   .....        10.0.0.10

  Figure 3: Network Address Port Translation (NAPT) Operation

当存根 A 主机 10.0.0.10 向主机 138.76.29.7 发送 telnet 数据包时,它使用全局唯一地址 138.76.29.7 作为目的地,并将数据包发送到其主路由器。存根路由器有一个静态路由,用于子网 138.76.0.0/16,因此数据包被转发到 WAN 链路。但是,在转发数据包之前,NAPT 会将 IP 和 TCP 标头中的源地址 10.0.0.10 和源 TCP 端口 3017 的元组转换为全局唯一的 138.76.28.4 和唯一分配的 TCP 端口(例如 1024)。返回路径上的数据包经过类似的地址和 TCP 端口转换,用于目标 IP 地址和目标 TCP 端口。再次注意,这不需要更改主机或路由器。翻译是完全透明的。

在此设置中,只允许 TCP/UDP 会话并且必须源自本地网络。但是,有些服务(例如 DNS)需要入站访问。可能存在组织希望允许入站会话访问的其他服务。可以在存根路由器上静态配置众所周知的 TU 端口服务 [RFC 1700],以将其定向到专用网络中的特定节点。

除了 TCP/UDP 会话之外,除了 REDIRECT 消息类型之外,ICMP 消息也可能被 NAPT 路由器监视。ICMP 查询类型报文的转换类似于TCP/UDP 报文,即ICMP 报文头中的标识符字段将唯一映射到注册IP 地址的查询标识符。ICMP 查询消息中的标识符字段由查询发送方设置,并在来自查询响应方的响应消息中原封不动地返回。因此,NAPT路由器将(本地IP地址,本地ICMP查询标识符)的元组映射到(注册的IP地址,分配的ICMP查询标识符)的元组,以唯一标识来自任何本地主机的所有类型的ICMP查询。对 ICMP 错误消息的修改将在后面的部分中讨论,

在 NAPT 设置中,注册的 IP 地址与存根路由器 WAN 接口的 IP 地址相同,路由器必须确保区分源自自身的 TCP、UDP 或 ICMP 查询会话与源自节点上的节点的查询会话本地网络。假设所有入站会话(包括 TCP、UDP 和 ICMP 查询会话)都被定向到作为端节点的 NAT 路由器,除非目标服务端口静态映射到本地网络中的不同节点。

除了 TCP、UDP 和 ICMP 查询类型之外的会话根本不允许来自本地节点,由 NAPT 路由器提供服务。

您所缺少的是设计 Internet 协议的人所设想的路由器功能与盒子上标有“路由器”的现代设备的功能之间存在差异。

互联网创建者最初设想的路由器只关心第 3 层及以下。它将剥离特定于链路类型的报头(第 1/2 层),执行 IP 路由(第 3 层),然后为下一跳构建一组新的特定于链路类型的报头。

但是,包装盒上标有“路由器”字样的现代设备通常能做的远不止这些。他们可以并且确实实现了涉及检查和修改第 4 层标头的功能。

当路由器(或任何其他设备)进行静态 NAT动态 NAT 时,它只会检查数据包到第 3 层。

当一个路由器(或任何其它装置)是做一个静态PAT动态PAT,它必须检查的分组直到层4在这种情况下,路由器的确做不是“只是第3层”的处理。

路由第 3 层的功能,传统上为处理路由而创建的设备是路由器。但是,路由器不仅限于L3 处理。如果他们正在更改端口,则他们已跨入第 4 层区域。