网络地址端口转换
为网络地址端口转换 (NAPT) 配置地址池概述
使用网络地址端口转换 (NAPT),您最多可以配置 32 个地址范围,每个地址范围最多 65,536 个地址。
该port语句指定转换地址的端口分配。要配置端口的自动分配,请在层次结构级别包含port automatic[edit services nat pool nat-pool-name]该语句。默认情况下,会按顺序分配端口。
从 Junos OS 14.2 版开始,您可以在层次结构级别将[edit services nat pool nat-pool-name]该sequential选项与语句一起port automatic添加,以便对指定范围内的端口进行顺序分配。要配置特定范围的端口号,请在层次结构级别包含port range low minimum-value high maximum-value[edit services nat pool nat-pool-name]该语句。
当 napt-44 池中可用端口总数的 99% 时,该 NAT 池上不允许有新流量。
从 Junos OS 14.2 版开始,该 auto 选项将被隐藏和弃用,并且仅出于向后兼容性而进行维护。它可能会在将来的软件版本中完全删除。
Junos OS 提供了多种端口分配备选方案:
NAPT 的轮询分配
要为 NAT 池配置轮询分配,请在层次结构级别包含 [edit services nat pool pool-name] address-allocation round-robin 配置语句。使用轮询分配时,会从范围内的每个地址分配一个端口,然后对下一个范围内的每个地址重复该过程。为最后一个范围内的所有地址分配端口后,分配过程将环绕并为第一个范围内的地址分配下一个未使用的端口。
第一个连接被分配给地址:port 100.0.0.1:3333。
第二个连接分配给地址:port 100.0.0.2:3333。
第三个连接分配给地址:port 100.0.0.3:3333。
第四个连接分配给地址:port 100.0.0.4:3333。
第五个连接分配给地址:port 100.0.0.5:3333。
第六个连接分配给地址:port 100.0.0.6:3333。
第七个连接分配给地址:port 100.0.0.7:3333。
第八个连接分配给地址:port 100.0.0.8:3333。
第九个连接分配给地址:port 100.0.0.9:3333。
第十个连接分配给地址:port 100.0.0.10:3333。
第 11 个连接分配给地址:port 100.0.0.11:3333。
第十二个连接分配给地址:port 100.0.0.12:3333。
发生环绕,第 13 个连接被分配给地址:port 100.0.0.1:3334。
NAPT 的顺序分配
使用顺序分配时,仅当某个地址的所有可用端口都耗尽时,才会选择 NAT 池中的下一个可用地址。
只能为 MS-DPC 和 MS-100、MS-400 和 MS-500 多服务 PIC 配置顺序分配。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。
第一个连接被分配给地址:port 100.0.0.1:3333。
第二个连接分配给地址:端口 100.0.0.1:3334。
第三个连接分配给地址:port 100.0.0.2:3333。
第四个连接分配给地址:port 100.0.0.2:3334,依此类推。
保留奇偶校验并保留 NAPT 的范围
保留奇偶校验和保留范围选项可用于 NAPT,并在 MS-DPC 以及 MS-100、MS-400 和 MS-500 多服务 PIC 上受支持。从 Junos OS 15.1R1 版开始支持 MS-MPC 和 MS-MIC。以下选项可用于 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 控制台上将显示消息,并清除该服务集的映射。这些消息在开始删除服务集时触发,并在删除服务集完成时再次生成。删除开始和结束时将显示以下示例消息:
Nov 15 08:33:13.974 LOG: Critical] SVC-SET ss1 (iid 5) deactivate/delete:已启动 NAT 映射和流删除
Nov 15 08:33:14.674 日志:严重] SVC-SET ss1 (iid 5) 停用/删除:NAT 映射和流删除完成
在服务集中包含大量 APP 的扩展环境中,会生成大量消息,此过程需要一定的时间。建议等到控制台消息完成删除服务集后,再重新激活服务集。
独立于端点的映射和独立于端点的过滤
端点无关映射 (EIM) 可确保为来自给定主机的所有连接(如果它们使用相同的内部端口)分配相同的外部地址 和 端口。这意味着,如果它们来自不同的源端口,您可以自由分配不同的外部地址。
EIM和APP的区别如下:
APP确保分配相同的外部IP地址。
EIM 提供外部主机可以连接的稳定的外部 IP 地址和端口(一段时间)。端点无关过滤 (EIF) 控制哪些外部主机可以连接到内部主机。
从 Junos OS 14.1 版开始,当您停用包含该服务集的端点无关映射 (EIM) 映射的服务集时,PIC 控制台上将显示消息,并清除该服务集的映射。这些消息在开始删除服务集时触发,并在删除服务集完成时再次生成。删除开始和结束时将显示以下示例消息:
Nov 15 08:33:13.974 LOG: Critical] SVC-SET ss1 (iid 5) deactivate/delete:已启动 NAT 映射和流删除
Nov 15 08:33:14.674 日志:严重] SVC-SET ss1 (iid 5) 停用/删除:NAT 映射和流删除完成
在服务集中包含大量 EIM 映射的扩展环境中,将生成大量消息,并且此过程需要一些时间。建议等到控制台消息完成删除服务集后,再重新激活服务集。
用于 NAPT 的安全端口块分配
带有 MS-DPC 的 MX 系列路由器和带有 MS-100、MS-400 和 MS-500 多服务 PIC 的 M Series 路由器支持端口块分配。从 Junos OS 14.2R2 版开始,配备 MS-MPC 和 MS-MIC 的 MX 系列路由器支持端口块分配。
运营商使用 IP 地址(RADIUS 或 DHCP)日志跟踪用户。如果他们使用 NAPT,则一个 IP 地址由多个订阅者共享,运营商必须跟踪 IP 地址和端口,它们是 NAT 日志的一部分。由于端口的使用和重用速率非常高,因此很难使用日志跟踪订阅者,因为消息数量庞大,难以存档和关联。通过启用端口块分配,端口块分配可以显着减少日志数量,从而更容易跟踪订阅者。
用于 NAPT 的安全端口块分配
安全端口块分配可用于转换类型 napt-44 和 stateful-nat64.
分配端口块时,最近分配的块是当前活动块。对 NAT 端口的新请求从活动块提供服务。端口从当前活动块中随机分配。
配置安全端口块分配时,可以指定以下内容:
block-sizemax-blocks-per-addressactive-block-timeout
端口块分配的临时日志记录
通过端口块分配,我们为分配给用户的每组端口生成一个系统日志。这些日志是基于 UDP 的,可能会在网络中丢失,特别是对于长时间运行的流量。临时日志记录会触发以配置的时间间隔重新发送上述日志,用于在块的至少一个端口上具有流量的活动块。
通过在 for sp- 接口下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) 中的地址耗尽时,NAT 由 NAPT 过载池 (pat-pool) 提供。
[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 Series多服务边缘路由器
域名服务器 (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 规则。为此,请将规则
input的语句设置为match-direction。此外,定义一个术语,用作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 配置
此示例说明如何在 MX 系列路由器上使用多服务模块化端口集中器 (MS-MPC) 作为服务接口卡配置网络地址转换和端口转换 (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
配置面向 Internet 的接口。
[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-44NAT 规则。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
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能资源管理器 确定您的平台是否支持某个功能。
[edit services nat pool nat-pool-name]该
sequential选项与语句一起
port automatic添加,以便对指定范围内的端口进行顺序分配。
auto 选项将被隐藏和弃用,并且仅出于向后兼容性而进行维护。
sequential 选项,使您能够配置端口的顺序分配。