实现方式概览(智能 + 自动 + 回流)
定时脚本自动更新 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小时。
设置定时器定期执行脚本
为了每10分钟更新一次公网 IP 地址,可以使用如下定时任务:
/system scheduler
add name=update-wan-ip interval=10m on-event=update-wan-ip
配置端口映射(智能公网 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映射":注释,用于标识规则的功能。
进一步优化建议
配置定时更新更精细化(可选)
可以根据实际需求,调整更新公网 IP 的间隔时间。比如,如果你发现 IP 地址更改频率较高,可以将更新频率改为每5分钟一次,而不是10分钟。
/system scheduler
add name=update-wan-ip interval=5m on-event=update-wan-ip
使用 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="拒绝其他来源访问映射端口"
日志与调试(可选)
为方便调试与监控,您可以添加日志记录规则来跟踪是否有流量正确映射:
/ip firewall filter
add chain=forward dst-port=5000,5001,5002,9091 action=log log-prefix="端口映射流量:" comment="日志记录映射流量"
总结
通过上述配置,你实现了一个自动化、智能回流的公网端口映射方案。通过定时脚本自动更新 PPPoE 的公网 IP 地址,并将其动态添加到地址列表中,配合 dst-nat 规则,实现了对内网设备的端口映射,并确保该映射在公网 IP 变化时仍能自动生效。这对于需要通过 PPPoE 拨号的路由器,尤其适用于没有固定公网 IP 的情况,提供了非常灵活和自动化的解决方案。