NAT-PMP

NAT-PMP 是一种协议,通过动态 NAT 规则将内部 IPv4 地址映射到外部地址,从而实现透明的点对点连接;客户端和服务器端分别使用 UDP 端口 5350 和 5351。

NAT-PMP

NAT 端口映射协议(NAT Port Mapping Protocol,NAT-PMP)是一种用于实现个人计算机以及具备联网能力的智能设备或电器之间透明点对点网络连接的协议。

该协议通过获取 NAT 网关的外部 IPv4 地址来工作,从而使客户端能够借助动态 NAT 规则,让希望与其通信的对端获知自己的外部 IPv4 地址和端口。

NAT-PMP 在客户端使用 UDP 端口号 5350,在服务器端使用 5351。

PMP 有两种接口类型:internal(本地客户端所连接的接口)和 external(连接互联网的接口)。一台路由器只能有一个处于活动状态且带有"公网"IP 地址的 external 接口

警告

一台路由器只能有一个处于活动状态且带有"公网"IP 地址的 external 接口。NAT-PMP 的 internal 接口可以为任意子网创建 NAT 映射,而不仅是该 internal 接口上存在的子网,因此在设置 internal 接口时必须谨慎。 有关 NAT PMP 的更多详细信息,请参阅 RFC 6886

NAT-PMP 配置可通过 /ip/nat-pmp 菜单访问。

配置示例

假设我们已经完成了上图所示的基本家庭网络配置。

在启用 PMP-NAT 之前,我们需要对离开 LAN 的数据包进行 masquerade。

/ip/firewall/nat
add action=masquerade chain=srcnat out-interface=ether1

现在我们可以启用 PMP 并添加 internal 和 external 接口:

/ip/nat-pmp/set enable=yes
/ip/nat-pmp/interfaces> add interface=ether1 type=external disabled=no
/ip/nat-pmp/interfaces> add interface=ether2 type=internal disabled=no

当 internal 接口一侧的客户端发送 PMP 请求时,路由器上会创建动态 NAT 规则:

[admin@MikroTik] > ip firewall nat print 
Flags: X - disabled, I - invalid, D - dynamic 

0 chain=srcnat action=masquerade out-interface=ether1

1 D ;;; nat-pmp 192.168.88.10: ApplicationX
chain=dstnat action=dst-nat to-addresses=192.168.88.10 to-ports=55000 protocol=tcp 
dst-address=10.0.0.1 in-interface=ether1 dst-port=55000

2 D ;;; nat-pmp 192.168.88.10: ApplicationX
chain=dstnat action=dst-nat to-addresses=192.168.88.10 to-ports=55000 protocol=udp 
dst-address=10.0.0.1 in-interface=ether1 dst-port=55000

属性

通用属性

可从 /ip/nat-pmp 菜单访问。

属性描述
enabled (yes | no)启用 NAT-PMP 服务

NAT PMP 接口

可从 /ip/nat-pmp/interfaces 菜单访问。

属性描述
interface (string; Default: )PMP 运行的接口名称
type (external | internal)PMP 接口类型:<code>external</code> - 分配了全局 IP 地址的接口<code>internal</code> - 客户端所连接的路由器本地接口
forced-ip (Ip; Default: )当外部接口有多个可用 IP 时,允许指定使用哪个公网 IP。

警告

在涉及 VLAN 的更复杂配置中,如果 VLAN 接口属于 LAN,为了让 PMP 正常工作,应将 VLAN 接口本身指定为 internal 接口。