本页内容
可确定的 NAT
确定性 NAPT 概述
您可以配置确定性 NAPT44,以确保原始源 IPv4 地址和端口始终映射到相同的 NAT 后 IPv4 地址和端口范围,并且给定转换的外部 IPv4 地址和端口的反向映射始终映射到相同的内部 IPv4 地址。您可以配置确定性 NAPT64,以确保原始源 IPv6 地址和端口始终映射到相同的 NAT 后 IPv4 地址和端口范围,并且给定转换的外部 IPv4 地址和端口的反向映射始终映射到相同的内部 IPv6 地址。确定性 NAPT 使用基于算法的目标端口块分配。
具有 MS-DPC 的 MX 系列路由器以及具有 MS-100、MS-400 和 MS-500 多服务 PIC 的 M Series 路由器支持确定性 NAPT44。从 Junos OS 版 17.3R1、Junos OS 版 14.2R7 和更高版本以及 Junos OS 版 15.1R3 和更高版本 15.1R3 和更高版本开始,MS-MPC 和 MS-MIC 支持确定性 NAPT 44。从 Junos OS 17.4R1 版开始,MS-MPC 和 MS-MIC 支持确定性 NAPT64。
如果确定性 NAPT 规则子句中的 from
源地址前缀为 /32,则不会转换源地址范围内的网络地址和广播地址,除非您配置 include-boundary-addresses
。
有关如何配置确定性 NAPT 的详细信息,请参阅配置确定性 NAPT。
确定性 NAPT 的优势
无需进行地址转换日志记录,因为 IP 地址始终映射到相同的外部 IP 地址和端口范围,并且给定转换后的外部 IP 地址和端口的反向映射始终映射到相同的内部 IP 地址。
了解确定性 NAPT 算法
确定性 NAPT 实施的有效性取决于对订阅者要求的分析。您提供的块大小表示在适用的 NAT 规则中指定的子句中的 from
范围内,将为每个传入订阅者地址提供多少个端口。分配算法计算偏移值以确定传出 IP 地址和端口。反向算法用于派生始发用户地址。
为了在不使用日志的情况下跟踪订阅者,ISP 必须使用反向算法从转换后的地址派生用户(源)地址。
以下变量用于正向计算(专用用户 IP 地址到公共 IP 地址)和反向计算(公共 IP 地址到专用用户 IP 地址):
Pr_Prefix — 任何 NAT 之前的 IPv4 订阅者地址。
Pr_Port — 任意 NAT 协议预备端口。
Block_Size — 配置为可用于每个Pr_Prefix的端口数。
如果
block-size
配置为零,则块大小的计算方法如下:块大小 = int(64512/ceil[(Nr_Addr_PR_Prefix/Nr_Addr_PU_Prefix)])
其中 64512 是每个公共 IP 地址的最大可用端口范围。
Base_PR_Prefix - NAT 规则子
from
句中第一个可用的 NAT 前 IPv4 订阅者地址。Base_PU_Prefix - NAT 池中配置的第一个可用的 NAT 后 IPv4 订阅者地址。
Pu_Port_Range_Start — 首个可用的 NAT 后端口。这是 1024。
Pr_Offset — NAT 规则的
from
子句中从第一个可用的 NAT 前 IPv4 订阅者地址转换的 NAT 前 IP 地址的偏移量。PR_Offset = Pr_Prefix – Base_Pr_Prefix。PR_Port_Offset — NAT 前 IP 地址的偏移量乘以块大小。PR_Port_Offset = Pr_Offset * Block_Size。
Pu_Prefix — 给定Pr_Prefix的 NAT 后地址。
Pu_Start_Port — 来自给定Pr_Prefix的流的 NAT 后启动端口
Pu_Actual_Port — 在反向流中看到的 NAT 后端口。
Nr_Addr_PR_Prefix — NAT 规则的
from
子句中可用的 NAT 前 IPv4 用户地址数。Nr_Addr_PU_Prefix — NAT 池中配置的可用 NAT 后 IPv4 地址数。
Rounded_Port_Range_Per_IP — 每个NAT 后IP地址的可用端口数。Rounded_Port_Range_Per_IP = ceil[(Nr_Addr_PR_Prefix/Nr_Addr_PU_Prefix)] * Block_Size。
Pu_Offset — NAT后IP地址与第一个可用NAT后地址的偏移量。Pu_Offset = Pu_Prefix – Base_Pu_Prefix。
Pu_Port_Offset — 将 NAT 后端口的偏移量从 1024 添加到 NAT 后 IP 地址的偏移量与每个 NAT 后 IP 地址的可用端口数的乘积中。Pu_Port_Offset = (Pu_Offset * Rounded_Port_Range_Per_IP) + (Pu_Actual_Port – Pu_Port_Range_Start)。
算法用法 - 假设以下配置:
services { nat { pool src-pool { address-range low 32.32.32.1 high 32.32.32.254; port { automatic { random-allocation; } deterministic-block-allocation { block-size 249; } } } rule det-nat { match-direction input; term t1 { from { source-address { 10.1.0.0/16; } } then { translated { source-pool src-pool; translation-type { deterministic-napt44; } } } }
前向转换
Pr_Offset = Pr_Prefix – Base_Pr_Prefix
Pr_Port_Offset = Pr_Offset * Block_Size
Rounded_Port_Range_Per_IP = ceil[(Nr_Addr_PR_Prefix/Nr_Addr_PU_Prefix)] * Block_Size
Pu_Prefix = Base_Public_Prefix + 楼层(Pr_Port_Offset / Rounded_Port_Range_Per_IP)
Pu_Start_Port = Pu_Port_Range_Start + (Pr_Port_Offset % Rounded_Port_Range_Per_IP)
使用示例配置并假设订阅者流源自 10.1.1.250:5000:
Pr_Offset = 10.1.1.250 – 10.1.0.1 = 505
Pr_Port_Offset = 505 * 249 = 125,745
Rounded_Port_Range_Per_IP = ceil[(65, 533/254)] * 249 = 259 * 249 = 64,491
Pu_Prefix = 32.32.32.1 + 地板(125,745 /64,491) = 32.32.32.1 +1 =32.32.32.2
Pu_Start_Port = 1,024 + (125,745 % 64,491) = 62278
10.1.1.250 转换为 32.32.32.2。
起始端口为 62278。根据配置的块大小,用户有 249 个端口可用。可用端口范围为端口 62278 到 62526(含)。
特定流 10.1.1.250:5000 随机分配其范围内的任何端口,因为指定了随机分配。
反向翻译
Pu_Offset = Pu_Prefix – Base_Pu_Prefix
Pu_Port_Offset = (Pu_Offset * Rounded_Port_Range_Per_IP) + (Pu_Actual_Port – Pu_Port_Range_Start)
Subscriber_IP = Base_Pr_Prefix + 楼层(Pu_Port_Offset / Block_Size)
反向翻译确定如下。假设流返回到 32.32.32.2:62278。
Pu_Offset = 32.32.32.2 – 32.32.32.1 = 1
Pu_Port_Offset = (1 * 64,491) + (62,280 - 1024) = 125,747
Subscriber_IP = 10.1.0.1 + 地板(125,747 / 249) = 10.1.0.1 + 505 = 10.1.1.250
注意:在反向转换中,只能派生原始私有 IP 地址,而不能派生正在使用的原始端口。这对于执法要求来说已经足够精细了。
配置确定性 NAPT 后,可以使用 show services nat deterministic-nat internal-host
和 show services nat deterministic-nat nat-port-block
命令显示正向和反向映射。但是,如果重新配置确定性端口块分配块大小或 NAT 规则的 from
子句,映射将发生变化。为了提供有关映射的历史信息,我们建议您编写脚本来显示先前配置的特定映射。
确定的 NAPT 限制
配置确定性 NAPT 时,必须注意以下限制。违反任何限制都会导致提交错误。 表 1 显示了限制及其错误消息。
限制 |
错误信息 |
---|---|
确定性 NAT 块的总数必须大于或等于配置的 |
NAT 池中的地址数和端口块组合数小于 'from' 子句中的地址数 |
IPv6 地址不应用于确定性 NAT 池/from 子句中。 |
池 p1 中的 IP 地址无效,转换类型为 deterministic-napt44 或 已经配置了 v4 地址范围的范围 |
如果跨多个术语/规则使用相同的确定性 NAT 池,则 |
使用转换类型 deterministic-napt44,如果池由多个规则或术语共享,则应配置相同的“发件人”地址/范围 |
子 |
使用转换类型 deterministic-napt44,应至少配置一个非“发件人”地址/范围。错误:配置签出失败 |
子句地址中的 |
重叠地址,位于 'except' 条目之间的 'from' 子句中 |
用于确定性 NAPT 的 NAT 池中的地址不应与任何其他 NAT 池中的地址重叠。 |
NAT 池 det-nat-pool1 与服务集 sset_det-nat 使用的 det-nat-pool 重叠 错误:配置检出失败 |
确定性 NAT 池不能与其他转换类型一起使用。此外,不能在确定性 NAPT44 和确定性 NAPT64 NAT 规则中使用确定性 NAT 池。 |
确定性 NAT 池不能与其他转换类型一起使用 |
确定性 NAPT44 必须使用具有确定性端口块分配配置的源池。 |
确定性 NAPT44 必须使用具有确定性端口块分配配置的源池 |
如果 |
转换类型 deterministic-napt44 不需要地址分配轮询 |
分配给确定性 NAT 池的 IP 地址总数应小于或等于 224 (16777216)。 |
具有确定性 napt44 转换的池中的地址数限制为最多 16777216(2^24) |
配置确定性 NAPT
具有 MS-DPC 的 MX 系列路由器以及具有 MS-100、MS-400 和 MS-500 多服务 PIC 的 M Series 路由器支持确定性 NAPT44。从 Junos OS 17.3R1 版、Junos OS 14.2R7 和更高版本以及 Junos OS 15.1R3 版和更高版本 15.1R3 和更高版本开始,MS-MPC 和 MS-MIC 支持确定性 NAPT44。从 Junos OS 17.4R1 版开始,MS-MPC 和 MS-MIC 支持确定性 NAPT64。
要配置确定性 NAPT,请执行以下作:
为确定性 NAPT 配置 NAT 池
要为确定性 NAPT 配置 NAT 池,请执行以下作:
另见
为确定性 NAPT 配置 NAT 规则
要为确定性 NAPT 配置 NAT 规则,请执行以下作:
为确定性 NAT 配置服务集
要为确定性 NAPT 配置服务集,请执行以下作:
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能浏览器 查看您使用的平台是否支持某项功能。
sequential
引入了该选项,使您能够配置端口的顺序分配。