RouterOS端口映射智能回流

:white_check_mark: 实现方式概览(智能 + 自动 + 回流)

:one: 定时脚本自动更新 PPPoE 地址

这段脚本会定时(每10分钟)获取 pppoe-out1 接口的当前公网 IP 地址,并将其添加到 address-list 中,确保公网 IP 地址在地址列表中时刻保持最新。

/system script
add name=update-wan-ip policy=read,write source="
:local current [/ip address get [find interface=pppoe-out1] address];
:local ip [:pick \$current 0 [:find \$current \"/\"]];
/ip firewall address-list remove [find list=wan-ip];
/ip firewall address-list add list=wan-ip address=\$ip timeout=1h;
"

此脚本的工作原理:

  • 使用 :local current 获取 pppoe-out1 接口的地址。
  • 使用 :pick:find 截取 IP 地址部分(去掉 /24 等网络掩码信息)。
  • 使用 /ip firewall address-list 移除旧的 IP 并将新的公网 IP 地址添加到名为 wan-ip 的地址列表中,超时设置为1小时。

:two: 设置定时器定期执行脚本

为了每10分钟更新一次公网 IP 地址,可以使用如下定时任务:

/system scheduler
add name=update-wan-ip interval=10m on-event=update-wan-ip

:two: 配置端口映射(智能公网 IP 映射)

接下来,使用 dst-nat 配置进行端口映射,并结合刚才的 wan-ip 地址列表实现智能公网 IP 映射。这个配置会确保仅当当前 PPPoE 获取的 IP 地址存在时,才会进行端口转发。

/ip firewall nat
add chain=dstnat dst-address-list=wan-ip protocol=tcp dst-port=5000,5001,5002,9091 \
    action=dst-nat to-addresses=10.10.10.66 comment="智能公网IP映射"

解析:

  • dst-address-list=wan-ip:指向刚才创建的 wan-ip 地址列表。
  • protocol=tcp dst-port=5000,5001,5002,9091:匹配指定的 TCP 端口(例如:5000、5001、5002、9091)。
  • action=dst-nat to-addresses=10.10.10.66:将请求的流量转发到内网地址 10.10.10.66 上,假设这是目标设备的内部 IP。
  • comment="智能公网IP映射":注释,用于标识规则的功能。

进一步优化建议

:date: 配置定时更新更精细化(可选)

可以根据实际需求,调整更新公网 IP 的间隔时间。比如,如果你发现 IP 地址更改频率较高,可以将更新频率改为每5分钟一次,而不是10分钟。

/system scheduler
add name=update-wan-ip interval=5m on-event=update-wan-ip

:high_voltage: 使用 src-nat 限制仅对外网访问

为了提高安全性,您可以添加额外的规则来限制从外部访问内网端口的流量。举例来说,可以指定仅允许来自特定子网的流量访问内网服务器。

/ip firewall filter
add chain=input src-address=192.168.1.0/24 protocol=tcp dst-port=5000,5001,5002,9091 action=accept comment="允许局域网访问映射端口"
add chain=input action=drop comment="拒绝其他来源访问映射端口"

:test_tube: 日志与调试(可选)

为方便调试与监控,您可以添加日志记录规则来跟踪是否有流量正确映射:

/ip firewall filter
add chain=forward dst-port=5000,5001,5002,9091 action=log log-prefix="端口映射流量:" comment="日志记录映射流量"

总结

通过上述配置,你实现了一个自动化、智能回流的公网端口映射方案。通过定时脚本自动更新 PPPoE 的公网 IP 地址,并将其动态添加到地址列表中,配合 dst-nat 规则,实现了对内网设备的端口映射,并确保该映射在公网 IP 变化时仍能自动生效。这对于需要通过 PPPoE 拨号的路由器,尤其适用于没有固定公网 IP 的情况,提供了非常灵活和自动化的解决方案。