From 4352460f6b0b0fbd8de00c80949275353a9f99d2 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 21:01:01 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 21:01:01. --- .../20260504/20260504210002-Binary.backup | Bin 0 -> 265155 bytes .../20260504/20260504210002-Config.rsc | 4399 +++++++++++++++++ .../20260504/20260504210002-Diff-Config.rsc | 17 + 3 files changed, 4416 insertions(+) create mode 100644 MikroMaster/20260504/20260504210002-Binary.backup create mode 100644 MikroMaster/20260504/20260504210002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504210002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504210002-Binary.backup b/MikroMaster/20260504/20260504210002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..36b5f62042a24a9ad69fca95ac97d33165131859 GIT binary patch literal 265155 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%0DCI+H;>CGYknj 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νDC1%1NbJW(9J8P|(n;pP&a)z~q_)%HNC*>Hr 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

o`Afy3;uAYI!X>fOGpD&A-Qm=p^6DS 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

}1dq$Rzv2 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504210002-Config.rsc b/MikroMaster/20260504/20260504210002-Config.rsc new file mode 100644 index 0000000..f9ee8c2 --- /dev/null +++ b/MikroMaster/20260504/20260504210002-Config.rsc @@ -0,0 +1,4399 @@ +# 2026-05-04 21:00:03 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/593/61326945\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 20:25:03 04.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 GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\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 /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 :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\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=vados 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# :do {\r\ + \n# :onerror Err {\r\ + \n# :log info (\$0 \" Fetching script '\" . \$ScriptName . \"' from u\ + rl: \" . \$Url);\r\ + \n# :set tmpIndex [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) \$Ur\ + l dst-path=\$tmpIndex ];\r\ + \n# } do={\r\ + \n# :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n# :log warning (\$ScriptName . \" Failed downloading address-list\ + s index from: '\" . \$Url . \"' Error: \" . \$Err);\r\ + \n# }\r\ + \n# :error false;\r\ + \n# }\r\ + \n# \$WaitForFile \$tmpIndex;\r\ + \n\r\ + \n# :if (\$tmpIndex->\"status\" = \"finished\") do={\r\ + \n# :set arrLists [ :tolf (\$tmpIndex->\"Lists\") ];\r\ + \n# }\r\ + \n# } do={\r\ + \n# :log warning (\$ScriptName . \" Failed downloading address-list\ + s index from: '\" . \$Url . \"' Error: \" . \$Err);\r\ + \n# :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n# :error false;\r\ + \n# }\r\ + \n# :set tmpIndex false;\r\ + \n# :set arrLists false;\r\ + \n# :error true;\r\ + \n# }\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\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 Delim [ \$FindDelim \$Line ];\r\ + \n :if (\$Delim = 0) do={ :set Line \"\"; };\r\ + \n :if ([ :len \$Line ] = 0) do={\r\ + \n :do {\r\ + \n :log info (\$ScriptName . \" address-list entry: \" . \$Line . \ + \" is empty, or commented. Skipped.\"); \r\ + \n } on-error={ }\r\ + \n }\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 :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + {\r\ + \n :set (\$IPv4Addresses->\$Branch) ({}) };\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 :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\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 :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ + \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$ScriptName . \" Failed parsing address: \" . \$Lin\ + e->0);\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 debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ + ss . \\\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 debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ + ress . \\\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 debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ + ss . \\\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 debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ + ress . \\\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 debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ + \_. \\\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 debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ + \_. \\\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" +/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 +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +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 +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +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 +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=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,dns,www,api,reverse-proxy" crl-store=system +/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.0.0.0/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 enabled=yes 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 interface="ether1 - Unet" name=client1 \ + use-peer-dns=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=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/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=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" 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=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net 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 disabled=yes +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 disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +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 graphs-plain=no rest-plain=no webfig-plain=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 +/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 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 +/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/20260504/20260504210002-Diff-Config.rsc b/MikroMaster/history/20260504/20260504210002-Diff-Config.rsc new file mode 100644 index 0000000..7ead35e --- /dev/null +++ b/MikroMaster/history/20260504/20260504210002-Diff-Config.rsc @@ -0,0 +1,17 @@ +2920,2922c2920,2922 +< dont-require-permissions=no name=AM-FwAddrLists owner=vados policy=\ +< ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ +< !rsc by Vados\r\ +--- +> 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\ +3085,3090c3085 +< \n :if ([ :len \$Line ] = 0) do={\r\ +< \n :do {\r\ +< \n :log info (\$ScriptName . \" address-list entry: \" . \$Line . \ +< \" is empty, or commented. Skipped.\"); \r\ +< \n } on-error={ }\r\ +< \n }\r\ +--- +> \n :if ([ :len \$Line ] = 0) do={ :error true; }\r\ -- 2.52.0