Mikrotik中的RouterOS不会记住地址列表的动态元素,并且在重新启动或断电的情况下,只有静态元素会保留在列表中。 例如,您有一条规则可以捕获垃圾邮件发送者或端口扫描程序,并将其IP地址禁止一个月。 通常,此类地址将作为动态条目保存在列表中,但不会在重新启动期间保存,这意味着很容易丢失网关连续运行几个月收集的“萝卜”数据库。
为了使该方案起作用,您需要一个具有读/写权限的帐户的FTP服务器(我有Windows,但批处理文件很容易重做)。 该机制基于以下元素的交互:网关上的backupDynList_to_FTP和BackupDynListFromFTP脚本,以及FTP服务器上的convertmtik.bat脚本。 需要第三方服务器以卸载Mikrotik的内部存储器(列表可能很大,并且每个人的非易失性存储器都不大),并且为了以比内置脚本语言mikrotik更为强大的文本处理方式来处理文件。 DynListExport函数调用用于绕过列表大小的系统限制。 需要转换列表是由于以下事实:如果数据库中已经存在相同的元素(例如,静态记录),则在导入期间会发生错误,并且导入将停止。 为避免这种情况,每次添加静态记录时,都会重置错误处理程序,并且在匹配的情况下,仅不添加记录,并且导入过程会更进一步。
BackupDynList_to_FTP脚本每小时(00:00)执行一次,它将所有列表中有关动态记录(至少存在半小时)的所有动态数据收集到iplist_dyn.src文件中,并将此文件发送到ftp。 在服务器上,每隔一个小时从第一个脚本(00:30)开始半小时执行一次,则convertmtik.bat批处理文件将把从网关接收到的原始脚本转换为一个免受巧合错误保护的脚本,并将其保存为iplist_dyn_done.src名称。
现在,如果网关崩溃或重新启动,则在启动时,有关动态记录的数据会自动消失,但是在启动60秒后,BackupDynListFromFTP脚本将从FTP下载iplist_dyn_done.src文件并开始执行,以恢复列表。
在每个小时的开始执行Hourly_Dynlist_Backup_on_FTP(/ sys sheduler)激活器:
/system script run BackupDynList_to_FTP
脚本BackupDynList_to_FTP(不要忘记更改FTP地址,用户名和密码):
/system script environment remove [ find where name="DynListExport" ]; :global DynListExport do={ :foreach i in=[/ip firewall address–list find where dynamic=yes and timeout>0d00h30m] do={ :local list [/ip firewall address–list get $i list]; :local address [/ip firewall address–list get $i address]; :local timeout [/ip firewall address–list get $i timeout]; :local comment [/ip firewall address–list get $i comment]; :put "/ip firewall address–list add list=$list address=$address timeout=$timeout comment=\"$comment\";"}; } :log info "Starting Backup to FTP Script..." :global iplistfile ("iplist_dyn.rsc") :if ([/file find name=$iplistfile]!= "") do={/file rem $iplistfile}; /execute script="\$DynListExport" file=$iplistfile :delay 60s /tool fetch address="_FTP_" port=21 mode=ftp src–path="iplist_dyn.rsc.txt" user= password= dst–path="iplist_dyn.src" upload=yes :delay 20s /file rem $iplistfile :log info "Finished Backup to FTP!"
在启动网关(启动)时执行激活程序BackupDynList_from_FTP(/ sys sheduler):
{:delay 60s}; /system script run BackupDynListFromFTP
脚本BackupDynListFromFTP(不要忘记更改FTP地址,用户名和密码):
:local BackupFile "iplist_dyn_done.src" /file remove [find name=$BackupFile] /tool fetch address="_FTP_" port=21 mode=ftp src–path="$BackupFile" user= password= /import file–name=$BackupFile {:delay 30s}; /file remove [find name=$BackupFile] /log info "$BackupFile imported"
Convertmtik.bat服务器脚本-使用Linux实用程序的SED端口进行工作,例如从gnuwin32使用,必须在服务器的路径中进行注册:
echo # ––––––––––––––––––––––––––––––––––––––––––––––––––––– — > iplist_dyn_done.src echo # %date% %time% >> iplist_dyn_done.src echo # ––––––––––––––––––––––––––––––––––––––––––––––––––––– — >> iplist_dyn_done.src echo /ip firewall address–list > iplist_dyn_done.src sed –e "s/;//" –e "s/\/ip firewall address–list //" –e "s/.*/:do { & } on–error={}/" iplist_dyn.src >> iplist_dyn_done.src