UPnP

MikroTik RouterOS 支持 UPnP,以实现透明的点对点连接,从而支持动态网络发现和 NAT 穿越。本文档涵盖一般属性,例如接口类型(内部/外部)和安全设置,并提供了在路由器接口上启用 UPnP 的配置示例。

UPnP

MikroTik RouterOS 支持通用即插即用(Universal Plug and Play,UPnP)架构,它能在个人计算机与支持网络的设备或电器之间实现透明的点对点网络连接。

UPnP 允许在网络中任意控制设备的指令下,在任意两台设备之间进行数据通信。该技术完全独立于任何特定的物理介质。它支持具备自动发现功能的联网,这意味着设备无需任何初始配置即可动态加入网络。DHCP 和 DNS 服务器是可选的,如果网络中存在就会被使用。UPnP 实现了一种简单而强大的 NAT 穿越解决方案,使客户端能够在 NAT 后方获得完整的双向点对点网络支持。

UPnP 有两种接口类型:internal(本地客户端设备所连接的接口)和 external(连接到 Internet 的接口)。一台路由器只能有一个带有“公网”IP 地址的活动外部接口,以及任意数量的内部接口,所有内部接口都使用经过源 NAT 转换的“内部”IP 地址。该协议通过创建动态 NAT 条目规则来工作。

信息

UPnP 的 internal 接口可以为任意子网创建 NAT 映射,而不仅仅是该内部接口上存在的子网,因此在设置 internal 接口时必须谨慎。 UPnP 协议被许多现代应用程序使用,例如大多数 DirectX 游戏,以及各种 Windows Messenger 功能,如防火墙后方的远程协助、应用程序共享、文件传输、语音和视频通信。

配置

一般属性

子菜单: /ip/upnp

属性描述
allow-disable-external-interface(yes | no;默认值:yes)是否允许用户禁用路由器的外部接口。该功能(允许用户无需任何身份验证过程即可关闭路由器的外部接口)是标准所要求的,但由于在某些并非该标准设计目标的 UPnP 部署中,它有时是意外或不希望的(该标准主要面向家庭用户建立自己的本地网络),你可以禁用此行为
enabled(yes | no)启用 UPnP 服务
show-dummy-rule(yes | no;默认值:yes)为某些有缺陷的实现启用一种变通方法,这些实现错误地处理 UPnP 规则缺失的情况(例如弹出错误消息)。该选项将指示服务器安装一条虚拟(无意义)的 UPnP 规则,以便那些否则拒绝正常工作的客户端能够观察到

危险

如果你不禁用 allow-disable-external-interface,那么本地网络中的任何用户都将能够(无需任何身份验证过程)禁用路由器的外部接口。

UPnP 接口

子菜单: /ip/upnp/interfaces

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

警告

在涉及 VLAN 的更复杂设置中,当 VLAN 接口被视为 LAN 接口时,应将 VLAN 接口本身指定为 UPnP 的内部接口,UPnP 才能正常工作。

配置示例

我们的路由器上已经启用了 masquerading:

[admin@MikroTik] /ip/upnp> /ip/firewall/nat/print
Flags: X - disabled, I - invalid, D - dynamic
  0   chain=srcnat action=masquerade out-interface=ether1
[admin@MikroTik] /ip/upnp>

要启用 UPnP 功能:

[admin@MikroTik] /ip/upnp> set enable=yes
[admin@MikroTik] /ip/upnp> print
                             enabled: yes
    allow-disable-external-interface: yes
                     show-dummy-rule: yes
[admin@MikroTik] /ip/upnp>

现在,我们只需添加接口:

[admin@MikroTik] /ip/upnp/interfaces> add interface=ether1 type=external
[admin@MikroTik] /ip/upnp/interfaces> add interface=ether2 type=internal
[admin@MikroTik] /ip/upnp/interfaces> print
Flags: X - disabled
  #   INTERFACE TYPE
  0 X ether1    external
  1 X ether2    internal

[admin@MikroTik] /ip/upnp/interfaces> enable 0,1

现在,一旦内部接口侧的客户端发送 UPnP 请求,路由器上就会创建动态 NAT 规则,示例规则可能类似如下:

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

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

1 D ;;; upnp 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 ;;; upnp 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