针对下一代服务的确定性 NAPT 概述
在采用 MX-SPC3 的新一代服务下,您可以配置确定性 NAPT44 和 NAPT64 服务。新一代服务确定性 NAPT 服务使用算法来分配目标端口块。
新一代服务 确定性 NAPT44 服务可确保原始源 IPv4 地址和端口始终映射到相同的 NAT 后 IPv4 地址和端口范围,并确保给定转换的外部 IPv4 地址和端口的反向映射始终映射到相同的内部 IPv4 地址。
新一代服务 确定性 NAPT64 服务可确保原始源 IPv6 地址和端口始终映射到相同的 NAT 后 IPv4 地址和端口范围,并确保给定转换的外部 IPv4 地址和端口的反向映射始终映射到相同的内部 IPv6 地址。
有关如何配置确定性 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
句中可用的 pre-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 { source { pool src-pool { address 203.0.113.0/16; port { automatic { random-allocation; } deterministic { block-size 249; host address 10.1.0.1/16; } } } rule-set set1 { rule det-nat { match-direction input; match { source-address 10.1.0.0/16; } then { source-nat { pool src-pool; } } } } } } }
前向转换
-
Pr_Offset =Pr_Prefix – Base_Pr_Prefix – 专用 IP 池中的间隙
注意:当专用 IP 池由多个不连续的池组成时,Pr_Offset必须仅计算池中的专用 IP。所以它是以下各项的总和:
-
IP 所属池中的偏移量。
-
具有较低 IP 的池的大小。
-
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)
注意:当公共 IP 池由多个不连续的池组成时,Pu_Offset必须仅计算池中的公共 IP。因此,总和必须旨在:
-
如果该值
floor(Pr_Port_Offset / Rounded_Port_Range_Per_IP)
大于 的大小first Public IP pool
,则从该值中减去第一个池的大小。然后,考虑第二个池大小。 -
重复该过程,直到该值小于第 n 个池。
-
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 = 203.0.113.1 + 楼层(125745 /64491) = 203.0.113.1 +1 = 203.0.113.2
Pu_Start_Port = 1,024 + (125,745 % 64,491) = 62278
10.1.1.250 转换为 203.0.113.2。
起始端口为 62278。根据配置的块大小,用户有 249 个端口可用。可用端口范围为端口 62278 到 62526(含)。
特定流 10.1.1.250:5000 随机分配其范围内的任何端口,因为指定了随机分配。
反向翻译
-
Pr_Offset =Pr_Prefix – Base_Pr_Prefix – 专用 IP 池中的间隙
注意:当专用 IP 池由多个不连续的池组成时,Pr_Offset必须仅计算池中的专用 IP。所以它是以下各项的总和:
-
IP 所属池中的偏移量。
-
具有较低 IP 的池的大小。
-
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)
反向翻译确定如下。假设流返回到 203.0.113.2:62278。
Pu_Offset = 203.0.113.2 – 203.0.113.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 时,请注意以下事项:
对于 IPv6 确定性 NAT64 主机地址配置,我们支持 IPv6 主机前缀的最后 32 位(4 字节)更改。这意味着我们只能为 IPv6 地址配置 /96 前缀掩码,它支持一个 IPv6 前缀的最大地址数为 232 。主机地址在配置层次结构中
[services nat source pool p1 port deterministic host]
指定。通常,host-range 中的地址数应大于池中的地址数。
-
最佳实践:
建议不要将主机地址号配置为超过总端口块资源数,因为某些主机可能无法成功接收端口块资源。
确定性 NAT 的最小块大小为 1。如果配置较小的块大小,则提交将失败。如果块大小配置为 0,则会根据主机号和转换地址号自动计算块大小。如果计算出的块大小小于 1,则提交失败。
对于下一代服务确定性 NAPT,您可以在 NAT 池中的主机地址或地址名称列表中同时配置 IPv4 和 IPv6 主机地址的组合。主机前缀总数不能超过 1000。
不能在主机通讯簿名称中配置地址范围或 DNS 名称。
如果配置的主机地址前缀和主机通讯簿名称重叠,则其前缀将合并在一起。
show services nat source deterministic
您可以使用操作命令来显示合并的前缀。-
最佳实践:
如果跨多个规则使用相同的确定性 NAT 池,我们建议您保持订阅者主机地址与与源地址前缀匹配的多个规则一致;否则,来自未在 NAT 池中配置的主机的流量,即使它与 NAT 规则匹配,也可能无法成功分配端口。
对于新一代服务 NAPT 服务,配置的主机地址总数必须大于或等于可用的确定性 NAT 端口块。