本页内容
可确定的 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 版本开始,MS-MPC 和 MS-MIC 支持确定性 NAPT 44,Junos OS 14.2R7 和更高版本的 14.2 版本,以及 Junos OS 15.1R3 及更高版本的 15.1 版本。从 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-hostshow services nat deterministic-nat nat-port-block显示正向和反向映射。但是,如果重新配置确定性端口块分配块大小或 from NAT 规则的子句,则映射将发生变化。为了提供有关映射的历史信息,建议编写可显示先前配置的特定映射的脚本。
确定性 NAPT 限制
配置确定性 NAPT 时,必须注意以下限制。违反任何限制都会导致提交错误。限制及其错误消息如 表 1 所示。
限制 |
错误消息 |
|---|---|
确定性 NAT 块的总数必须大于或等 |
NAT 池中的地址数和端口块组合数小于 'from' 子句中的地址数 |
IPv6 地址不应用于确定性 NAT 池/from 子句。 |
池 p1 中转换类型为 deterministic-napt44 的 IP 地址无效 或 已经配置了 v4 地址范围的范围 |
|
使用转换类型 deterministic-napt44,如果池由多个规则或术语共享,则应配置相同的“发件人”地址/范围 |
该 |
使用 translation-type deterministic-napt44 时,应至少配置一个非除 'from' 地址/范围。错误:配置签出失败 |
子句地址中的 |
重叠地址,在 'except' 条目之间的 'from' 子句中 |
用于确定性 NAPT 的 NAT 池中的地址不应与任何其他 NAT 池中的地址重叠。 |
NAT池 det-nat-pool1 与服务集 sset_det-nat 使用的 det-nat-pool 重叠 错误:配置检出失败 |
确定性 NAT 池不能与其他转换类型一起使用。此外,确定性 NAT 池不能同时用于确定性 NAPT44 和确定性 NAPT64 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 和更高版本的 14.2 版本以及 Junos OS 15.1R3 和更高版本的 15.1 版本开始,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 选项,以便配置端口的顺序分配。