لا يتذكر RouterOS في Mikrotik العناصر الديناميكية لقوائم العناوين ، وفي حالة إعادة التشغيل أو فقدان الطاقة ، تبقى العناصر الثابتة فقط في القوائم. على سبيل المثال ، لديك قاعدة تصيد مرسلي البريد العشوائي أو الماسحات الضوئية للمنفذ وتحظر عناوين IP الخاصة بهم لمدة شهر. بشكل عام ، يتم حفظ هذه العناوين كإدخالات ديناميكية في القوائم ، لكن لا يتم حفظها أثناء إعادة التشغيل ، مما يعني أنه من السهل فقدان قاعدة بيانات "الفجل" ، والتي يتم جمعها على سبيل المثال لمدة شهرين من تشغيل البوابة المستمر.
لكي يعمل هذا المخطط ، فأنت بحاجة إلى خادم FTP (لديّ Windows ، ولكن يمكن إعادة إنشاء ملف الدُفعات بسهولة للأحرف) باستخدام حساب له أذونات القراءة / الكتابة. تعتمد الآلية على تفاعل العناصر التالية: البرامج النصية backupDynList_to_FTP و BackupDynListFromFTP على البوابة ، والبرنامج النصي convertmtik.bat على خادم FTP. هناك حاجة إلى خادم طرف ثالث من أجل إلغاء تحميل الذاكرة الداخلية لميكروتك (يمكن أن تكون القوائم كبيرة جدًا ، والذاكرة غير المتطايرة ليست كبيرة بالنسبة للجميع) ومن أجل معالجة الملف بوسائل أكثر قوة للعمل مع النص من لغة البرمجة النصية المدمجة في mikrotik. يتم استخدام استدعاء دالة DynListExport لتجاوز حد النظام على حجم القائمة. تعود الحاجة إلى تحويل القائمة إلى حقيقة أنه إذا كان العنصر نفسه (على سبيل المثال ، سجل ثابت) موجودًا بالفعل في قاعدة البيانات ، فسيحدث خطأ أثناء الاستيراد ويتوقف الاستيراد. لتجنب ذلك ، في كل مرة يتم فيها إضافة سجل ثابت ، تتم إعادة تعيين معالج الأخطاء وفي حالة وجود تطابق ، لا تتم إضافة السجل ببساطة ، وتذهب عملية الاستيراد إلى أبعد من ذلك.
يتم تنفيذ البرنامج النصي BackupDynList_to_FTP كل ساعة (00:00) ، فهو يجمع كل البيانات حول السجلات الديناميكية (التي لديها نصف ساعة على الأقل للعيش) في جميع القوائم في ملف iplist_dyn.src ويرسل هذا الملف إلى بروتوكول نقل الملفات. على الخادم ، كل ساعة مع إزاحة نصف ساعة من البرنامج النصي الأول (00:30) ، يتم تنفيذ الملف الدفعي convertmtik.bat ، والذي يحول البرنامج النصي الأصلي المستلم من البوابة إلى برنامج نصي محمي من أخطاء المصادفة ويحفظه تحت الاسم iplist_dyn_done.src
الآن ، في حالة سقوط أو إعادة تشغيل البوابة ، في وقت الإطلاق ، تختفي البيانات المتعلقة بالسجلات الديناميكية تلقائيًا ، ولكن بعد 60 ثانية من بدء التشغيل ، يقوم برنامج BackupDynListFromFTP بتنزيل البرنامج النصي iplist_dyn_done.src من FTP ويبدأ في تنفيذه واستعادة القوائم.
يتم تنفيذ المنشط Hour_Dynlist_Backup_on_FTP (/ sys sheduler) في بداية كل ساعة:
/system script run BackupDynList_to_FTP
Script 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!"
يتم تنفيذ Activator BackupDynList_from_FTP (/ sys sheduler) في وقت بدء تشغيل البوابة (بدء التشغيل):
{:delay 60s}; /system script run BackupDynListFromFTP
Script 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 - منفذ SED الخاص بأداة Linux لعمله ، على سبيل المثال من 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