From c47ae38b6279a5498b0cd74ddcd805b7279b81d8 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 7 May 2026 06:00:19 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 07 06:00:19. --- .../20260507/20260507060002-Binary.backup | Bin 0 -> 280302 bytes .../20260507/20260507060002-Config.rsc | 4600 +++++++++++++++++ .../20260507/20260507060002-Diff-Config.rsc | 41 + 3 files changed, 4641 insertions(+) create mode 100644 MikroMaster/20260507/20260507060002-Binary.backup create mode 100644 MikroMaster/20260507/20260507060002-Config.rsc create mode 100644 MikroMaster/history/20260507/20260507060002-Diff-Config.rsc diff --git a/MikroMaster/20260507/20260507060002-Binary.backup b/MikroMaster/20260507/20260507060002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..384a76820c21d36ea9ed28dba022fc322aa1d6e9 GIT binary patch literal 280302 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 Nr8vj))7~r2AlFI7YyJQL literal 0 HcmV?d00001 diff --git a/MikroMaster/20260507/20260507060002-Config.rsc b/MikroMaster/20260507/20260507060002-Config.rsc new file mode 100644 index 0000000..3291db3 --- /dev/null +++ b/MikroMaster/20260507/20260507060002-Config.rsc @@ -0,0 +1,4600 @@ +# 2026-05-07 06: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=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 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" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +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 list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack 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=\ + 10.30.30.0/24 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=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + 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 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps dst-port=443 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat disabled=yes dst-port=22 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=22 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +add interface=WG type=external +add interface=wlan2 type=internal +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" disabled=yes interval=20m name=\ + AM-RKN-dnsLookup on-event="/system/script { run AM-RKN-dnsLookup; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260507/20260507060002-Diff-Config.rsc b/MikroMaster/history/20260507/20260507060002-Diff-Config.rsc new file mode 100644 index 0000000..912f8ef --- /dev/null +++ b/MikroMaster/history/20260507/20260507060002-Diff-Config.rsc @@ -0,0 +1,41 @@ +3534c3534 +< add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ +--- +> add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=::/0 \ +4342,4343c4342 +< log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack passthrough=\ +< no +--- +> log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +4347,4349c4346,4348 +< 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=Instagram dst-address=\ +> !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ +> src-address=10.30.30.0/24 src-address-list=!NoWG +4351,4355c4350,4354 +< 10.30.30.0/24 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 +--- +> !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ +> src-address=10.30.30.0/24 src-address-list=!NoWG +> add action=mark-routing chain=prerouting comment=YouTube dst-address=\ +> !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ +> src-address=10.30.30.0/24 src-address-list=!NoWG +4360,4361c4359,4361 +< log-prefix=VPN-all new-routing-mark=To-VPN passthrough=no src-address=\ +< 10.30.30.0/24 src-address-list=!NoWG +--- +> disabled=yes dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina \ +> log-prefix=VPN-all new-routing-mark=To-VPN src-address=10.30.30.0/24 \ +> src-address-list=!NoWG +4363,4364c4363 +< out-interface=WG passthrough=no protocol=tcp tcp-flags=syn tcp-mss=\ +< 1381-65535 +--- +> out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 -- 2.52.0