RouterOS di Mikrotik tidak mengingat elemen dinamis dari daftar alamat, dan jika terjadi reboot atau kehilangan daya, hanya elemen statis yang akan tetap ada dalam daftar. Misalnya, Anda memiliki aturan yang menangkap spammer atau pemindai port dan melarang alamat IP mereka selama sebulan. Biasanya, alamat tersebut disimpan sebagai entri dinamis dalam daftar, tetapi mereka tidak disimpan selama reboot, yang berarti mudah kehilangan basis data "lobak", yang dikumpulkan untuk beberapa bulan operasi gerbang berkelanjutan.
Agar skema ini berfungsi, Anda memerlukan server FTP (saya memilikinya Windows, tetapi file batch mudah diperbaiki untuk nixes) dengan akun yang memiliki izin baca / tulis. Mekanisme ini didasarkan pada interaksi elemen-elemen berikut: skrip backupDynList_to_FTP dan BackupDynListFromFTP di gateway, dan skrip convertmtik.bat di server FTP. Server pihak ketiga diperlukan untuk mengeluarkan memori internal Mikrotik (daftar bisa cukup besar, dan memori non-volatil tidak besar untuk semua orang) dan untuk memproses file dengan cara yang lebih kuat untuk bekerja dengan teks daripada bahasa skrip bawaan yang dimiliki mikrotik. Panggilan fungsi DynListExport digunakan untuk melewati batas sistem pada ukuran daftar. Kebutuhan untuk mengonversi daftar adalah karena fakta bahwa jika elemen yang sama (katakanlah, catatan statis) sudah ada dalam database, maka kesalahan terjadi selama impor dan impor dihentikan. Untuk menghindarinya, setiap kali catatan statis ditambahkan, penangan kesalahan diatur ulang dan jika ada kecocokan, catatan sama sekali tidak ditambahkan, dan proses impor berjalan lebih jauh.
Skrip BackupDynList_to_FTP dijalankan setiap jam (00:00), ia mengumpulkan semua data tentang catatan dinamis (yang memiliki setidaknya setengah jam untuk hidup) di semua daftar ke dalam file iplist_dyn.src dan mengirimkan file ini ke ftp. Di server, setiap jam dengan setengah jam shift dari skrip pertama (00:30), file batch convertmtik.bat dijalankan, yang mengubah skrip asli yang diterima dari gateway menjadi skrip yang dilindungi dari kesalahan kebetulan dan menyimpannya dengan nama iplist_dyn_done.src
Sekarang, dalam hal jatuh atau reboot gateway, pada saat peluncuran, data tentang catatan dinamis secara otomatis menghilang, tetapi 60 detik setelah peluncuran, skrip BackupDynListFromFTP mengunduh iplist_dyn_done.src dari FTP dan mulai menjalankannya, mengembalikan daftar.
Aktivator Hourly_Dynlist_Backup_on_FTP (/ sys sheduler) dijalankan pada awal setiap jam:
/system script run BackupDynList_to_FTP
Script BackupDynList_to_FTP (jangan lupa untuk mengubah alamat FTP, nama pengguna, dan kata sandi):
/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) dijalankan pada saat gateway dimulai (startup):
{:delay 60s}; /system script run BackupDynListFromFTP
Script BackupDynListFromFTP (jangan lupa untuk mengubah alamat FTP, nama pengguna, dan kata sandi):
: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"
Script server Convertmtik.bat - menggunakan port SED dari utilitas Linux untuk pekerjaannya, misalnya dari gnuwin32, yang harus didaftarkan di lintasan di server:
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