feat: Optimize BGP export script with batched address list additions and introduce nice_new.rsc for populating the ip-lokal address list.

This commit is contained in:
Wartana
2026-03-04 11:46:55 +08:00
parent a91909f731
commit daf6e2672c
2 changed files with 15205 additions and 26 deletions

View File

@@ -4,32 +4,36 @@
:local startTime [/system clock get time];
:local startDate [/system clock get date];
:log info "BGP Export [$startDate $startTime]: mulai...";
/ip firewall address-list remove [find list="bgp-export"]; \
:local cnt 0; \
\
# Iterasi distance=15 (CDN) - pecah per prefix /8 untuk menghindari limit array ~8192 RouterOS \
:foreach pref in={1;2;5;10;14;17;23;27;31;36;42;43;45;49;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118;119;120;121;122;123;124;125;126;127;128;129;130;131;132;133;134;135;136;137;138;139;140;141;142;143;144;145;146;147;148;149;150;151;152;153;154;155;156;157;158;159;160;161;162;163;164;165;166;167;168;169;170;171;172;173;174;175;176;177;178;179;180;181;182;183;184;185;186;187;188;189;190;191;192;193;194;195;196;197;198;199;200;201;202;203;204;205;206;207;208;209;210;211;212;213;214;215;216;217;218;219;220;221;222;223;224;225;226;227;228;229;230;231;232;233;234;235;236;237;238;239;240;241;242;243;244;245;246;247;248;249;250;251;252;253;254;255} do={ \
:local subnet ($pref . ".0.0.0/8"); \
:foreach r in=[/routing/route find where distance=15 dst-address~("^" . $pref . "\\.")] do={ \
:local dst [/routing/route get $r dst-address]; \
:if ($dst != "0.0.0.0/0" && $dst != "::/0") do={ \
/ip firewall address-list add list="bgp-export" address=$dst; \
:set cnt ($cnt + 1); \
}; \
}; \
}; \
:log info "BGP Export: CDN selesai ($cnt)"; \
\
# Iterasi distance=200 (IIX Lokal) - pecah per prefix /8 \
:foreach pref in={1;2;5;10;14;17;23;27;31;36;42;43;45;49;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118;119;120;121;122;123;124;125;126;127;128;129;130;131;132;133;134;135;136;137;138;139;140;141;142;143;144;145;146;147;148;149;150;151;152;153;154;155;156;157;158;159;160;161;162;163;164;165;166;167;168;169;170;171;172;173;174;175;176;177;178;179;180;181;182;183;184;185;186;187;188;189;190;191;192;193;194;195;196;197;198;199;200;201;202;203;204;205;206;207;208;209;210;211;212;213;214;215;216;217;218;219;220;221;222;223;224;225;226;227;228;229;230;231;232;233;234;235;236;237;238;239;240;241;242;243;244;245;246;247;248;249;250;251;252;253;254;255} do={ \
:foreach r in=[/routing/route find where distance=200 dst-address~("^" . $pref . "\\.")] do={ \
:local dst [/routing/route get $r dst-address]; \
:if ($dst != "0.0.0.0/0" && $dst != "::/0") do={ \
/ip firewall address-list add list="bgp-export" address=$dst; \
:set cnt ($cnt + 1); \
}; \
}; \
}; \
# Clear existing address list
/ip firewall address-list remove [find list="bgp-export"];
:local cnt 0;
:local batchSize 100; # Process in batches to avoid memory issues
:local batchArray [:toarray ""];
# Single query for all relevant routes (distance=15 OR distance=200)
:foreach r in=[/routing/route find where (distance=15 or distance=200)] do={
:local dst [/routing/route get $r dst-address];
# Filter out default routes
:if ($dst != "0.0.0.0/0" && $dst != "::/0") do={
:set batchArray ($batchArray + $dst);
:set cnt ($cnt + 1);
# Process batch when size reached
:if ([:len $batchArray] >= $batchSize) do={
/ip firewall address-list add list="bgp-export" address=[:pick $batchArray 0 [:len $batchArray]];
:set batchArray [:toarray ""];
};
};
};
# Process remaining routes in final batch
:if ([:len $batchArray] > 0) do={
/ip firewall address-list add list="bgp-export" address=[:pick $batchArray 0 [:len $batchArray]];
};
:local endTime [/system clock get time];
:local endDate [/system clock get date];
:log info "BGP Export [$endDate $endTime]: selesai total $cnt rute"; \

15175
nice_new.rsc Normal file

File diff suppressed because it is too large Load Diff