====== OpenWRT arm64/x86_64 ====== ===== Эмулируем arm64/x86_64 OpenWRT ===== ==== OpenWRT x86_64 ==== В каталоге с [[https://downloads.openwrt.org/releases/|релизами]], выбираем версию, затем **targets -> x86 -> 64**.\\ В консоли Proxmox (я использовал Shell в GUI, но нет причин, чтобы не заработало и через ssh) скачиваем **squashfs-combined-efi** версию и распаковываем архив: cd /var/lib/vz/template/iso wget -c https://downloads.openwrt.org/releases/23.05.5/targets/x86/64/openwrt-23.05.5-x86-64-generic-squashfs-combined-efi.img.gz gunzip openwrt-23.05.5-x86-64-generic-squashfs-combined-efi.img.gz Выбранный путь хранения образа, возможно, не best practice, но он присутствует на Proxmox ноде по умолчанию. Также у меня storage называется **local-lvm**, если у вас другой путь, то просто замените **local-lvm** на свой в параметрах **--efidisk0** и **--scsi0** в командах ниже. Собственно, уже можно создавать машину qm create $(pvesh get /cluster/nextid) \ --name "OpenWRT-amd64" \ --description "OpenWRT-amd64" \ --arch x86_64 \ --tags "OpenWRT" \ --bios ovmf \ --efidisk0 file=local-lvm:4,efitype=4m,pre-enrolled-keys=0 \ --sockets 1 \ --cores 2 \ --memory 256 \ --vga type=serial0 \ --serial0 socket \ --boot order=scsi0 \ --scsihw virtio-scsi-pci \ --scsi0 file=local-lvm:0,import-from="/var/lib/vz/template/iso/openwrt-23.05.5-x86-64-generic-squashfs-combined-efi.img" \ --net0 model=virtio,bridge=vmbr1,firewall=1,link_down=0,mtu=1 \ --net1 model=virtio,bridge=vmbr1,tag=2,firewall=1,link_down=0,mtu=1 и запускать qm start ; qm terminal Если все закончилось хорошо, то в терминале увидим примерно следующее: BusyBox v1.36.1 (2024-09-23 12:34:46 UTC) built-in shell (ash) _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- OpenWrt 23.05.5, r24106-10cc5fcd00 ----------------------------------------------------- === WARNING! ===================================== There is no root password defined on this device! Use the "passwd" command to set up a new password in order to prevent unauthorized SSH logins. -------------------------------------------------- root@OpenWrt:/# cat /etc/os-release NAME="OpenWrt" VERSION="23.05.5" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 23.05.5" VERSION_ID="23.05.5" HOME_URL="https://openwrt.org/" BUG_URL="https://bugs.openwrt.org/" SUPPORT_URL="https://forum.openwrt.org/" BUILD_ID="r24106-10cc5fcd00" OPENWRT_BOARD="x86/64" OPENWRT_ARCH="x86_64" OPENWRT_TAINTS="" OPENWRT_DEVICE_MANUFACTURER="OpenWrt" OPENWRT_DEVICE_MANUFACTURER_URL="https://openwrt.org/" OPENWRT_DEVICE_PRODUCT="Generic" OPENWRT_DEVICE_REVISION="v0" OPENWRT_RELEASE="OpenWrt 23.05.5 r24106-10cc5fcd00" выходим из терминала через **ctrl+o**, подчищаем за собой и переходим к следующему шагу qm stop ; qm destroy ==== OpenWrt ARM64 ==== В релиз ноутах к [[https://pve.proxmox.com/wiki/Roadmap#Proxmox_VE_8.1|PVE 8.]]1 упоминается, что для эмуляции (U)EFI биоса в виртуальных машинах на ARM64 нужно установить пакет **pve-edk2-firmware-aarch64**: apt install pve-edk2-firmware-aarch64 В каталоге с [[https://downloads.openwrt.org/releases/|релизами]], выбираем версию, затем **targets -> armsr -> armv8**. В консоли Proxmox скачиваем **squashfs-combined** версию и распаковываем архив: cd /var/lib/vz/template/iso wget -c https://downloads.openwrt.org/releases/23.05.5/targets/armsr/armv8/openwrt-23.05.3-armsr-armv8-generic-squashfs-combined.img.gz gunzip openwrt-23.05.5-armsr-armv8-generic-squashfs-combined.img.gz Создаем машину следующей командой: qm create $(pvesh get /cluster/nextid) \ --name "openwrt-aarch64" \ --description "openwrt-aarch64" \ --tags "openwrt" \ --arch aarch64 \ --bios ovmf \ --efidisk0 file=local-zfs:4,efitype=4m,pre-enrolled-keys=0 \ --sockets 1 \ --cores 2 \ --memory 256 \ --vga type=serial0 \ --serial0 socket \ --boot order=scsi0 \ --scsihw virtio-scsi-pci \ --scsi0 file=local-zfs:0,import-from="/var/lib/vz/template/iso/openwrt-23.05.3-armsr-armv8-generic-squashfs-combined.img" \ --net0 model=virtio,bridge=vmbr0,firewall=1,link_down=0,mtu=1 \ --net1 model=virtio,bridge=vmbr0,vlan=1,firewall=1,link_down=0,mtu=1 загружаем qm start ; qm terminal И если и в этот раз нас ждал успех, то в терминале увидим что-то вроде: BusyBox v1.36.1 (2024-03-22 22:09:42 UTC) built-in shell (ash) _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- OpenWrt 23.05.3, r23809-234f1a2efa ----------------------------------------------------- === WARNING! ===================================== There is no root password defined on this device! Use the "passwd" command to set up a new password in order to prevent unauthorized SSH logins. -------------------------------------------------- root@OpenWrt:/$ cat /etc/os-release NAME="OpenWrt" VERSION="23.05.3" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 23.05.3" VERSION_ID="23.05.3" HOME_URL="https://openwrt.org/" BUG_URL="https://bugs.openwrt.org/" SUPPORT_URL="https://forum.openwrt.org/" BUILD_ID="r23809-234f1a2efa" OPENWRT_BOARD="armsr/armv8" OPENWRT_ARCH="aarch64_generic" OPENWRT_TAINTS="" OPENWRT_DEVICE_MANUFACTURER="OpenWrt" OPENWRT_DEVICE_MANUFACTURER_URL="https://openwrt.org/" OPENWRT_DEVICE_PRODUCT="Generic" OPENWRT_DEVICE_REVISION="v0" OPENWRT_RELEASE="OpenWrt 23.05.3 r23809-234f1a2efa" выходим из терминала через **ctrl+o**, подчищаем за собой и переходим к добавлению сетевых интерфейсов. qm stop ; qm destroy ==== Превращаем виртуалку в маршрутизатор ==== В данный момент на виртуальном OpenWRT есть всего лишь один сетевой интерфейс, который автоматически подключается в **br-lan** и инициализируется через DHCP-сервер на реальном роутере. Чтобы сделать маршрутизатор маршрутизатором, нам нужно добавить как минимум еще один сетевой интерфейс. Для этого в ProxmoxVE создадим Linux Bridge интерфейс vmbr1. Через шелл: cp /etc/network/interfaces /etc/network/interfaces.new cat <>/etc/network/interfaces.new auto vmbr1 iface vmbr1 inet static address 192.168.1.0/24 bridge-ports none bridge-stp off bridge-fd 0 EOF systemctl start pvenetcommit systemctl restart networking или же путь через Proxmox GUI: **Datacenter->pve->System->Network->Create**, Apply Configuration Если в OpenWRT доступны два сетевых интерфейса, первый (**eth0**) будет назначен как LAN, а второй (**eth1**) как WAN. Чтобы смоделировать типичную домашнюю сеть и избежать интерференции между DHCP-серверами, нам нужно, чтобы Proxmox интерфейс vmbr1 стал eth0 в OpenWRT, а Proxmox интерфейс vmbr0 стал eth1. Учитывая вышеизложенное, команда для создания машины станет такой: qm create $(pvesh get /cluster/nextid) \ --name "openwrt-aarch64" \ --description "openwrt-aarch64" \ --tags "openwrt" \ --arch aarch64 \ --bios ovmf \ --efidisk0 file=local-zfs:4,efitype=4m,pre-enrolled-keys=0 \ --sockets 1 \ --cores 2 \ --memory 256 \ --vga type=serial0 \ --serial0 socket \ --boot order=scsi0 \ --scsihw virtio-scsi-pci \ --scsi0 file=local-zfs:0,import-from="/var/lib/vz/template/iso/openwrt-23.05.3-armsr-armv8-generic-squashfs-combined.img" \ --net1 model=virtio,bridge=vmbr0,firewall=1,link_down=0,mtu=1 \ --net0 model=virtio,bridge=vmbr1,firewall=1,link_down=0,mtu=1 Запускаем: qm start ; qm terminal проверяем: root@OpenWrt:/$ ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc fq_codel master br-lan state UP qlen 1000 link/ether bc:24:11:25:4f:f2 brd ff:ff:ff:ff:ff:ff 3: eth1: mtu 1500 qdisc fq_codel state UP qlen 1000 link/ether bc:24:11:dc:6b:e7 brd ff:ff:ff:ff:ff:ff inet 10.1.2.105/24 brd 10.1.2.255 scope global eth1 valid_lft forever preferred_lft forever inet6 fe80::be24:11ff:fedc:6be7/64 scope link valid_lft forever preferred_lft forever 4: br-lan: mtu 1500 qdisc noqueue state UP qlen 1000 link/ether bc:24:11:25:4f:f2 brd ff:ff:ff:ff:ff:ff inet 192.168.1.1/24 brd 192.168.1.255 scope global br-lan valid_lft forever preferred_lft forever inet6 fd4f:be36:41c0::1/60 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::be24:11ff:fe25:4ff2/64 scope link valid_lft forever preferred_lft forever root@OpenWrt:/$ cat /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 'fd4f:be36:41c0::/48' config device option name 'br-lan' option type 'bridge' list ports 'eth0' config interface 'lan' option device 'br-lan' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' option ip6assign '60' config interface 'wan' option device 'eth1' option proto 'dhcp' config interface 'wan6' option device 'eth1' option proto 'dhcpv6' Как можно видеть, wan-интерфейс привязан к **eth1**, который получил от реального маршрутизатора адрес **10.1.2.105**. OpenWRT по умолчанию открывает порты для управления только на стороне **lan**, и правильно делает! Но мы же это все затеяли для рисковых опытов, поэтому, чтобы упростить дальнейшую настройку, откроем порты 22, 80, и 443 на стороне wan, что ни в коем случае не стоит повторять на реальном железе: uci add firewall rule uci set firewall.@rule[-1].name='Allow-Admin' uci set firewall.@rule[-1].enabled='true' uci set firewall.@rule[-1].src='wan' uci set firewall.@rule[-1].proto='tcp' uci set firewall.@rule[-1].dest_port='22 80 443' uci set firewall.@rule[-1].target='ACCEPT' uci add firewall rule uci commit firewall service firewall restart Проверяем подключение по ssh с хоста в физической сети: $ ssh root@10.1.2.105 The authenticity of host '10.1.2.105 (10.1.2.105)' can't be established. ED25519 key fingerprint is SHA256:VkLVqOud2GArohqiV+cHh1uIWXKVbpBJFHQJjUhrKzg. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '10.1.2.105' (ED25519) to the list of known hosts. BusyBox v1.36.1 (2024-03-22 22:09:42 UTC) built-in shell (ash) _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- OpenWrt 23.05.3, r23809-234f1a2efa ----------------------------------------------------- === WARNING! ===================================== There is no root password defined on this device! Use the "passwd" command to set up a new password in order to prevent unauthorized SSH logins. -------------------------------------------------- root@OpenWrt:~# Работает! Можно уверенно воплощать самые смелые фантазии на вашем роутере.