Для определенного проекта (возможно, как замена Mikrotik CHR выступающий как шлюз, как замена системы на Xiaomi Gateway DGNWG05LM) нужно познакомиться с OpenWrt, а как лучше это сделать, лучше задействовать виртуализацию, к примеру, просто развернуть как виртуальная машина под связкой Debian 10 + Proxmox 6.4-13. Если более новая связка, то не думаю, что что-то будет отличаться от моей, т.к. даже на Debian 10 + Proxmox 7.4-3 моего боевого сервера данная заметка для самого себя работает.

OpenWrt расшифровывается, как Open Wireless Router — это встраиваемая операционная система, основанная на ядре Linux, предназначенная, в первую очередь, для домашних маршрутизаторов (роутеров, от англ. router). Основные компоненты включают в себя ядро Linux, util-linux, uClibc или musl[4] и BusyBox. Размер всех компонентов оптимизирован в связи с тем, что в большинстве домашних маршрутизаторов сильно ограничен объём памяти.

Ниже разбор шагов на практическом применении по развертывании OpenWRT на Proxmox

Шаг №1: Подключаюсь к своему Proxmox на базе связке Debian 10 + Proxmox 6.4.13 через Webбраузер посредством URL адреса: https://IP&DNS:8006 (https://172.33.33.25:8006) - user&pass&pam

  • User name: root
  • Password: password
  • Realm: Linux PAM Standard authentication
  • Language: English
  • Save User name: отмечаю галочкой

Авторизуюсь в своем Proxmox 6.4-13

и нажимаю Login

Шаг №2: Создаю виртуальную машину внутри Proxmox:

https://IP&DNS:8006 - user&pass&pam - Create VM

(General)

  • Node: srv-proxmox
  • VM ID: 700
  • Name: srv-openwrt
  • Resource Pool: ничего не указываю
  • Advanced: галочкой не отмечаю

(OS)

  • Do not use any media: отмечаю галочкой
  • Type: Linux
  • Version: 5.x - 2.6 Kernel

(System)

  • Graphic card: Default
  • Qemu Agent: галочку не ставим
  • SCSI Controller: VirtIO SCSI single
  • Advanced: отмечаем галочкой
  • BIOS: Default (SeaBIOS)
  • Machine: Default (i440fx)

(Hard Disk)

  • Bus/Device: SCSI/0
  • Storage: disk2
  • Disk size (GiB): 10
  • Cache: Default (No cache)
  • Advanced: отмечаем галочкой
  • IO thread: отмечаем галочкой
  • Backup: отмечаем галочкой

(CPU)

  • Sockets: 1
  • Cores: 2
  • Type: host
  • VCPUs: 2
  • CPU units: 1024
  • Enable NUMA: галочку не ставим
  • Advanced: отмечаем галочкой

(Memory)

  • Memory (MiB): 2048 (оставляю по умолчанию)
  • Minimum memory (MiB): 2048
  • Ballooning Device: отмечаем галочкой
  • Advanced: отмечаем галочкой

(Network)

  • Bridge: vmbr0
  • Model: VirtIO (paravirtualized)
  • VLAN Tag: no VLAN
  • MAC address: auto
  • Firewall: отмечено галочкой
  • Advanced: отмечаем галочкой

(Confirm)

сверяемся, если все устраивает, то нажимаем Finish.

Итого контейнер для виртуальной машины создан

Итого контейнер для виртуальной машины создан

Шаг №3: Переходим в созданный контейнер виртуальной машины (VM ID: 700) и в Hardware отключаем дефолтный Hard Disk (scsi0), делаю через Web-интерфейс:

https://IP&DNS:8006 - user&pass&pam - (Server View) Datacenter - srv-proxmox - VM ID: 700 - Hardware – выделяю оборудование Hard Disk (scsi0): disk2:vm-700-disk-0,iothread=1,size=10G и нажимаю Detach

Отключаем Hard Disk (scsi0) от виртуальной машины

затем на появившееся окно – подтверждаю свое намерение:

Confirm

Are you sure you want to detach entry 'Hard Disk (scsi0)'

