MikroTik CHR на Proxmox: свой роутер и изолированная сеть для виртуалок
У Proxmox есть удобная возможность, о которой многие не знают: можно поднять полноценный MikroTik прямо виртуалкой и спрятать за ним остальные машины. Получается сеть внутри гипервизора — со своей адресацией, своим NAT и своим межсетевым экраном, никак не связанная с домашней или офисной сетью.
Зачем это нужно:
- Изолировать стенды. Всё, что вы поднимаете «на посмотреть», не видит домашнюю сеть и не мешает ей.
- Тренироваться на RouterOS без железки. Конфигурация ровно та же, что на настоящем MikroTik.
- Повторять схему клиента у себя: те же подсети, те же правила.
- Управлять доступом наружу централизованно: одно место, где решается, кому и куда можно.
Раньше под такие задачи покупали бэушное железо с авито и городили стойку в кладовке. Теперь это одна виртуалка на 256 мегабайт памяти, которая поднимается за десять минут и сносится за десять секунд.
Твоя Циска в зоне риска.
Разберу по шагам.
Сначала про лицензию
Момент, на котором спотыкаются все. CHR — это RouterOS для виртуальных машин, и он бесплатен, но бесплатная лицензия ограничивает каждый интерфейс скоростью 1 Мбит/с.
Для изучения и настройки этого хватает. Для реального трафика — нет.
При первом запуске доступен пробный период на 60 дней без ограничений: его достаточно, чтобы понять, нужна ли платная лицензия. Платные уровни различаются потолком скорости — гигабит, десять гигабит, без ограничений.
Держите это в голове: если после настройки всё работает, но упирается в мегабит, дело не в вашей конфигурации.
Загрузка образа и создание машины
MikroTik раздаёт CHR несколькими способами; проще всего взять raw-образ диска и подсунуть его готовой виртуалке.
На узле Proxmox, по SSH:
cd /tmp
wget https://download.mikrotik.com/routeros/7.20/chr-7.20.img.zip
unzip chr-7.20.img.zip
Версию подставьте актуальную — список есть на сайте MikroTik в разделе загрузок, вкладка Cloud Hosted Router.
Создаём машину. Аппетиты у CHR скромные:
qm create 200 --name chr --memory 256 --cores 1 \
--net0 virtio,bridge=vmbr0 \
--scsihw virtio-scsi-pci
Подключаем скачанный образ как диск:
qm disk import 200 chr-7.20.img local-lvm
В старых версиях Proxmox эта команда называлась qm importdisk — если
ругается на синтаксис, попробуйте прежнее имя.
Команда напечатает, куда лёг диск. Подключаем его и указываем загрузку:
qm set 200 --scsi0 local-lvm:vm-200-disk-0
qm set 200 --boot order=scsi0
qm set 200 --onboot 1
Машина готова. Пока у неё один интерфейс, смотрящий в вашу основную сеть.
Вторая сеть: мост без физического порта
Вот ключевая часть.
В Proxmox сетевой мост — это виртуальный коммутатор. Обычно к нему привязан физический порт, и всё, что подключено, оказывается в общей сети. Но мост можно создать без физического порта вообще — тогда получится замкнутый сегмент внутри гипервизора.
В веб-интерфейсе: Узел → System → Network → Create → Linux Bridge.
- Name:
vmbr1 - Bridge ports: оставить пустым — это и делает сеть изолированной
- IPv4/CIDR: тоже оставить пустым
- Autostart: включить
Про пустой адрес отдельно. Если не давать мосту IP, сам гипервизор в эту сеть не входит. Виртуалки общаются между собой и с роутером, а хост остаётся снаружи. Так правильнее: меньше точек соприкосновения, и если стенд что-то натворит, до гипервизора он не дотянется.
Нажмите Apply Configuration. Сеть создана.
Добавляем CHR второй интерфейс
qm set 200 --net1 virtio,bridge=vmbr1
Теперь у роутера две ноги:
| Интерфейс | Мост | Роль |
|---|---|---|
ether1 |
vmbr0 |
наружу, в вашу основную сеть |
ether2 |
vmbr1 |
внутрь, к виртуалкам |
Запускаем: qm start 200. Консоль открывается в веб-интерфейсе Proxmox.
Вход — admin, пароль пустой. RouterOS сразу потребует задать новый,
и это правильно: роутер без пароля в сети живёт недолго.
Настройка RouterOS
Важная особенность: у CHR нет никакой начальной конфигурации. В отличие от железных MikroTik, которые из коробки приезжают с настроенным мостом, DHCP и межсетевым экраном, здесь пусто. Всё, включая защиту, настраиваете вы.
Сначала внешний интерфейс. Если в вашей сети есть DHCP:
/ip dhcp-client add interface=ether1 disabled=no
Либо задайте адрес руками:
/ip address add address=192.168.1.50/24 interface=ether1
/ip route add gateway=192.168.1.1
/ip dns set servers=1.1.1.1,8.8.8.8 allow-remote-requests=yes
Теперь внутренняя сеть. Берём подсеть, которая не пересекается с основной —
пусть будет 10.20.0.0/24:
/ip address add address=10.20.0.1/24 interface=ether2
/ip pool add name=lab ranges=10.20.0.100-10.20.0.200
/ip dhcp-server add name=lab interface=ether2 address-pool=lab disabled=no
/ip dhcp-server network add address=10.20.0.0/24 gateway=10.20.0.1 dns-server=10.20.0.1
И выпускаем внутреннюю сеть наружу:
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade
Минимальная защита самого роутера — снаружи к нему лезть не должны:
/ip firewall filter add chain=input connection-state=established,related action=accept
/ip firewall filter add chain=input in-interface=ether2 action=accept
/ip firewall filter add chain=input action=drop
Порядок правил имеет значение: последнее — запрещающее, и оно должно
быть последним. Настраивайте через консоль Proxmox, а не по сети: правило
drop способно отрезать вас от роутера на полуслове.
Подключаем виртуалки
Остаётся перевести машины во вторую сеть. Для существующей виртуалки —
в веб-интерфейсе: ВМ → Hardware → Network Device → Edit → Bridge: vmbr1.
Или командой:
qm set 201 --net0 virtio,bridge=vmbr1
Для контейнеров всё то же самое, только pct set вместо qm set.
После перезапуска сети машина получит адрес из пула 10.20.0.x, шлюзом
будет CHR, интернет — через NAT. Проверяется обычным ping до 10.20.0.1
и дальше наружу.
Как достучаться до машин снаружи
Виртуалки теперь за NAT, и это ровно то, чего мы добивались. Но иногда нужно пустить к ним трафик.
Проброс порта на CHR:
/ip firewall nat add chain=dstnat in-interface=ether1 protocol=tcp \
dst-port=8080 action=dst-nat to-addresses=10.20.0.100 to-ports=80
Стучимся на адрес CHR в основной сети, порт 8080 — попадаем на веб-сервер внутри стенда.
Маршрут вместо NAT. Если хочется ходить внутрь напрямую, пропишите
на своём роутере или компьютере статический маршрут: сеть 10.20.0.0/24
через адрес CHR в основной сети. Тогда внутренние машины будут доступны
по настоящим адресам, без пробросов.
Второй способ удобнее для лаборатории, первый — когда наружу надо отдать ровно одну службу.
Грабли
Забыли про скорость. Всё настроено верно, а файлы ползут. Это бесплатная лицензия с её мегабитом на интерфейс, а не ошибка конфигурации.
Мост с физическим портом вместо пустого. Если у vmbr1 указан
сетевой интерфейс, изоляции не будет: ваш «внутренний» сегмент окажется
в общей сети, а DHCP-сервер CHR начнёт раздавать адреса чужим устройствам.
Это быстро заметят коллеги.
Пересечение подсетей. Внутренняя сеть не должна совпадать с домашней или офисной. Иначе маршрутизация сломается ровно в тот момент, когда понадобится связать их вместе.
Роутер без пароля и без правил. CHR приезжает пустым. Если дать ему внешний адрес и уйти пить чай, его найдут быстрее, чем вы вернётесь.
Диск впритык. Образ маленький, и места под логи почти нет. Если
планируете что-то серьёзнее стенда, расширьте диск сразу — потом
это делается через qm disk resize и перезагрузку.
Что дальше
Такая схема — основа для большинства лабораторных задач: обкатать конфигурацию перед выездом к клиенту, поднять VPN между двумя виртуальными площадками, проверить правила межсетевого экрана, не рискуя рабочей сетью.
Если Proxmox у вас ещё не стоит — начните с установки. А про то, что вообще стоит держать на домашнем гипервизоре, — в обзоре моей установки.