From e90b8f46f5e890fcaeacc32d50542e2a5ebd9f26 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 22:40:16 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 22:40:16. --- .../20260505/20260505224001-Binary.backup | Bin 0 -> 279058 bytes .../20260505/20260505224001-Config.rsc | 4677 +++++++++++++++++ .../20260505/20260505224001-Diff-Config.rsc | 7 + 3 files changed, 4684 insertions(+) create mode 100644 MikroMaster/20260505/20260505224001-Binary.backup create mode 100644 MikroMaster/20260505/20260505224001-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505224001-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505224001-Binary.backup b/MikroMaster/20260505/20260505224001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..e518163c319447ed600d5815f7b0796e8727a0ba GIT binary patch literal 279058 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
    tiN0{ zr$T5RdN)L&_8PNv<%*+GI3!24GBtmay6b84y87PO<5Hf`~X zhr4Ok3I*)iCZ8@BwZyBy*AB@E3Szj=vUzqYiKI2-oeRu3$ff44lhhv}emnHK9zH!s z_60YwL8*)s*TH@X{E9)q%TwOUX3O`@p?W67`rcj+H!8xfThpsV4>n6M zynA-|7M<3VM=ERjvcDJ`$mxI9E8l+62m1}cH<76RZBJT^R?W$^#$qO=B87r~;Kj

    U-LBJsS(CXOmbvPHLJ`3uuI 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Ð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¬PJyalgZ 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 R67T4zYx;Jat2!Yq=XO;YJ*5Bu literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505224001-Config.rsc b/MikroMaster/20260505/20260505224001-Config.rsc new file mode 100644 index 0000000..8a84119 --- /dev/null +++ b/MikroMaster/20260505/20260505224001-Config.rsc @@ -0,0 +1,4677 @@ +# 2026-05-05 22:40:02 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-dnsForwarders\r\ + \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n\r\ + \n\r\ + \n/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 doh\ + -max-server-connections=20 use-doh-server=https://security.cloudflare-dns.\ + com/dns-query verify-doh-cert=no;\r\ + \n\r\ + \n/ip dns static\r\ + \n:do {\r\ + \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ + \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ + e=A\r\ + \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ + A\r\ + \n\r\ + \n/ip dns forwarders\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ + oH\"\r\ + \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ + Flare Secure DoH\"\r\ + \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ + 9 Default\" verify-doh-cert=no\r\ + \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ + \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ + \_name=\"Comss DoH\" verify-doh-cert=no\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ + dns-query name=\"CF & Google DoH\"\r\ + \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ + =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ + \n} on-error={ }\r\ + \n\r\ + \n" +add dont-require-permissions=no name=AM-ADguardHome-container owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-ADguardHome-container\r\ + \n# Script comment: ADguardHome-container to container | by @xdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n#/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53\r\ + \n# cat adguardhome_container.rsc\r\ + \n# adguard home to container | by @xdenb43\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +set wlan1 enable-nstreme=yes +set wlan2 enable-nstreme=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-download=yes crl-store=\ + system crl-use=yes +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=::/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 interfaces=wlan1,wlan2 \ + lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main dhcp-options=clientid,clientid_duid interface=\ + "ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=1.0.0.1,8.8.8.8 use-doh-server=\ + https://security.cloudflare-dns.com/dns-query +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" name=dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps dst-port=443 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat dst-port=22 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=22 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +add interface=WG type=external +add interface=wlan2 type=internal +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" disabled=yes interval=20m name=\ + AM-RKN-dnsLookup on-event="/system/script { run AM-RKN-dnsLookup; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260505/20260505224001-Diff-Config.rsc b/MikroMaster/history/20260505/20260505224001-Diff-Config.rsc new file mode 100644 index 0000000..38c8906 --- /dev/null +++ b/MikroMaster/history/20260505/20260505224001-Diff-Config.rsc @@ -0,0 +1,7 @@ +4438,4439c4438,4440 +< dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ +< new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +--- +> disabled=yes dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina \ +> log-prefix=VPN-all new-routing-mark=To-VPN src-address=10.30.30.0/24 \ +> src-address-list=!NoWG -- 2.52.0