и нажимаю Yes

после в Hardware значится отключенный диск, выделяем его

  • Unused Disk 0: disk2:vm-700-disk-0 и нажимаем Remove

его удаляем

Удаляем от контейнера виртуальной машины отключенный жесткий диск

затем на появившееся окно – подтверждаю свое намерение:

Confirm

Are you sure you want to remove entry 'Unused Disk 0'

This will permanently erase all data

и нажимаю Yes

Шаг №4: Далее открываем Shell моего Proxmox через Webинтерфейс, т.е.  будем взаимодействовать с хостом с целью подмены Hard Disk для созданной виртуальной машины (VM ID: 700) под OpenWrt которую разворачиваем, либо подключаемся к хосту по SSH:

https://IP&DNS:8006 - user&pass&pam - (Server View) Datacenter - srv-proxmox - >_ Shell

or

ekzorchik@ekzorchik:~$ ssh -l root 172.33.33.25

root@srv-proxmox:~#

Шаг №5: Скачиваю самый актуальный образ OpenWRT (на текущую дату 26.01.2024) для Proxmox с официального сайта (https://downloads.openwrt.org/releases/) ориентируясь на архитектуру x86, после перехожу в каталог x64 и через Web-интерфейс копирую в буфер обмена ссылку на образ дабы потом ее указать в Shell хоста Proxmox для скачивания:

root@srv-proxmox:~# wget https://downloads.openwrt.org/releases/23.05.2/targets/x86/64/openwrt-23.05.2-x86-64-generic-ext4-combined.img.gz

root@srv-proxmox:~# file openwrt-23.05.2-x86-64-generic-ext4-combined.img.gz

openwrt-23.05.2-x86-64-generic-ext4-combined.img.gz: gzip compressed data, max compression, from Unix, original size 570425344

root@srv-proxmox:~#

На заметку: для Proxmox необходимо использовать ext4-combined.img.gz или squashfs-combined.img.gz

Шаг №6: Распаковываем скачанный файл generic-ext4-combined.img.gz, переименовываем для удобства работы с ним, импортируем его (образ диска) в виртуальную машину VM ID: 700

root@srv-proxmox:~# gunzip openwrt-23.05.2-x86-64-generic-ext4-combined.img.gz
gzip: openwrt-23.05.2-x86-64-generic-ext4-combined.img.gz: decompression OK, trailing garbage ignored
root@srv-proxmox:~# file openwrt-23.05.2-x86-64-generic-ext4-combined.img
openwrt-23.05.2-x86-64-generic-ext4-combined.img: DOS/MBR boot sector
root@srv-proxmox:~#
root@srv-proxmox:~# mv openwrt-23.05.2-x86-64-generic-ext4-combined.img openwrt.img
root@srv-proxmox:~# qm importdisk 700 openwrt.img disk2
importing disk 'openwrt.img' to VM 700 ...
  Rounding up size to full physical extent 124.00 MiB
  WARNING: You have not turned on protection against thin pools running out of space.
  WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full.
  Logical volume "vm-700-disk-0" created.
  WARNING: Sum of all thin volume sizes (<1.88 TiB) exceeds the size of thin pool disk2/data2 and the size of whole volume group (<931.51 GiB).
transferred 0.0 B of 120.5 MiB (0.00%)
transferred 2.0 MiB of 120.5 MiB (1.66%)
transferred 4.0 MiB of 120.5 MiB (3.32%)
transferred 6.0 MiB of 120.5 MiB (4.98%)
transferred 8.0 MiB of 120.5 MiB (6.64%)
transferred 10.0 MiB of 120.5 MiB (8.30%)
transferred 12.0 MiB of 120.5 MiB (9.96%)
transferred 14.0 MiB of 120.5 MiB (11.62%)
transferred 16.0 MiB of 120.5 MiB (13.28%)
transferred 18.0 MiB of 120.5 MiB (14.94%)
transferred 20.0 MiB of 120.5 MiB (16.60%)
transferred 22.0 MiB of 120.5 MiB (18.26%)
transferred 24.0 MiB of 120.5 MiB (19.92%)
transferred 26.0 MiB of 120.5 MiB (21.58%)
transferred 28.0 MiB of 120.5 MiB (23.24%)
transferred 30.0 MiB of 120.5 MiB (24.90%)
transferred 32.0 MiB of 120.5 MiB (26.56%)
transferred 34.0 MiB of 120.5 MiB (28.22%)
transferred 36.0 MiB of 120.5 MiB (29.88%)
transferred 38.0 MiB of 120.5 MiB (31.54%)
transferred 40.0 MiB of 120.5 MiB (33.20%)
transferred 42.0 MiB of 120.5 MiB (34.85%)
transferred 44.0 MiB of 120.5 MiB (36.51%)
transferred 46.0 MiB of 120.5 MiB (38.17%)
transferred 48.0 MiB of 120.5 MiB (39.83%)
transferred 50.0 MiB of 120.5 MiB (41.49%)
transferred 52.0 MiB of 120.5 MiB (43.15%)
transferred 54.0 MiB of 120.5 MiB (44.81%)
transferred 56.0 MiB of 120.5 MiB (46.47%)
transferred 58.0 MiB of 120.5 MiB (48.13%)
transferred 60.0 MiB of 120.5 MiB (49.79%)
transferred 62.0 MiB of 120.5 MiB (51.45%)
transferred 64.0 MiB of 120.5 MiB (53.11%)
transferred 66.0 MiB of 120.5 MiB (54.77%)
transferred 68.0 MiB of 120.5 MiB (56.43%)
transferred 70.0 MiB of 120.5 MiB (58.09%)
transferred 72.0 MiB of 120.5 MiB (59.75%)
transferred 74.0 MiB of 120.5 MiB (61.41%)
transferred 76.0 MiB of 120.5 MiB (63.07%)
transferred 78.0 MiB of 120.5 MiB (64.73%)
transferred 80.0 MiB of 120.5 MiB (66.39%)
transferred 82.0 MiB of 120.5 MiB (68.05%)
transferred 84.0 MiB of 120.5 MiB (69.71%)
transferred 86.0 MiB of 120.5 MiB (71.37%)
transferred 88.0 MiB of 120.5 MiB (73.03%)
transferred 90.0 MiB of 120.5 MiB (74.69%)
transferred 92.0 MiB of 120.5 MiB (76.35%)
transferred 94.0 MiB of 120.5 MiB (78.01%)
transferred 96.0 MiB of 120.5 MiB (79.67%)
transferred 98.0 MiB of 120.5 MiB (81.33%)
transferred 100.0 MiB of 120.5 MiB (82.99%)
transferred 102.0 MiB of 120.5 MiB (84.65%)
transferred 104.0 MiB of 120.5 MiB (86.31%)
transferred 106.0 MiB of 120.5 MiB (87.97%)
transferred 108.0 MiB of 120.5 MiB (89.63%)
transferred 110.0 MiB of 120.5 MiB (91.29%)
transferred 112.0 MiB of 120.5 MiB (92.95%)
transferred 114.0 MiB of 120.5 MiB (94.61%)
transferred 116.0 MiB of 120.5 MiB (96.27%)
transferred 118.0 MiB of 120.5 MiB (97.93%)
transferred 120.0 MiB of 120.5 MiB (99.59%)
transferred 120.5 MiB of 120.5 MiB (100.00%)
transferred 120.5 MiB of 120.5 MiB (100.00%)
Successfully imported disk as 'unused0:disk2:vm-700-disk-0'
root@srv-proxmox:~#

После открываем контейнер виртуальной машины VM ID: 700 – переходим в Hardware и видим, что импортированный диск значится пока как "Unused Disk 0", добавляем его:

Выделяем его и нажимаем Edit

  • Bus/Device: SCSI:0
  • Cache: Default (No cache)
  • SCSI Controller: VirtIO SCSI single
  • Disk image: disk2:vm-700-disk-0
  • Advanced: отмечаем галочкой
  • IO thread: отмечаем галочкой
  • Backup: Отмечаем галочкой

Добавляем импортированный образ диска в контейнер виртуальной машины VM ID: 700

и нажимаем Add

в итоге параметры виртуальной машины по части диска изменились, что теперь Hard Disk составляет 124M

В итоге параметры виртуальной машины по части диска изменились, что теперь Hard Disk составляет 124M

Но это еще не все, вносим корректировки в контейнер виртуальной машины по части загрузки:

https://IP&DNS:8006 - user&pass&pam - (Server View) Datacenter - srv-proxmox - VM ID: 700 - Options

  • сейчас Boot Order: ide2, net0
  • изменяю на Boot Order: scsi0, ide2, net0

Изменяю порядок загрузки для VM ID: 700

и нажимаю OK

Шаг №7: Запускаем виртуальную машину VM: ID 700

https://IP&DNS:8006 - user&pass&pam - (Server View) Datacenter - srv-proxmox - VM ID: 700 - Start

после переходим в консоль виртуальной машины VM: ID 700

https://IP&DNS:8006 - user&pass&pam - (Server View) Datacenter - srv-proxmox - VM ID: 700 - >_ Console

вижу GRUB меню

Вижу Grub меню загрузки OpenWRT

проходит отведенное время в лице 5 секунд, и операционная система начинает загрузку

Проходит отведенное время в лице 5 секунд, и операционная система начинает загрузку

На заметку: По умолчанию IP адрес OpenWRT это 192.168.1.1, по нему мы также заходим в веб интерфейс OpenWRT

Но так как у меня интерфейс vmbr0 – это сеть не 192.168.1.0/24, то обратиться к Web-интерфейсу OpenWRT я не могу, чтобы OpenWRT стал доступен я переделываю настройки сетевой карты на свою сеть: 172.33.33.0/24 и чтобы не статический IP адрес был, а был получен от DHCP-сервиса (он поднят на базе домашнем роутера в лице Mikrotik RB2011UiAS)

root@OpenWrt:/# cp /etc/config/network /etc/config/network.backup
root@OpenWrt:/# vi /etc/config/network

На заметку: Вот только после редактирования через редактор vi выйти в режим где можно через Shift + ":" и набрать wq! не получается, т.к. по клавише Esc (возвращения в командный режим) я выхожу из экрана Console виртуальной машины. В этом случае мне видится следующее костыльное решение (а все благодаря заметке: "Как в Proxmox 6 использовать xterm.js для VM"

root@OpenWrt:/# poweroff

https://IP&DNS:8006 - user&pass&pam - (Server View) Datacenter - srv-proxmox - VM ID: 700 - Hardware - Add – выбираю Serial Port

  • Serial Port: 0

и нажимаю Add, после у VM ID: 700 появляется меню xterm.js, до этого он было не активно

После у VM ID: 700 появляется меню xterm.js, до этого он было не активно

Запускаю VM и выбираю: >_ Console - xterm.js

вижу лог загрузки в отдельном окне, нажимаю клавишу ENTER

Запускаю VM и выбираю: >_ Console - xterm.js вижу лог загрузки

после вижу приветствие

Вижу приветствие

вношу изменения и уже для выхода в командный режим по клавише ESC отрабатывает:

root@OpenWrt:/# vi /etc/config/network
config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd59:9122:5ce1::/48'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth0'

config interface 'lan'
        option device 'br-lan'
        option proto 'dhcp'

Esc, :wq!

Перезапускаю сетевой интерфейс

root@OpenWrt:/# /etc/init.d/network restart
[  232.962008] br-lan: port 1(eth0) entered disabled state
[  233.017625] device eth0 left promiscuous mode
[  233.019231] br-lan: port 1(eth0) entered disabled state
root@OpenWrt:/# [  234.301098] 8021q: adding VLAN 0 to HW filter on device eth0
[  234.303065] br-lan: port 1(eth0) entered blocking state
[  234.304659] br-lan: port 1(eth0) entered disabled state
[  234.306449] device eth0 entered promiscuous mode
[  234.317346] br-lan: port 1(eth0) entered blocking state
[  234.319062] br-lan: port 1(eth0) entered forwarding state
[  235.356970] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready

root@OpenWrt:/# ip r
default via 172.33.33.100 dev br-lan  src 172.33.33.139 
172.33.33.0/24 dev br-lan scope link  src 172.33.33.139 
root@OpenWrt:/#

Итого виртуальная машина с OpenWRT получала от моего DHCP сервиса IP адрес, теперь он равен: 172.33.33.139

Шаг №8: А раз IP адрес в моей сети, то на него я могу обратиться через Webинтерфейс тем самым получить доступ к Webинтерфейс администрирования OpenWRT:

А раз IP адрес в моей сети, то на него я могу обратиться через Web-интерфейс тем самым получить доступ к Web-интерфейс администрирования OpenWRT

На заметку: По умолчанию в OpenWRT используется учетная запись root и пароль отсутствует. Для входа просто нажмите Login без ввода пароля

  • Username: root
  • Password: ничего не указываю

и нажимаю Log in

Итого так выглядит Web-интерфейс взаимодействия с OpenWRT

Итого так выглядит Web-интерфейс взаимодействия с OpenWRT

Не дело, когда доступ куда-либо без пароля, значит устанавливаем его:

http://<OpenWRT> (http://172.33.33.139) - Login:Pass (Login: root Pass: <blank>) - System - Administration – вкладка Router Password

  • Password: задаю пароль, к примеру 712mbddr@
  • Confirmation: подтверждаю пароль, 712mbddr@

и нажимаю Save

Теперь пароль на вход через Web-интерфейс и через консоль защищен связкой Login&Pass.

Делаю Logoff и проверяю что в xterm.js чтобы авторизоваться нужно указать Login + Pass (то что выше присвоили):

root@OpenWrt:/# exit
Please press Enter to activate this console. нажимаю клавишу "ENTER"
BusyBox v1.36.1 (2023-11-14 13:38:11 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 23.05.2, r23630-842932a63d
 -----------------------------------------------------
root@OpenWrt:/#
root@OpenWrt:/# reboot

В Web-интерфейс нужен пароль, а в Console загружается без указания, значит его нужно поставить, ставлю:

root@OpenWrt:/# 
root@OpenWrt:/# passwd 
Changing password for root
New password: задаю пароль, к примеру 712mbddr@
Retype password: подтверждаю пароль, 712mbddr@
passwd: password for root changed by root
root@OpenWrt:/# reboot

система перезагрузилась, и опять приглашение root@OpenWrt:/#, т.е. небыло запроса на авторизацию.

Открываю документацию (https://openwrt.org/ – очень много полезной информации) и натыкаюсь, что "Authentication for OpenWrt TTY and serial console is disabled by default" (Аутентификация для OpenWrt TTY и последовательной консоли отключена по умолчанию.). Включаю аутентификацию:

root@OpenWrt:/# reboot
root@OpenWrt:/# uci set system.@system[0].ttylogin="1"
root@OpenWrt:/# uci commit system
root@OpenWrt:/# service system restart

и вот теперь

OpenWrt Login: ввожу root
Password: ввожу пароль, в моем случае 712mbddr@

и нажимаю ENTER тем самым в случае правильно указанных данных попадаю в консоль командной строки, как авторизованный:

OpenWrt login: root
Password: 
BusyBox v1.36.1 (2023-11-14 13:38:11 UTC) built-in shell (ash)
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 23.05.2, r23630-842932a63d
 -----------------------------------------------------
root@OpenWrt:~#

Выключаю VM:

root@OpenWrt:~# halt

Делаю снапшот для виртуальной машины VM ID: 700 с именем OpenWRT дабы после изучения откатываться на первоначальное состояние с целью записи шагов для каждой задачи от и до тем самым составляю себе заметки.

Что мы имеем по итогу, я для себя разобрался как для последующего изучения производится развертывание системы OpenWRT под виртуализацией в лице связки Debian 10 + Proxmox 6.4-13. В дальнейшем дабы не загромождать текущую заметку я буду шаг за шагом приобщаться к работе с ней, а сейчас я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.