网络地址端口转换
为网络地址端口转换 (NAPT) 配置地址池概述
借助网络地址端口转换 (NAPT),您可以配置多达 32 个地址范围,每个地址范围最多 65,536 个。
该 port
语句为已转换的地址指定端口分配。要配置端口的自动分配,请在 port automatic
层级添加语句 [edit services nat pool nat-pool-name]
。默认情况下,会按顺序分配端口。
从 Junos OS 14.2 版开始,您可以在层次结构级别包含 sequential
选项与 port automatic
语句 [edit services nat pool nat-pool-name]
,以便从指定范围内的端口进行有序分配。要配置特定的端口号范围,请在 port range low minimum-value high maximum-value
层级添加语句 [edit services nat pool nat-pool-name]
。
当池中 99% 的可用端口用于 napt-44 时,该 NAT 池上不允许有新流。
从 Junos OS 14.2 版开始, auto
选项将隐藏并弃用,并且仅出于向后兼容性而保留。它可能会在未来的软件版本中完全删除。
Junos OS 提供了多种端口分配方案:
NAPT 的轮询分配
要为 NAT 池配置轮询分配,请在层级添加地址分配轮询配置语句[edit services nat pool pool-name]
。使用轮询分配时,将从一个范围内的每个地址分配一个端口,然后为下一个范围内的每个地址重复此过程。为最后一个范围中的所有地址分配端口后,分配过程会封装下一个未使用的端口,并为第一个范围内的地址分配下一个未使用的端口。
第一个连接分配给地址:端口 100.0.0.1:3333。
第二个连接分配给地址:端口 100.0.0.2:3333。
第三个连接分配给地址:端口 100.0.0.3:3333。
第四个连接分配给地址:端口 100.0.0.4:3333。
第五个连接分配给地址:端口 100.0.0.5:3333。
第六个连接分配给地址:端口 100.0.0.6:3333。
第七个连接分配给地址:端口 100.0.0.7:3333。
第八个连接分配给地址:端口 100.0.0.8:3333。
第九个连接分配给地址:端口 100.0.0.9:3333。
第十个连接分配给地址:端口 100.0.0.10:3333。
第十一个连接分配给地址:端口 100.0.0.11:3333。
第十二个连接分配给地址:端口 100.0.0.12:3333。
发生封装,第 13 个连接被分配给地址:端口 100.0.0.1:3334。
NAPT 的顺序分配
使用顺序分配时,只有当某个地址的所有可用端口耗尽时,NAT 池中的下一个可用地址才会被选中。
只能为 MS-DPC 和 MS-100、MS-400 和 MS-500 多服务 PICS 配置顺序分配。MS-MPC 和 MS-MIC 卡仅使用轮循分配方法。
这种传统实施方案提供了向后兼容性,不再推荐使用。
以下配置示例中称为 napt 的 NAT 池使用顺序实施:
pool napt { address-range low 100.0.0.1 high 100.0.0.3; address-range low 100.0.0.4 high 100.0.0.6; address-range low 100.0.0.8 high 100.0.0.10; address-range low 100.0.0.12 high 100.0.0.13; port { range low 3333 high 3334; } }
在此示例中,从第一个地址范围中的第一个地址开始分配端口,然后从此地址继续分配,直到使用所有可用端口。使用所有可用端口后,将分配下一个地址(在同一地址范围或以下地址范围内),并根据需要选择其所有端口。对于示例 napt 池,仅在使用第一个范围中所有地址的所有端口时,才会分配端口 100.0.0.4:3333 的元组地址。
第一个连接分配给地址:端口 100.0.0.1:3333。
第二个连接分配给地址:端口 100.0.0.1:3334。
第三个连接分配给地址:端口 100.0.0.2:3333。
第四个连接分配给地址:端口 100.0.0.2:3334 等。
为 NAPT 保留奇偶校验和保留范围
NAPT 提供奇偶校验和保留范围选项,MS-DPC 以及 MS-100、MS-400 和 MS-500 多服务 PICS 支持。对 MS-MPC 和 MS-MIC 的支持从 Junos OS 15.1R1 版开始。NAPT 提供以下选项:
保留奇偶校验 — 使用
preserve-parity
命令为源端口偶数的数据包分配偶数端口,为源端口奇数的数据包分配奇数端口。保留范围 — 如果原始数据包包含一个位于保留范围内的源端口,请使用
preserve-range
命令分配端口范围从 0 到 1023。这适用于控制会话,而非数据会话。
NAPT 的地址池和端点无关映射
地址池
地址池或地址池配对 (APP) 可确保为源自同一内部主机的所有会话分配相同的外部 IP 地址。从池分配外部 IP 地址时,您可以使用此功能。此选项不会影响端口利用率
地址池解决了应用程序打开多个连接的问题。例如,当会话初始化协议 (SIP) 客户端发送实时传输协议 (RTP) 和实时控制协议 (RTCP) 数据包时,SIP 服务器通常要求它们来自同一 IP 地址,即使它们一直受 NAT 的约束。如果 RTP 和 RTCP IP 地址不同,接收端点可能会丢弃数据包。协商端口(假设地址稳定性)的任何点对点 (P2P) 协议都受益于地址池配对。
以下是地址池的用例:
提供即时消息服务的站点要求聊天及其控制会话来自同一公共源地址。当用户登录聊天时,控制会话会对用户进行身份验证。当用户开始聊天会话时,将开始不同的会话。如果聊天会话来自与身份验证会话不同的源地址,则即时消息服务器会拒绝该聊天会话,因为它来自未经授权的地址。
某些网站(如网上银行网站)要求来自给定主机的所有连接均来自同一 IP 地址。
从 Junos OS 14.1 版开始,当停用包含该服务集地址池配对 (APP) 的服务集时,PIC 控制台上将显示消息,并清除该服务集的映射。服务集删除开始时会触发这些消息,并在删除服务集完成后再次生成这些消息。删除开始和结束时将显示以下示例消息:
11 月 15 08:33:13.974 LOG:严重] SVC-SET ss1 (iid 5) 停用/删除:NAT 映射和流删除已启动
11 月 15 08:33:14.674 LOG:严重] SVC-SET ss1 (iid 5) 停用/删除:NAT 映射和流删除已完成
在服务集中包含大量 APP 的扩展环境中,会生成大量消息,此过程需要一定时间。建议等到控制台消息指示服务集删除已完成,然后再次重新激活服务集。
与端点无关的映射和端点无关过滤
如果给定主机的所有连接使用相同的内部端口,则端点无关映射 (EIM) 可确保为来自给定主机的所有连接分配相同的外部地址 和 端口。这意味着,如果它们来自不同的源端口,您可以自由分配不同的外部地址。
EIM 和 APP 的不同之处在于:
APP 可确保分配相同的外部 IP 地址。
EIM 提供稳定的外部 IP 地址和端口(一段时间),外部主机可连接到该端口。与端点无关的过滤 (EIF) 控制哪些外部主机可以连接到内部主机。
从 Junos OS 14.1 版开始,当停用包含该服务集的端点无关映射 (EIM) 映射的服务集时,PIC 控制台上将显示消息,并清除该服务集的映射。服务集删除开始时会触发这些消息,并在删除服务集完成后再次生成这些消息。删除开始和结束时将显示以下示例消息:
11 月 15 08:33:13.974 LOG:严重] SVC-SET ss1 (iid 5) 停用/删除:NAT 映射和流删除已启动
11 月 15 08:33:14.674 LOG:严重] SVC-SET ss1 (iid 5) 停用/删除:NAT 映射和流删除已完成
在服务集中包含大量 EIM 映射的扩展环境中,会生成大量消息,此过程需要一定时间。建议等到控制台消息指示服务集删除已完成,然后再次重新激活服务集。
NAPT 的安全端口块分配
具有 MS-DPC 的 MX 系列路由器以及带有 MS-100、MS-400 和 MS-500 多服务 PICS 的 M 系列路由器支持端口块分配。从 Junos OS 14.2R2 版开始,具有 MS-MPC 和 MS-MIC 的 MX 系列路由器支持端口块分配。
运营商使用 IP 地址(RADIUS 或 DHCP) 日志跟踪订阅者。如果他们使用 NAPT,则 IP 地址将由多个订阅者共享,运营商必须跟踪作为 NAT 日志一部分的 IP 地址和端口。由于端口的使用率和重用率很高,因此由于消息数量庞大,难以存档和关联,因此很难使用日志跟踪订阅者。通过启用块中的端口分配,端口块分配可以显著减少日志数量,从而更轻松地跟踪订阅者。
NAPT 的安全端口块分配
安全端口块分配可用于转换类型和napt-44
stateful-nat64
。
分配端口块时,最近分配的块是当前活动块。从活动块中提供新的 NAT 端口请求。端口是从当前活动块随机分配的。
配置安全端口块分配时,可以指定以下内容:
block-size
max-blocks-per-address
active-block-timeout
端口块分配的临时日志记录
通过端口块分配,我们为每个分配给订阅者的端口集生成一个系统日志。这些日志是基于 UDP 的,可能会丢失在网络中,特别是对于长期运行的流量。临时日志记录会触发,为至少在块的一个端口上具有流量的活动块按配置的间隔重新发送上述日志。
通过在 for sp-interfaces 下services-options
包含pba-interim-logging-interval
语句来激活临时日志记录。
另请参阅
NAPT 实施方法比较
表 1 提供了可用 NAPT 实施方法的功能比较。
特性/功能 |
动态端口分配 |
安全端口块分配 |
确定性端口块分配 |
---|---|---|---|
每 IP 用户数 |
高 |
中 |
低 |
安全风险 |
低 |
中 |
中 |
日志利用率 |
高 |
低 |
无(无需日志) |
安全风险降低 |
随机分配 |
主动块超时 功能 |
不适用 |
增加每 IP 用户数 |
不适用 |
配置多个较小的端口块,以最大化用户/公共 IP |
基于算法的端口分配 |
在 IPv4 网络中配置 NAPT
网络地址端口转换 (NAPT) 是一种将许多网络地址及其 TCP/UDP 端口转换为单个网络地址及其 TCP/UDP 端口的方法。此转换可在 IPv4 和 IPv6 网络中配置。本节介绍在 IPv4 网络中配置 NAPT 的步骤。
要配置 NAPT,必须在层级配置一个规则 [edit services nat]
,以便动态转换源 IPv4 地址。
在 IPv4 网络中配置 NAPT:
以下示例将转换类型配置为 napt-44。
[edit services] user@host# show service-set s1 { nat-rules rule-napt-44; interface-service { service-interface ms-0/1/0; } } nat { pool napt-pool { address 10.10.10.0/32; port { automatic auto; } } rule rule-napt-44 { match-direction input; term t1 { then { translated { source-pool napt-pool; translation-type { napt-44; } } } } } } adaptive-services-pics { traceoptions { flag all; } }
动态地址转换到具有回退到 NAT 的小池
以下配置显示了从大型前缀动态地址转换为小型池,将 /24 子网转换为包含 10 个地址的池。当源池 (src-pool) 中的地址耗尽时,NAPT 过载池 (pat-pool) 将提供 NAT。
[edit services nat] pool src-pool { address-range low 192.16.2.1 high 192.16.2.10; } pool pat-pool { address-range low 192.16.2.11 high 192.16.2.12; port automatic auto; rule myrule { match-direction input; term myterm { from { source-address 10.150.1.0/24; } then { translated { source-pool src-pool; overload-pool pat-pool; translation-type napt-44; } } } }
使用小型池实现动态地址转换
以下配置显示了从大型前缀动态地址转换为小型池,将 /24 子网转换为包含 10 个地址的池。来自前 10 个主机会话的会话将按先到先得的原则从池中分配地址,并且会拒绝任何其他请求。分配了 NAT 的每个主机都可以参与多个会话。
[edit services nat] pool my-pool { address-range low 10.10.10.1 high 10.10.10.10; } rule src-nat { match-direction input; term t1 { from { source-address 192.168.1.0/24; } then { translated { translation-type dynamic-nat44; source-pool my-pool; } } } }
在 IPv6 网络中配置 NAPT
网络地址端口转换 (NAPT) 是一种将许多网络地址及其 TCP/UDP 端口转换为单个网络地址及其 TCP/UDP 端口的方法。此转换可在 IPv4 和 IPv6 网络中配置。本节介绍在 IPv6 网络中配置 NAPT 的步骤。如果您使用 MS-MPC 或 MS-MIC,则不支持在 IPv6 网络中配置 NAPT。有关在 IPv4 网络中配置 NAPT 的信息,请参阅 在 IPv4 网络中配置 NAPT。
要配置 NAPT,必须在层次结构级别配置一个规则 [edit services nat]
,以便动态转换源 IPv6 地址。
在 IPv6 网络中配置 NAPT:
以下示例为 IPv6 网络配置动态源(地址和端口)转换或 NAPT。
[edit services] user@host# show service-set IPV6-NAPT-ServiceSet { nat-rules IPV6-NAPT-Rule; interface-service { service-interface sp-0/1/0; } } nat { pool IPV6-NAPT-Pool { address 2002::1/96; port automatic sequential; } rule IPV6-NAPT-Rule { match-direction input; term term1 { then { translated { source-pool IPV6-NAPT-Pool; translation-type { napt-66; } } } } } } adaptive-services-pics { traceoptions { flag all; } } }
示例:配置带端口转换的 NAT
此示例说明如何配置带有端口转换的 NAT。
要求
此示例使用以下硬件和软件组件:
带有服务 DPC 的 MX 系列 5G 通用路由平台或带有服务 PIC 的 M 系列多服务边缘路由器
域名服务器 (DNS)
Junos OS 11.4 或更高版本
概述
此示例显示了完整的 CGN NAT44 配置和高级选项。
配置带有端口转换的 NAT
程序
逐步过程
要配置服务集:
-
配置服务集。
user@host# edit services service-set ss2
-
在配置模式下,转到
[edit services nat]
层次结构级别。[edit] user@host# edit services nat
-
定义必须用于动态转换的源地址池。对于 NAPT,在配置源池时还要指定端口号。
[edit services nat] user@host# set pool pool name address source addresses user@host# set pool pool name port source ports
例如:
[edit services nat] user@host# set pool NAPT-Pool address 192.168.2.1/24; user@host# set pool NAPT-Pool port automatic
-
指定要使用的 NAT 规则。
[edit services service-set ss2]
host# set nat-rules r1 - 定义用于转换源地址的 NAT 规则。为此,请将
match-direction
规则语句设置为input
。此外,定义一个术语,用于napt-44
转换上一步中定义的池地址的转换类型。[edit services nat] user@host# set rule rule name match-direction input user@host# set rule rule name term term name from source-address source-address user@host# set rule rule name term term name then translated source-pool pool name user@host# set rule rule name term term name then translated translation-type napt-44
例如:
[edit services nat] user@host# set rule r1 match-direction input user@host# set rule r1 term t1 from source-address 10.10.10.1 user@host# set rule r1 term t1 then translated source-pool NAPT-Pool user@host# set rule r1 term t1 then translated translation-type napt-44
-
指定接口服务。
[edit services service-set ss2]
host# set interface-service service-interface sp-5/0/0
结果
user@host# show services service-sets sset2
service-set ss2 {
nat-rules r1;
interface-service {
service-interface sp-5/0/0;
}
}
nat {
pool NAPT-Pool {
address 192.168.2.1/24;
port automatic;
}
rule r1 {
match-direction input;
term t1 {
from {
source-address {
10.10.10.1/32;
}
}
then {
translated {
source-pool NAPT-Pool;
translation-type {
napt-44;
}
}
}
}
}
}
示例:具有接口服务集的 MS-MPC 上的 NAPT 配置
此示例说明如何使用多服务模块化端口集中器 (MS-MPC) 作为服务接口卡在 MX 系列路由器上配置端口转换 (NAPT) 的网络地址转换。
要求
此示例使用以下硬件和软件组件:
MX 系列路由器
多服务模块化端口集中器 (MS-MPC)
Junos OS 13.2R1 或更高版本
概述
服务提供商已选择 MS-MPC 作为提供 NAT 服务的平台,以适应新用户。
配置
要使用 MS-MPC 作为服务接口卡配置 NAPT44,请执行以下操作:
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,然后将命令复制并粘贴到 [edit] 层次结构级别的 CLI 中。
set interfaces ge-0/2/0 unit 0 family inet address 10.255.248.2/24 set interfaces xe-1/1/0 unit 0 family inet address 10.255.247.2/24 set interfaces xe-1/1/0 unit 0 family inet service input service-set sset1 set interfaces xe-1/1/0 unit 0 family inet service output service-set sset1 set interfaces ms-3/0/0 unit 0 family inet set applications application-set accept-algs application junos-http set applications application-set accept-algs application junos-ftp set applications application-set accept-algs application junos-tftp set applications application-set accept-algs application junos-telnet set applications application-set accept-algs application junos-sip set applications application-set accept-algs application junos-rtcp set services stateful-firewall rule sf-rule1 match-direction input-output set services stateful-firewall rule sf-rule1 term sf-term1 from source-address 10.255.247.0/24 set services stateful-firewall rule sf-rule1 term sf-term1 from application-sets accept-algs set services stateful-firewall rule sf-rule1 term sf-term1 then accept set services nat pool napt-pool address 1.1.1.0/24 set services nat pool napt-pool port automatic * nat rule for napt set services nat rule nat-rule1 match-direction input set services nat rule nat-rule1 term nat-term1 from source-address 10.255.247.0/24 set services nat rule nat-rule1 term nat-term1 from application-sets accept-algs set services nat rule nat-rule1 term nat-term1 then translated source-pool napt-pool set services nat rule nat-rule1 term nat-term1 then translated translation-type napt-44 * nat rule for basic nat set services service-set sset1 stateful-firewall-rules sf-rule1 set services service-set sset1 nat-rules nat-rule1 set services service-set sset1 interface-service service-interface ms-3/0/0
配置接口
逐步过程
配置 NAT 处理所需的接口。您需要以下接口:
面向客户的接口,可处理往返客户的流量。
面向互联网的界面。
服务接口,向面向客户的接口提供 NAT 和有状态防火墙服务
为面向客户的接口配置接口。
user@host# edit [edit ] user@host# set interfaces xe-1/1/0 unit 0 family inet address 10.255.247.2/24 user@host# set interfaces xe-1/1/0 unit 0 family inet service input service-set sset1 user@host# set interfaces xe-1/1/0 unit 0 family inet service output service-set sset1
为面向互联网的接口配置接口。
[edit ] set interfaces ge-0/2/0 unit 0 family inet address 10.255.248.2/24
配置将服务集连接到面向客户的接口的服务集的接口。在我们的示例中,接口位于 MS-MPC 上。
[edit ] user@host# set interfaces ms-3/0/0 unit 0 family inet
配置一组可接受应用程序流量的应用程序
逐步过程
识别传入流量的可接受应用程序。
指定包含可接受的传入应用程序流量的应用程序集。
user@host# set applications application-set accept-algs application junos-http user@host# set applications application-set accept-algs application junos-ftp user@host# set applications application-set accept-algs application junos-tftp user@host# set applications application-set accept-algs application junos-telnet user@host# set applications application-set accept-algs application junos-sip user@host# set applications application-set accept-algs application junos-rtcp
结果
user@host#edit services applications application-set accept-algs user@host#show application junos-http; application junos-ftp; application junos-tftp; application junos-telnet; application junos-sip; application junos-
配置有状态防火墙规则
逐步过程
配置将接受所有传入流量的状态防火墙规则。
为所有输入和输出指定防火墙匹配
user@hos#t set services stateful-firewall rule sf-rule1 match-direction input-output
识别来自面向客户的接口的源地址和可接受的应用程序流量。
user@host# set services stateful-firewall rule sf-rule1 term sf-term1 from source-address 10.255.247.0/24 user@host# set services stateful-firewall rule sf-rule1 term sf-term1 from application-sets accept-algs user@host# set services stateful-firewall rule sf-rule1 term sf-term1 then accept
结果
user@host# edit services stateful-firewall user@host# show rule sf-rule1 { match-direction input-output; term sf-term1 { from { source-address { 10.255.247.0/24; } application-sets accept-algs; } then { accept; } } }
配置 NAT 池和规则
逐步过程
通过自动端口分配配置用于地址转换的 NAT 池和规则。
使用自动端口分配配置 NAT 池。
user@host# set services nat pool napt-pool address 1.1.1.0/24 user@host# set services nat pool napt-pool port automatic auto
配置使用定义的 NAT 池应用转换类型的
napt-44
NAT 规则。user@host# set services nat rule nat-rule1 term nat-term1 from application-sets accept-algs user@host# set services nat rule nat-rule1 term nat-term1 then translated source-pool napt-pool user@host# set services nat rule nat-rule1 term nat-term1 then translated translation-type napt-44
结果
user@host#edit services nat user@host#show pool napt-pool { address 1.1.1.0/24; port { automatic; } } rule nat-rule1 { match-direction input; term nat-term1 { from { source-address { 10.255.247.0/24; } application-sets accept-algs; } then { translated { source-pool napt-pool; translation-type { napt-44; } } } } }
配置服务集
逐步过程
配置接口类型服务集。
指定应用于客户流量的 NAT 和有状态防火墙规则。
user@host set services service-set sset1 stateful-firewall-rules sf-rule1 user@host set services service-set sset1 nat-rules bat-rule1
指定将规则应用于客户流量的服务接口。
set services service-set sset1 interface-service service-interface ms-3/0/0
结果
user@host# edit services service-set sset1 user@host# show set services service-set sset1 stateful-firewall-rules sf-rule1 set services service-set sset1 nat-rules nat-rule1 set services service-set sset1 interface-service service-interface ms-3/0/0
sequential
选项与
port automatic
语句
[edit services nat pool nat-pool-name]
,以便从指定范围内的端口进行有序分配。
auto
选项将隐藏并弃用,并且仅出于向后兼容性而保留。
sequential
会引入选项,以便您可以配置端口的顺序分配。