В этой статье я попытаюсь создать пошаговую инструкцию по настройке не только простого доступа в интернет, но и по настройке некоторых типовых дополнительных функций.
1. Подключение роутера
Для первоначальной настройки необходимо подключить кабель провайдера в порт 1 и кабель от рабочей станции в порт 2.На рабочей станции установить ip адрес 192.168.3.5/24 Шлюз и DNS указывать не обязательно. Далее запустить WinBox и войти в роутер по Mac адресу используя логин admin и пустой пароль. Убедитесь, что в вашем роутере установлена прошивка новее чем 6.41.0, т.к. в ней было внесено существенное количество изменений и, некоторые возможности, присутствовавшие в предыдущих версиях, были заменены новыми.
В первую очередь выключаем ненужные сервисы:
Код: Выделить всё
/ip service set telnet address="" disabled=yes port=23 vrf=main
/ip service set ftp address="" disabled=yes port=21
/ip service set www address="" disabled=yes port=80 vrf=main
/ip service set ssh address="" disabled=yes port=22 vrf=main
/ip service set www-ssl address="" certificate=none disabled=yes port=443 tls-version=any vrf=main
/ip service set api address="" disabled=yes port=8728 vrf=main
/ip service set winbox address="" disabled=no port=8291 vrf=main
/ip service set api-ssl address="" certificate=none disabled=yes port=8729 tls-version=any vrf=main
Конфигурация сетевых интерфейсов по умолчанию для Mikrotik предполагает, что первый порт устройства ether1 используется как WAN для подключения к сети провайдера, последующие порты ether2, ether3 и.т.д. используются для подключения компьютеров к локальной сети. Мы зарезервируем ether2 для подключения второго провайдера internet. В меню Interface буква R — напротив интерфейса означает что он включен, что соответствует включенным светодиодам на самом устройстве, X — выключен.
Для удобства мы можем либо переименовать интерфейсы изменив поле Name, либо задать комментарий, при в поле Comment. Интерфейсу ether1 присвоим комментарий PoE_WAN, и оставим его зарезервированным. Ether2 присвоим комментарий WAN для подключения провайдера. Назовем их PoE_ether1 и WAN_ether2.
Код: Выделить всё
/interface ethernet set [ find default-name=ether1 ] comment=PoE_WAN disabled=no name=PoE_ether1
/interface ethernet set [ find default-name=ether2 ] comment=WAN disabled=no name=WAN_ether2
Код: Выделить всё
/interface bridge add dhcp-snooping=no disabled=no fast-forward=yes igmp-snooping=no name=LanBridge port-cost-mode=short protocol-mode=none vlan-filtering=no
Код: Выделить всё
/interface bridge port add interface=ether3 bridge=LanBridge bpdu-guard=no broadcast-flood=yes disabled=no fast-leave=no hw=yes ingress-filtering=no unknown-multicast-flood=yes unknown-unicast-flood=yes
/interface bridge port add interface=ether4 bridge=LanBridge bpdu-guard=no broadcast-flood=yes disabled=no fast-leave=no hw=yes ingress-filtering=no unknown-multicast-flood=yes unknown-unicast-flood=yes
/interface bridge port add interface=ether5 bridge=LanBridge bpdu-guard=no broadcast-flood=yes disabled=no fast-leave=no hw=yes ingress-filtering=no unknown-multicast-flood=yes unknown-unicast-flood=yes
/interface bridge port add interface=ether6 bridge=LanBridge bpdu-guard=no broadcast-flood=yes disabled=no fast-leave=no hw=yes ingress-filtering=no unknown-multicast-flood=yes unknown-unicast-flood=yes
/interface bridge port add interface=ether7 bridge=LanBridge bpdu-guard=no broadcast-flood=yes disabled=no fast-leave=no hw=yes ingress-filtering=no unknown-multicast-flood=yes unknown-unicast-flood=yes
/interface bridge port add interface=ether8 bridge=LanBridge bpdu-guard=no broadcast-flood=yes disabled=no fast-leave=no hw=yes ingress-filtering=no unknown-multicast-flood=yes unknown-unicast-flood=yes
Открываем меню IP, затем Addresses. В открывшемся окне Address List нажимаем Add (красный плюсик). В окне New Address в поле Address вводим адрес и маску локальной сети, у меня: 192.168.3.1/24. Если вы не знаете длину префикса маски, то набираем 192.168.3.1/255.255.255.0 и маска автоматически будет преобразована в 24. Interface устанавливаем как LanBridge. Нажимаем ОК.
Код: Выделить всё
/ip address add address=192.168.3.1/24 disabled=no interface=LanBridge network=192.168.3.0
Добавим адрес самого роутера в статические DNS. Для этого открываем IP, выбираем DNS и нажимаем кнопку Static. В поля добавляем локальный адрес роутера, который будет подставляться клиентам по DHCP в качестве основного DNS. В поле Name заносим алиас, например, router, в поле адрес указываем LAN ip, у меня это 192.168.3.1. Нажимаем OK.
Код: Выделить всё
/ip dns static add address=192.168.3.1 name=router
Код: Выделить всё
/interface ethernet set [ find default-name=ether2 ] mac-address=00:02:40:A2:0C:22
Для автоматизации настройки сетевых параметров у клиентов должен быть настроен DHCP сервер. Для этого в меню IP, выбираем подменю Pool, указываем имя пула и диапазон адресов для выдачи локальным клиентам. Нажимаем ОК.
Далее в IP/DHCP Server, нажатием плюсика, добавляем DHCP Server. В поле Interface выбираем ранее созданный локальный мост LanBridge. В поле Address Pool укажем диапазон адресов dhcp-pool созданный ранее. Нажимаем ОК.
Далее переходим на вкладку Networks и прописываем ip адрес локальной сети с маской, шлюз, маску 24 и dns server. Нажимаем ОК. Перезапустим сетевой интерфейс компьютера что бы получить новый адрес по DHCP.
Аналогичную настройку можно сделать при помощи мастера нажав на кнопку DHCP Server и последовательно нажимая далее.
Код: Выделить всё
/ip pool add name=LanIpPool ranges=192.168.3.2-192.168.3.50
/ip dhcp-server add address-pool=LanIpPool interface=LanBridge name=LanDHCPServer disabled=no
/ip dhcp-server network add address=192.168.3.0/24 dns-server=192.168.3.1 gateway=192.168.3.1
Код: Выделить всё
/ip dns set address-list-extra-time=0s allow-remote-requests=yes cache-max-ttl=1w cache-size=4096KiB doh-max-concurrent-queries=50 doh-max-server-connections=5 doh-timeout=5s max-concurrent-queries=100 max-concurrent-tcp-sessions=20 max-udp-packet-size=4096 query-server-timeout=2s query-total-timeout=10s servers=8.8.8.8,9.9.9.9 use-doh-server="" verify-doh-cert=no
Заходим во вкладку Interfaces. Нажимаем на кнопку с синим плюсом и выбираем из выпадающего списка PPPoE Client
На вкладке General задаем имя, например Dom_Ru, и интерфейс к которому подключен провайдер ether2.
На вкладке Dial Out прописываем параметры подключения, полученные от провайдера
Код: Выделить всё
/interface pppoe-client add name=Dom_Ru dial-on-demand=yes add-default-route=yes interface=ether1 disabled=no user=XXXXX password=YYYYY
Код: Выделить всё
/interface pppoe-client set Dom_Ru use-peer-dns=yes
Код: Выделить всё
/ip dns set allow-remote-requests=yes servers=91.144.186.3,5.3.3.3
Далее следует настроить группы внешних и внутренних интерфейсов.
Сначала создадим их:
Код: Выделить всё
/interface list add exclude="" include="" name=ExternalInterfaces
/interface list add exclude="" include="" name=LANInterface
/interface list add exclude="" include="" name=MainProvider
Код: Выделить всё
/interface list member add disabled=no interface=PoE_ether1 list=ExternalInterfaces
/interface list member add disabled=no interface=WAN_ether2 list=ExternalInterfaces
/interface list member add disabled=no interface=Dom_Ru list=ExternalInterfaces
/interface list member add disabled=no interface=Dom_Ru list=MainProvider
/interface list member add disabled=no interface=LanBridge list=LANInterface
Код: Выделить всё
/ip neighbor discovery-settings set discover-interface-list=!ExternalInterfaces lldp-med-net-policy-vlan=disabled mode=tx-and-rx protocol=cdp,lldp,mndp
Код: Выделить всё
/ip settings set accept-redirects=no accept-source-route=no allow-fast-path=yes arp-timeout=30s icmp-rate-limit=10 icmp-rate-mask=0x1818 ip-forward=yes max-neighbor-entries=8192 rp-filter=strict secure-redirects=yes send-redirects=yes tcp-syncookies=yes
/mpls settings set allow-fast-path=yes dynamic-label-range=16-1048575 propagate-ttl=yes
Отключаем лишние сервисы управления для доступа к Mikrotik. Переходим в меню IP\Services и отключаем их нажатием на крестик.
Зададим, фильтр подключений с определенного ip-адреса или сети задав его в поле «Available From».
Код: Выделить всё
/ip service print
/ip service disable 0,1,2,4,5,7
/ip service set www port=80 address=192.168.3.0/24
Код: Выделить всё
/user set admin password=12345678 group=full
По умолчанию скрипт настраивает firewall таким образом, чтобы пропускать из локальной сети наружу любой трафик (mascarading), а снаружи только тот, который запрашивается локальными хостами (dnat) и ping.
Скрипт автонастройки прописывает 6 правил фильтрации. В одном правиле можно задавать несколько состояний соединения (connection state) включая соединения отвечающее за сетевую трансляцию адресов (connection NAT state).
Создадим правило запрещающее доступ к wan-интерфейсу с диапазона IP, которые не должны использоваться в таблицах маршрутизации в Интернет. (bogon-сети). Для этого зададим список этих сетей в IP\Firewall\Address Lists:
Код: Выделить всё
/ip firewall address-list add address=0.0.0.0/8 disabled=no list=BOGON
/ip firewall address-list add address=10.0.0.0/8 disabled=no list=BOGON
/ip firewall address-list add address=100.64.0.0/10 disabled=no list=BOGON
/ip firewall address-list add address=127.0.0.0/8 disabled=no list=BOGON
/ip firewall address-list add address=169.254.0.0/16 disabled=no list=BOGON
/ip firewall address-list add address=172.16.0.0/12 disabled=no list=BOGON
/ip firewall address-list add address=192.0.0.0/24 disabled=no list=BOGON
/ip firewall address-list add address=192.0.2.0/24 disabled=no list=BOGON
/ip firewall address-list add address=192.168.0.0/16 disabled=yes list=BOGON
/ip firewall address-list add address=198.18.0.0/15 disabled=no list=BOGON
/ip firewall address-list add address=198.51.100.0/24 disabled=no list=BOGON
/ip firewall address-list add address=203.0.113.0/24 disabled=no list=BOGON
/ip firewall address-list add address=224.0.0.0/4 disabled=no list=BOGON
/ip firewall address-list add address=240.0.0.0/4 disabled=no list=BOGON
/ip firewall address-list add address=192.168.3.0/24 disabled=no list=lan-access
Код: Выделить всё
/ip firewall filter add action=drop chain=input comment="boggon input drop" disabled=no in-interface-list=ExternalInterfaces src-address-list=BOGON
/ip firewall raw add action=drop chain=prerouting comment="boggon input drop" in-interface-list=ExternalInterfaces src-address-list=BOGON
Код: Выделить всё
/ip firewall filter add action=reject chain=input comment="ip spoofing protect" connection-state=new protocol=tcp reject-with=tcp-reset tcp-flags=syn,ack
Код: Выделить всё
/ip firewall raw add action=add-src-to-address-list address-list=HoneyPotBlocked address-list-timeout=30m chain=prerouting dst-port=5061,81,400 in-interface-list=ExternalInterfaces protocol=tcp
/ip firewall raw add action=add-src-to-address-list address-list=HoneyPotBlocked address-list-timeout=30m chain=prerouting dst-port=5061,81,400 in-interface-list=ExternalInterfaces protocol=udp
/ip firewall raw add action=drop chain=prerouting comment="HoneyPot block" in-interface-list=ExternalInterfaces src-address-list=HoneyPotBlocked
Код: Выделить всё
/ip firewall filter add action=drop chain=input dst-port=22 protocol=tcp src-address-list=ssh_blacklist comment=«Block SSH brute forcers»
/ip firewall filter add action=add-src-to-address-list address-list=ssh_blacklist address-list-timeout=1h30m chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage3
/ip firewall filter add action=add-src-to-address-list address-list=ssh_stage3 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage2
/ip firewall filter add action=add-src-to-address-list address-list=ssh_stage2 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage1
/ip firewall filter add action=add-src-to-address-list address-list=ssh_stage1 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp
/ip firewall filter add chain=input connection-state=new dst-port=22 protocol=tcp
/ip firewall raw add action=drop chain=prerouting comment="Block SSH brute forcers" dst-port=22 in-interface-list=ExternalInterfaces protocol=tcp src-address-list=ssh_blacklist
Код: Выделить всё
/ip firewall filter add chain=input protocol=tcp dst-port=21 src-address-list=ftp_blacklist action=drop comment=«Drop FTP brute forcers»
/ip firewall filter add chain=output action=accept protocol=tcp content=«530 Login incorrect» dst-limit=1/1m,9,dst-address/1m
/ip firewall filter add chain=output action=add-dst-to-address-list protocol=tcp content=«530 Login incorrect» address-list=ftp_blacklist address-list-timeout=3h
/ip firewall raw add action=drop chain=prerouting comment="Block FTP brute forcers" dst-port=21 in-interface-list=ExternalInterfaces protocol=tcp src-address-list=ftp_blacklist
Код: Выделить всё
/ip firewall raw add action=drop chain=prerouting comment="Drop external DNS requests" dst-port=53 in-interface-list=ExternalInterfaces protocol=udp src-address-list=!Router_address
/ip firewall raw add action=drop chain=prerouting comment="Drop external DNS requests" dst-port=53 in-interface-list=ExternalInterfaces protocol=tcp src-address-list=!Router_address
Код: Выделить всё
/ip firewall filter add action=jump chain=input comment="jump to ICMP chain" in-interface-list=ExternalInterfaces jump-target=icmp protocol=icmp
/ip firewall filter add action=accept chain=icmp comment="ICMP chain:allow echo request" icmp-options=8:0 protocol=icmp
/ip firewall filter add action=accept chain=icmp comment="ICMP chain:echo reply" icmp-options=0:0 protocol=icmp
/ip firewall filter add action=accept chain=icmp comment="ICMP chain:net unreachable" icmp-options=3:0 protocol=icmp
/ip firewall filter add action=accept chain=icmp comment="ICMP chain:host unreachable" icmp-options=3:1 protocol=icmp
/ip firewall filter add action=accept chain=icmp comment="ICMP chain:host unreachable fragmentation required" icmp-options=3:4 protocol=icmp
/ip firewall filter add action=accept chain=icmp comment="ICMP chain:allow time exceed" icmp-options=11:0 protocol=icmp
/ip firewall filter add action=accept chain=icmp comment="ICMP chain:allow parameter bad" icmp-options=12:0 protocol=icmp
/ip firewall filter add action=drop chain=icmp comment="ICMP chain:deny all other types"
Код: Выделить всё
/ip firewall filter add action=accept chain=input comment=ping in-interface-list=!ExternalInterfaces protocol=icmp
Код: Выделить всё
/ip firewall filter add action=fasttrack-connection chain=input comment="accept established & related" connection-state=established,related,untracked disabled=no hw-offload=yes
/ip firewall filter add action=accept chain=input comment="accept established & related" connection-state=established,related,untracked disabled=no
/ip firewall filter add action=fasttrack-connection chain=forward comment="established forward & related" connection-state=established,related,untracked disabled=no hw-offload=yes
/ip firewall filter add action=accept chain=forward comment="established forward & related" connection-state=established,related,untracked disabled=no
Код: Выделить всё
/ip firewall filter add action=drop chain=forward comment="Drop incoming packets that are not NATted" connection-nat-state=!dstnat connection-state=new disabled=no in-interface-list=ExternalInterfaces log=no log-prefix=!NAT
/ip firewall filter add action=drop chain=input comment="drop input" disabled=no in-interface-list=ExternalInterfaces
/ip firewall filter add action=drop chain=forward comment="drop all except DSTNAT" connection-nat-state=!dstnat disabled=no in-interface-list=ExternalInterfaces
/ip firewall filter add action=drop chain=forward comment="drop forward" connection-state=invalid
Код: Выделить всё
/ip firewall filter add action=accept chain=input
/ip firewall filter add action=accept chain=output out-interface-list=ExternalInterfaces
/ip firewall filter add action=accept chain=output src-address-list=Router_address
Код: Выделить всё
/ip firewall nat add action=masquerade chain=srcnat disabled=no out-interface-list=ExternalInterfaces
Код: Выделить всё
/ip firewall nat add action=dst-nat chain=dstnat comment="Capture DNS traffic and redirect to google" dst-address-list=!Router_address dst-port=53 protocol=tcp to-addresses=8.8.8.8
/ip firewall nat add action=dst-nat chain=dstnat comment="Capture DNS traffic and redirect to google" dst-address-list=!Router_address dst-port=53 protocol=udp to-addresses=8.8.8.8
Код: Выделить всё
/ip firewall connection tracking set tcp-established-timeout=1h
Для отображения корректного времени на устройстве, необходимо настроить SNTP-клиент на синхронизацию времени с внешними ntp-серверами. Переходим в меню System\SNTP Client отмечаем галку Enable и вводим ip-адреса первичного и вторичного серверов времени. Для получения самих адресов воспользуемся командой nslookup, например, на адрес ru.pool.ntp.org.
Код: Выделить всё
/system ntp client set enabled=yes mode=unicast servers=194.190.168.1,95.163.183.223,185.209.85.222,91.206.16.3 vrf=main
Код: Выделить всё
/system clock set time-zone-autodetect=yes time-zone-name=Europe/Moscow
Код: Выделить всё
/system ntp server set auth-key=none broadcast=yes broadcast-addresses=192.168.3.255 enabled=yes local-clock-stratum=5 manycast=yes multicast=yes use-local-clock=yes vrf=main
Переходим в меню IP\UPnP и ставим галочку Enabled
Нажимаем кнопку Interfaces и добавляем наши интерфейсы с помощью синего плюса.
Код: Выделить всё
/ip upnp set allow-disable-external-interface=no enabled=yes show-dummy-rule=yes
/ip upnp interfaces add disabled=no interface=Dom_Ru type=external
/ip upnp interfaces add disabled=no interface=LanBridge type=internal
Для большинства конфигураций делать этого не требуется, но если возникла необходимость, то делаем так:
Код: Выделить всё
/ip firewall nat add chain=dstnat dst-port=3389 action=dst-nat protocol=tcp to-address=192.168.3.50 to-port=3389 comment=«RDP port mapping»
Код: Выделить всё
add action=accept chain=forward comment="Accept RDP from White List" connection-state=established,related,new,untracked disabled=no dst-port=3389-3390 protocol=tcp src-address-list=RDP_white_list
add action=reject chain=forward comment="Block RDP bruteforce" disabled=no log=no log-prefix="Blocked RDP - " reject-with=icmp-network-unreachable src-address-list="Blocked RDP bruteforcers"
add action=add-src-to-address-list address-list="Blocked RDP bruteforcers" address-list-timeout=15m chain=forward connection-state=new disabled=no dst-port=3389-3390 log=yes log-prefix="RDP BRUTEFORCE - " protocol=tcp src-address-list=rdp_bruteforce3
add action=add-src-to-address-list address-list=rdp_bruteforce3 address-list-timeout=10m chain=forward connection-state=new disabled=no dst-port=3389-3390 log=no log-prefix="RDP BRUTEFORCE - STAGE3 - " protocol=tcp src-address-list=rdp_bruteforce2
add action=add-src-to-address-list address-list=rdp_bruteforce2 address-list-timeout=10m chain=forward connection-state=new disabled=no dst-port=3389-3390 log=no log-prefix="RDP BRUTEFORCE - STAGE2 - " protocol=tcp src-address-list=rdp_bruteforce1
add action=add-src-to-address-list address-list=rdp_bruteforce1 address-list-timeout=10m chain=forward connection-state=new disabled=no dst-port=3389-3390 log=no log-prefix="RDP BRUTEFORCE - STAGE1 - " protocol=tcp src-address-list=rdp_bruteforce0
add action=add-src-to-address-list address-list=rdp_bruteforce1 address-list-timeout=10m chain=forward connection-state=new disabled=no dst-port=3389-3390 log=no log-prefix="RDP BRUTEFORCE - STAGE0 - " protocol=tcp
12. Настройка VPN
Настройка VPN во многом аналогична настройке PPPoE соединения, поэтому пройдем по ней кратко.
Код: Выделить всё
/interface wireguard add disabled=no listen-port=13231 mtu=1420 name=wireguard_VPN
/interface wireguard peers add allowed-address=0.0.0.0/0,::/0 client-endpoint="" disabled=no endpoint-address=11.22.33.44 endpoint-port=33313 interface=wireguard_VPN persistent-keepalive=25s preshared-key="ZPXXXXXXXXXXXXXXXXXXX=" private-key="" public-key="MQYYYYYYYYYYYYYYYY="
/ip address add address=10.8.6.4 interface=wireguard network=10.8.6.0
/interface list add name=VPN
/interface list member add disabled=no interface=wireguard_VPN list=ExternalInterfaces
/interface list member add disabled=no interface=wireguard_VPN list=VPN
/routing table add disabled=no fib name=VPN
/routing table add disabled=no fib name=NoVPN
/ip route add comment="VPN passthrow" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=wireguard_VPN routing-table=VPN scope=30 suppress-hw-offload=no target-scope=10
/ip route add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=Dom_Ru routing-table=NoVpn scope=30 suppress-hw-offload=no target-scope=10
/ip firewall mangle add action=change-mss chain=forward new-mss=1300 out-interface=wg2 protocol=tcp tcp-flags=syn tcp-mss=1301-65535
/ip settings set accept-redirects=no accept-source-route=no allow-fast-path=yes arp-timeout=30s icmp-rate-limit=10 icmp-rate-mask=0x1818 ip-forward=yes max-neighbor-entries=8192 rp-filter=no secure-redirects=yes send-redirects=yes tcp-syncookies=yes
/ip route add comment=Wireguard disabled=no distance=1 dst-address=11.22.33.44/32 gateway=Dom_Ru pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10
/interface pppoe-client set Dom_Ru default-route-distance=2
Добавляем правило для списка адресов, который будет всегда ходить через VPN
Код: Выделить всё
add action=mark-routing chain=prerouting disabled=no comment="Rule for redirect to VPN" dst-address-list=ToVPN_IP new-routing-mark=VPN passthrough=yes
Код: Выделить всё
/ip firewall mangle add action=mark-routing chain=prerouting comment="Pass DNS to VPN" dst-address=8.8.8.8 new-routing-mark=VPN passthrough=yes
Код: Выделить всё
/ip firewall address-list add list=ToVPN_IP address=8.8.8.8
Код: Выделить всё
/ip firewall mangle add action=mark-routing chain=prerouting comment="To VPN Server" dst-address-list=VPN_Server in-interface=!Dom_Ru new-routing-mark=NoVpn passthrough=yes
Код: Выделить всё
/ip route add comment="Default gateway for VPN inactive" disabled=no distance=10 dst-address=0.0.0.0/0 gateway=Dom_Ru routing-table=VPN scope=30 suppress-hw-offload=no target-scope=10
/ip route add comment="Check that VPN available" check-gateway=ping disabled=no distance=1 dst-address=8.8.8.8/32 gateway=wireguard_VPN routing-table=main scope=30 suppress-hw-offload=no target-scope=10
Бывают случаи, когда требуется сохранить параметры для последующего восстановления. Для этого случая существует специальная команда:
Код: Выделить всё
/export file=backup.rsc
Код: Выделить всё
/export file=backup.rsc show-sensitive
Для восстановления настроек из файла необходимо выполнить следующую команду:
Код: Выделить всё
/import backup.rsc
Роутер поддерживает скрипты. Один из полезных скриптов приведен ниже. Он проверяет наличие обновлений прошивки и, в случае нахождения обновления отсылает письмо. В качестве бонуса вкладывает в письмо текущие настройки.
Код: Выделить всё
{
## Check for update and send email with configuration if any
:log info "Starting Update check and backup script...";
## Notification e-mail
:local Eaccount "ASDFGHJK@gmail.com";
## Resolve SMTP name and prepare backup variable
:local sysname [/system identity get name];
:local sysver [/system package get routeros version];
:local localSubj "Empty"
:local localBody "Empty"
:log info "Flushing DNS cache...";
/ip dns cache flush;
:delay 2;
:local smtpserv [:resolve "smtp.gmail.com"];
## Check for update
/system package update
## Set channel not working on the latest FW
## set channel=current
check-for-updates
## Wait on slow connections
:delay 15s;
## Changelog location
:local Changelog "https://download.mikrotik.com/routeros/$[/system package update get latest-version]/CHANGELOG";
:local ChangelogFilename "changelog_latest.txt";
## Important note: "installed-version" was "current-version" on older Router OSes
:if ([get installed-version] != [get latest-version]) do={
## New version of RouterOS available
:log info ("Upgrade available for RouterOS on router $sysname from $[/system package update get installed-version] to $[/system package update get latest-version] (channel:$[/system package update get channel])")
:set localSubj "RouterOS need to be upgraded on router $sysname"
:set localBody "Upgrade for RouterOS available on router $sysname from $[/system package update get installed-version] to $[/system package update get latest-version] (channel:$[/system package update get channel])"
} else={
## RouterOS latest, let's check for updated firmware
:log info ("No RouterOS upgrade found, checking for HW upgrade...")
/system routerboard
:if ( [get current-firmware] != [get upgrade-firmware]) do={
## New version of firmware available
:log info ("Firmware upgrade available on router $sysname from $[/system routerboard get current-firmware] to $[/system routerboard get upgrade-firmware]")
:set localSubj "Firmware need to be updated on router $sysname"
:set localBody "Firmware upgrade available on router $sysname from $[/system routerboard get current-firmware] to $[/system routerboard get upgrade-firmware]"
} else={
:log info ("No Router HW upgrade found")
}
}
:log info "localSubj= $localSubj ";
:log info "localBody=$localBody";
:if ( !($localSubj = "Empty")) do={
:log info "Deleting last Backups...";
:foreach i in=[/file find] do={:if ([:typeof [:find [/file get $i name] \
"$sysname-backup-"]]!="nil") do={/file remove $i}};
:delay 2;
:do {/file remove $ChangelogFilename} on-error={};
## Downloading changelog file
/tool fetch mode=https url=("$Changelog") dst-path=("$ChangelogFilename");
## Backup configuration
:local backupfile ("$sysname-backup-" . \
[:pick [/system clock get date] 0 4] . [:pick [/system \
clock get date] 5 7] . [:pick [/system clock get date] 8 10] . ".backup");
:log info "Creating new Full Backup file...";
/system backup save name=$backupfile;
:delay 5;
:local exportfile ("$sysname-backup-" . \
[:pick [/system clock get date] 0 4] . [:pick [/system \
clock get date] 5 7] . [:pick [/system clock get date] 8 10] . ".rsc");
:log info "Creating new Setup Script file...";
/export verbose file=$exportfile;
:delay 5;
:log info "Sending Full Backup file via E-mail...";
/tool e-mail send to=$Eaccount server=$smtpserv \
port=587 file=($backupfile ."," . $exportfile . "," . $ChangelogFilename) \
subject=("$localSubj") \
body=("$localBody");
:delay 10;
}
}
Код: Выделить всё
/tool e-mail set from=<ASDFGHJK@gmail.com> port=587 server=0.0.0.0 tls=starttls user=ASDFGHJK@gmail.com vrf=main
Имеет смысл использовать встроенный планировщик и поставить вызов этого скрипта по расписанию. Например, так:
Код: Выделить всё
/system scheduler add disabled=no interval=1w name=CheckForUpdate on-event=CheckUpdateAndEmail policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=2024-07-11 start-time=12:00:00
Для удобства использования можно прописать имя роутера:
Код: Выделить всё
/system identity set name=MikroTik_Configured