From 4e5e2968766aa249b089deba2f593439a03561bc Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 7 May 2026 10:00:52 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 07 10:00:52. --- .../20260507/20260507100002-Binary.backup | Bin 0 -> 292716 bytes .../20260507/20260507100002-Config.rsc | 4601 +++++++++++++++++ .../20260507/20260507100002-Diff-Config.rsc | 28 + 3 files changed, 4629 insertions(+) create mode 100644 MikroMaster/20260507/20260507100002-Binary.backup create mode 100644 MikroMaster/20260507/20260507100002-Config.rsc create mode 100644 MikroMaster/history/20260507/20260507100002-Diff-Config.rsc diff --git a/MikroMaster/20260507/20260507100002-Binary.backup b/MikroMaster/20260507/20260507100002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..5fa89c427c5fd27327c956b3c6159abb4bcacd16 GIT binary patch literal 292716 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

{ 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260507/20260507100002-Config.rsc b/MikroMaster/20260507/20260507100002-Config.rsc new file mode 100644 index 0000000..946e543 --- /dev/null +++ b/MikroMaster/20260507/20260507100002-Config.rsc @@ -0,0 +1,4601 @@ +# 2026-05-07 10: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 Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\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 UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \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\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 (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\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 };\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\"; \"mod/AM-\ + Certs-By-Ident\" } 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 (a);\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 (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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/633/2f6d4158\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 14:35:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n: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={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n\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 warning (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ + um [ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" .\ + \_\$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-dnsForwarders\r\ + \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n\r\ + \n\r\ + \n/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 doh\ + -max-server-connections=20 use-doh-server=https://security.cloudflare-dns.\ + com/dns-query verify-doh-cert=no;\r\ + \n\r\ + \n/ip dns static\r\ + \n:do {\r\ + \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ + \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ + e=A\r\ + \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ + A\r\ + \n\r\ + \n/ip dns forwarders\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ + oH\"\r\ + \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ + Flare Secure DoH\"\r\ + \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ + 9 Default\" verify-doh-cert=no\r\ + \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ + \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ + \_name=\"Comss DoH\" verify-doh-cert=no\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ + dns-query name=\"CF & Google DoH\"\r\ + \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ + =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ + \n} on-error={ }\r\ + \n\r\ + \n" +add dont-require-permissions=no name=AM-ADguardHome-container owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-ADguardHome-container\r\ + \n# Script comment: ADguardHome-container to container | by @xdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n#/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53\r\ + \n# cat adguardhome_container.rsc\r\ + \n# adguard home to container | by @xdenb43\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +set wlan1 enable-nstreme=yes +set wlan2 enable-nstreme=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-download=yes crl-store=\ + system crl-use=yes +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=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 interfaces=wlan1,wlan2 \ + lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main dhcp-options=clientid,clientid_duid interface=\ + "ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.4.4,8.8.8.8 +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" name=dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 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 +add address=dns.quad9.net comment=Quad9-dns list=TrustedNS +add address=dns.google comment=Google-dns list=TrustedNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=TrustedNS +/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-list=WAN protocol=udp \ + src-address=!10.30.30.0/24 src-address-list=!TrustedNS +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-list=WAN protocol=tcp src-address=!10.30.30.0/24 \ + src-address-list=!TrustedNS +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-list=WAN 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-list=WAN protocol=udp \ + src-address-list=!TRUSTED +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 protocol=udp \ + src-address=10.30.30.0/24 +add action=accept chain=output comment="accept WireGuard" dst-address-list=\ + VPN-Server dst-port=13231 out-interface="ether1 - Unet" protocol=udp +add action=accept chain=input dst-port=29185 in-interface="ether1 - Unet" \ + protocol=tcp src-address-list=VPN-Server +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new +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="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 passthrough=\ + no +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-list=\ + Instagram new-routing-mark=To-VPN passthrough=no src-address=\ + 10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address-list=\ + Twitter new-routing-mark=To-VPN passthrough=no src-address=10.30.30.0/24 \ + src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address-list=\ + YouTube new-routing-mark=To-VPN passthrough=no src-address=10.30.30.0/24 \ + src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address-list=\ + facebook new-routing-mark=To-VPN passthrough=no 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 log-prefix=VPN-all new-routing-mark=To-VPN \ + passthrough=no 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 passthrough=no 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 log-prefix=VPN-Net new-routing-mark=To-VPN passthrough=no \ + src-address=10.30.30.0/24 +/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="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + log-prefix=WG-nat out-interface=WG routing-mark=To-VPN +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps dst-port=443 \ + in-interface="ether1 - Unet" log-prefix=2Amster protocol=tcp \ + routing-mark=!To-VPN to-addresses=10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp routing-mark=!To-VPN to-addresses=\ + 10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp routing-mark=\ + !To-VPN to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes dst-port=22 in-interface=\ + "ether1 - Unet" protocol=tcp routing-mark=!To-VPN to-addresses=\ + 10.30.30.33 to-ports=22 +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=accept chain=prerouting comment="Trusted DNS" in-interface-list=\ + WAN src-address-list=TrustedNS +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 +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=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +add blackhole disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG \ + routing-table=To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +add interface=WG type=external +add interface=wlan2 type=internal +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" disabled=yes interval=20m name=\ + AM-RKN-dnsLookup on-event="/system/script { run AM-RKN-dnsLookup; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260507/20260507100002-Diff-Config.rsc b/MikroMaster/history/20260507/20260507100002-Diff-Config.rsc new file mode 100644 index 0000000..13e6c7c --- /dev/null +++ b/MikroMaster/history/20260507/20260507100002-Diff-Config.rsc @@ -0,0 +1,28 @@ +4275,4276c4275,4276 +< connection-state=new dst-port=53 in-interface-list=WAN protocol=udp \ +< src-address=!10.30.30.0/24 src-address-list=!TrustedNS +--- +> connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ +> udp src-address=!10.30.30.0/24 +4279,4280c4279 +< in-interface-list=WAN protocol=tcp src-address=!10.30.30.0/24 \ +< src-address-list=!TrustedNS +--- +> in-interface="ether1 - Unet" protocol=tcp src-address=!10.30.30.0/24 +4284c4283,4284 +< 22,8291,2222 in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +--- +> 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ +> !TRUSTED +4287,4288c4287,4288 +< connection-state=new dst-port=5060 in-interface-list=WAN protocol=udp \ +< src-address-list=!TRUSTED +--- +> connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ +> udp +4398a4399,4400 +> add action=accept chain=prerouting in-interface-list=WAN src-address-list=\ +> TrustedNS +4401,4402d4402 +< add action=accept chain=prerouting comment="Trusted DNS" in-interface-list=\ +< WAN src-address-list=TrustedNS -- 2.52.0