【RouterOS(ROS)】UPNP 设置 - 自动老化及重拨后修改 IP

  • 以下脚本命令基于 ROS 7.2.3,其他版本不一定适用

  • 此脚本在 7.9 或更早已经失效,新版本的 ROS 不允许删除动态对象

  • ROS 开启 UPNP 后,会自动映射端口,所生成的端口映射可以在 IP - Firewall - NAT 中查询,但 ROS 自动生成的端口映射没有老化时间,需要手动进行删除,或使用脚本进行删除,这里记录一下编写的脚本。

  • upnp 老化(自行设定定时执行)

1
2
3
4
5
6
7
/ip firewall nat;
:foreach singleRule in=[find where dynamic=yes] do={
:if ([:ping [get $singleRule to-addresses] count=2] < 1) do={
remove $singleRule
:log warning "*** 删除不可用的 upnp 规则 ***";
}
};
  • 拨号后自动修改 dst-address (建议 pppoe 接口绑定拨号脚本,然后在 PPP - Profiles 下添加)
1
2
3
4
5
6
7
8
:global addold
:global addnew
:set addnew [/interface get [/interface find name="pppoe-out1"] running]
:if ($addnew=true) do={
:set addold [/ip address get [/ip address find dynamic=yes interface="pppoe-out1"] address]
:set addold [:pick $addold 0 ([:len $addold ] -3)]
/ip firewall nat set [find dynamic=yes comment ~"^upnp*."] dst-address=$addold
}

End