▍Установка MikroTik RouterOS на VDS¶
Введение¶
Чтобы нам развернуть CHR подойдёт любая VDS с уже предустановленной OS, для нас это не особо важно, т.к. по итогу образ затрёт старую систему. В данном примере будет использоваться свежая установленная CentOS 9 и образ CHR 7.13.2, т.к. на новых версиях сталкивался с ошибкой XZ-compressed data is corrupt после перезагрузки. По итогу остановился на установке этой версии, а далее уже через WinBox обновился до последней актуальной версии CHR.
Установка образа RouterOS поверх CentOS 9¶
Тут всё просто если это чистый базовый образ ОС, то устанавливаем следующие пакеты:
Теперь можно выполнить весь этот скрипт в консоли сервера, не забудьте изменить значения в переменных "name" и "password" на те значения логина и пароль, с которыми вы далее будете подключаться через WinBox к роутеру:
wget https://download.mikrotik.com/routeros/7.13.2/chr-7.13.2.img.zip -O chr.img.zip && \
gunzip -c chr.img.zip > chr.img && \
mount -o loop,offset=33571840 chr.img /mnt && \
ADDRESS=`ip addr show ens3 | grep global | cut -d' ' -f 6 | head -n 1` && \
GATEWAY=`ip route list | grep default | cut -d' ' -f 3` && \
echo "/ip address add address=$ADDRESS interface=[/interface ethernet find where name=ether1]
/ip route add gateway=$GATEWAY
/ip service disable telnet
/user set 0 name=USERNAME password=PASSWORD
" > /mnt/rw/autorun.scr && \
umount /mnt && \
echo u > /proc/sysrq-trigger && \
dd if=chr.img bs=1024 of=/dev/vda && \
echo "sync disk" && \
echo s > /proc/sysrq-trigger && \
echo "Sleep 5 seconds" && \
sleep 5 && \
echo "Ok, reboot" && \
echo b > /proc/sysrq-trigger
Примечание: Также, возможно, потребуется поменять имя интерфейса в "ip addr show ens3", актуальное имя можно узнать командой ip a:
В зависимости от версии chr-7..img число в **offset=33571840* может меняться, чтобы его узнать потребуется выполнить следующие действия:
root@vds:~# fdisk -l chr.img
Disk chr.img: 128 MiB, 134217728 bytes, 262144 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
chr.img1 * 34 65569 65536 32M 83 Linux
chr.img2 65570 258047 192478 94M 83 Linux
Видим что второй раздел начинается с 65570 (столбец Start), теперь умножим данное число на 512 (количество байт сектора) получим - 33571840, которое будет нужным нам значением в смещении (offset).
После последней команды "echo b > /proc/sysrq-trigger" сервер должен перезагрузиться и если смотреть в консоль VNC в панели хостера, то должна будет появиться форма авторизации:
Если вы видите что-то похожее, то вы великолепны! Запускаем утилиту WinBox, вводим указанные ранее логин, пароль и IP сервера.
Базовая настройка¶
Пример базового роутера с поддержкой Wireguard
/interface ethernet
set [ find default-name=ether1 ] disable-running-check=no
/interface wireguard
add listen-port=45678 mtu=1420 name=wireguard private-key=\
"BeoTmy5w9mx2kID0O/giswibs4hev7ZQFZBqZmH6qRQ="
/interface list
add comment=defconf name=WAN
add comment=defconf name=LAN
/port
set 0 name=serial0
/ip neighbor discovery-settings
set discover-interface-list=LAN
/interface list member
add interface=ether1 list=WAN
/interface wireguard peers
add allowed-address=10.8.8.2/32,192.168.0.0/24 interface=wireguard name=\
"home mikrotik" persistent-keepalive=10s public-key=\
"UOy9bquzdwGHhY4rCKVamaV/n9wIZTkBfOXEOwCIgno="
/ip address
add address=$ADDRESS interface=ether1 network=$ADDRESS
add address=10.8.8.1/24 interface=wireguard network=10.8.8.0
/ip dhcp-client
add interface=ether1
/ip dns
set servers=8.8.8.8,8.8.4.4
/ip firewall address-list
add address=192.168.0.0/24 comment="Home Local" disabled=yes list=allow-ip
add address=Ваш_домашний_ip comment=Home list=allow-ip
/ip firewall filter
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="Allow IGMP" in-interface=ether1 \
protocol=igmp
add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp
add action=accept chain=input comment="Accept WireGuard" dst-port=45678 \
in-interface=ether1 log=yes log-prefix=WG: protocol=udp
add action=accept chain=input comment="Accept Winbox connection from Home" \
dst-port=8291 protocol=tcp src-address-list=allow-ip
add action=drop chain=input comment="defconf: drop all not coming from LAN"
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=fasttrack-connection chain=forward comment="defconf: fasttrack" \
connection-state=established,related disabled=yes hw-offload=yes
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-list=WAN
add action=log chain=output disabled=yes log=yes log-prefix=dns_flood \
out-interface-list=WAN
/ip firewall nat
add action=masquerade chain=srcnat ipsec-policy=out,none out-interface-list=\
WAN
/ip route
add
add gateway=$GATEWAY
add disabled=no distance=1 dst-address=192.168.0.0/24 gateway=wireguard routing-table=main scope=30 suppress-hw-offload=no target-scope=10
/ip service
set telnet disabled=yes
set ftp disabled=yes
set www disabled=yes
set ssh disabled=yes
set api disabled=yes
set api-ssl disabled=yes
/system note
set show-at-login=no
/tool bandwidth-server
set authenticate=no enabled=no
/tool mac-server
set allowed-interface-list=LAN
/tool mac-server mac-winbox
set allowed-interface-list=LAN
/tool mac-server ping
set enabled=no
Все команды выше нужно скопировать (не забудьте поменять переменные $ADDRESS, $GATEWAY, address=Ваш_домашний_ip и ключи от wireguard) и вставить в терминал роутера:
Генерация приватного и публичного ключа от wireguard
$ wg genkey | tee privatekey | wg pubkey > publickey
$ cat privatekey
ABYLZKUjdN3Nw7OXZCX/nAKep9D/uyPtKt6T35mx2nU=
$ cat publickey
xgIkg+pEeuzZHHjECeVmJ0cKBOxy7IBHz8tX2tS6pWc=