Показать страницуИстория страницыСсылки сюдаНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== 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** версию и распаковываем архив: <code> 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 </code> Выбранный путь хранения образа, возможно, не best practice, но он присутствует на Proxmox ноде по умолчанию. Также у меня storage называется **local-lvm**, если у вас другой путь, то просто замените **local-lvm** на свой в параметрах **--efidisk0** и **--scsi0** в командах ниже. Собственно, уже можно создавать машину <code bash> 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 </code> и запускать <code>qm start <VM ID> ; qm terminal <VM ID></code> Если все закончилось хорошо, то в терминале увидим примерно следующее: <code> 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. -------------------------------------------------- </code> <code bash> root@OpenWrt:/# cat /etc/os-release </code> <code> 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" </code> выходим из терминала через **ctrl+o**, подчищаем за собой и переходим к следующему шагу <code>qm stop <VM ID> ; qm destroy <VM ID></code> ==== OpenWrt ARM64 ==== В релиз ноутах к [[https://pve.proxmox.com/wiki/Roadmap#Proxmox_VE_8.1|PVE 8.]]1 упоминается, что для эмуляции (U)EFI биоса в виртуальных машинах на ARM64 нужно установить пакет **pve-edk2-firmware-aarch64**: <code>apt install pve-edk2-firmware-aarch64</code> В каталоге с [[https://downloads.openwrt.org/releases/|релизами]], выбираем версию, затем **targets -> armsr -> armv8**. В консоли Proxmox скачиваем **squashfs-combined** версию и распаковываем архив: <code> 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 </code> Создаем машину следующей командой: <code bash> 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 </code> загружаем <code bash>qm start <VM ID> ; qm terminal <VM ID></code> И если и в этот раз нас ждал успех, то в терминале увидим что-то вроде: <code> 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" </code> выходим из терминала через **ctrl+o**, подчищаем за собой и переходим к добавлению сетевых интерфейсов. <code bash>qm stop <VM ID> ; qm destroy <VM ID></code> ==== Превращаем виртуалку в маршрутизатор ==== В данный момент на виртуальном OpenWRT есть всего лишь один сетевой интерфейс, который автоматически подключается в **br-lan** и инициализируется через DHCP-сервер на реальном роутере. Чтобы сделать маршрутизатор маршрутизатором, нам нужно добавить как минимум еще один сетевой интерфейс. Для этого в ProxmoxVE создадим Linux Bridge интерфейс vmbr1. Через шелл: <code bash> cp /etc/network/interfaces /etc/network/interfaces.new cat <<EOF>>/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 </code> или же путь через Proxmox GUI: **Datacenter->pve->System->Network->Create**, Apply Configuration Если в OpenWRT доступны два сетевых интерфейса, первый (**eth0**) будет назначен как LAN, а второй (**eth1**) как WAN. Чтобы смоделировать типичную домашнюю сеть и избежать интерференции между DHCP-серверами, нам нужно, чтобы Proxmox интерфейс vmbr1 стал eth0 в OpenWRT, а Proxmox интерфейс vmbr0 стал eth1. Учитывая вышеизложенное, команда для создания машины станет такой: <code bash> 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 </code> Запускаем: <code bash>qm start <vmid>; qm terminal <vmid></code> проверяем: <code> root@OpenWrt:/$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 <code> <code> 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' </code> Как можно видеть, wan-интерфейс привязан к **eth1**, который получил от реального маршрутизатора адрес **10.1.2.105**. OpenWRT по умолчанию открывает порты для управления только на стороне **lan**, и правильно делает! Но мы же это все затеяли для рисковых опытов, поэтому, чтобы упростить дальнейшую настройку, откроем порты 22, 80, и 443 на стороне wan, что ни в коем случае не стоит повторять на реальном железе: <code bash> 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 </code> Проверяем подключение по ssh с хоста в физической сети: <code> $ 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:~# </code> Работает! Можно уверенно воплощать самые смелые фантазии на вашем роутере. Последнее изменение: 05:01:2025 22:47