В рамках данного эксперимента я попробую развернуть в RouterOS контейнеры с различными сервисами и дать оценку, насколько это удобно и эффективно. Может ли роутер Mikrotik стать альтернативой, скажем, SBC (Single Board Computer). И есть ли перспективы у “умных роутеров”.
В качестве подопытного кролика я возьму Mikrotik RB4011iGS+5HacQ2HnD-IN, который на момент теста стоил $250. Его ключевые характеристики - https://i.mt.lv/cdn/product_files/RB4011-IN_240134.pdf. Это CPU AL21400 4 ядра ARM Cortex-A15 1.4GHz, 1GB RAM, 512MB NAND, 10x 1Gbit Ethernet, 1x SFP+. К сожалению, возможностей для расширения практически не предусмотрено. Есть только внутренняя карта Mini PCIe, использовать которую в целом проблематично.
В штатном состоянии достаточно много свободных ресурсов (/system resource print)
/system resource print смотрю архитектуру в строке “architecture-name”./system routerboard upgrade).container-*version*.npk из скачанного архива.
Перезагружаю роутер и в меню должен появиться “Container”. Также можно проверить командой
/system package print./system/device-mode/update container=yes/container/config/set registry-url=https://registry-1.docker.ioДля начала я решил провести эксперимент с достаточно практичной задачей. Организовать обратный прокси для внутренних сервисов. Для этого я решил использовать Traefik, который уже успешно применял до этого и в части поддержики Let’s Encrypt он мне показался намного проще, чем nginx.
/interface/veth/add name=veth-traefik address=172.94.0.2/24 gateway=172.94.0.1/container/add remote-image=traefik:latest interface=veth-traefik start-on-boot=yes logging=yes/container/print для последующих операций.
Если это у нас первый, то скороее всего его индекс будет 0./container/start 0 и можем в него зайти /container/shell 0netstat -an должна показать, что порт 80 слушается. Но попытки пропинговать,
например, ping 1.1.1.1 не дадут успеха, надо настроить сеть./interface/bridge/add name=containers/interface/bridge/port/add bridge=containers interface=veth-traefik/ip/address/add address=172.94.0.1/24 interface=containers/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.94.0.0/24 comment="containers"ping 1.1.1.1 из нашего контейнера должен заработать/ip firewall nat add action=dst-nat chain=dstnat dst-address=192.168.1.1 dst-port=8097 protocol=tcp to-addresses=172.94.0.2 to-ports=80 comment="traefik"/ip firewall nat add in-interface=ether1 chain=dstnat action=dst-nat protocol=tcp dst-port=443 to-addresses=192.168.1.5 to-ports=443wget http://192.168.1.14:8073mkdir /etc/traefik и основной конфигурационный файл
vi /etc/traefik/traefik.yml следующего содержания:global:
checkNewVersion: true
sendAnonymousUsage: false
entryPoints:
http:
address: ":80"
providers:
file:
filename: "/etc/traefik/config.yml"
watch: true
vi /etc/traefik/config.yml:http:
routers:
my-test:
entryPoints:
- http
service: my-test
rule: "Host(`test.local`)"
services:
my-test:
loadBalancer:
servers:
- url: "http://192.168.1.14:8073"
./traefik -f traefik.yml./container/stop 0 и /container/start 0.curl 192.168.1.1:8097 -H "Host: test.local". Если всё работает,
то мы должны увидеть содержимое страницы веб-сервера, на который хотели перенаправить запросы.По итогам мы получаем следующее состояние доступных ресурсов (/system resource print)
До этого я никогда им не пользовался, но кажущая простота настройки подкупила.
Настройка осуществляется аналогичным образом за исключением конфигурационного файла
vi /etc/caddy/Caddyfile:
{
local_certs
}
test.local {
reverse_proxy http://192.168.1.4:8073
}
Если заменить local_certs на email "my-mail@domain.com" и поставить публичный домен, то Caddy
самостоятельно сгенерирует сертификаты для домена используя Let’s Encrypt.