Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
sysadmin:proxmox:openwrt [14:12:2024 14:04] School Sysadminsysadmin:proxmox:openwrt [05:01:2025 22:47] (текущий) School Sysadmin
Строка 1: Строка 1:
-====== Эмулируем arm64 OpenWRT роутер в Proxmox VE ======+====== OpenWRT arm64/x86_64 ====== 
 +===== Эмулируем arm64/x86_64 OpenWRT ===== 
 +==== OpenWRT x86_64 ====
  
-**OpenWRT x86_64** 
  
-В каталоге с [[https://downloads.openwrt.org/releases/|релизами]], выбираем версию, затем **targets -> x86 -> 64**. В консоли Proxmox (я использовал Shell в GUI, но нет причин, чтобы не заработало и через ssh) скачиваем **squashfs-combined-efi** версию и распаковываем архив:+В каталоге с [[https://downloads.openwrt.org/releases/|релизами]], выбираем версию, затем **targets -> x86 -> 64**.\\ 
 +В консоли Proxmox (я использовал Shell в GUI, но нет причин, чтобы не заработало и через ssh) скачиваем **squashfs-combined-efi** версию и распаковываем архив:
 <code> <code>
 cd /var/lib/vz/template/iso cd /var/lib/vz/template/iso
-wget -c https://downloads.openwrt.org/releases/23.05.5/targets/x86/64/openwrt-23.05.3-x86-64-generic-squashfs-combined-efi.img.gz+ 
 +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 gunzip openwrt-23.05.5-x86-64-generic-squashfs-combined-efi.img.gz
 </code> </code>
  
-Disclaimer: выбранный путь хранения образа, возможно, не best practice, но он присутствует на Proxmox ноде по умолчанию. Также у меня storage называется **local-zf**s, если у вас другой путь, то просто замените **local-zfs** на свой в параметрах **--efidisk0** и **--scsi0** в командах ниже.+Выбранный путь хранения образа, возможно, не best practice, но он присутствует на Proxmox ноде по умолчанию. Также у меня storage называется **local-lvm**, если у вас другой путь, то просто замените **local-lvm** на свой в параметрах **--efidisk0** и **--scsi0** в командах ниже.
  
 Собственно, уже можно создавать машину Собственно, уже можно создавать машину
  
 +<code bash>
 qm create $(pvesh get /cluster/nextid) \ qm create $(pvesh get /cluster/nextid) \
---name "openwrt-amd64"+--name "OpenWRT-amd64"
---description "openwrt-amd64" \+--description "OpenWRT-amd64" \
 --arch x86_64 \ --arch x86_64 \
---tags "openwrt" \+--tags "OpenWRT" \
 --bios ovmf \ --bios ovmf \
---efidisk0 file=local-zfs:4,efitype=4m,pre-enrolled-keys=0 \+--efidisk0 file=local-lvm:4,efitype=4m,pre-enrolled-keys=0 \
 --sockets 1 \ --sockets 1 \
 --cores 2 \ --cores 2 \
Строка 28: Строка 33:
 --boot order=scsi0 \ --boot order=scsi0 \
 --scsihw virtio-scsi-pci \ --scsihw virtio-scsi-pci \
---scsi0 file=local-zfs:0,import-from="/var/lib/vz/template/iso/openwrt-23.05.3-x86-64-generic-squashfs-combined-efi.img"+--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=vmbr0,firewall=1,link_down=0,mtu=1+--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>
  
 и запускать и запускать
  
-qm start <VM ID> ; qm terminal <VM ID>+<code>qm start <VM ID> ; qm terminal <VM ID></code>
  
 Если все закончилось хорошо, то в терминале увидим примерно следующее: Если все закончилось хорошо, то в терминале увидим примерно следующее:
  
-BusyBox v1.36.1 (2024-03-22 22:09:42 UTC) built-in shell (ash)+<code> 
 +BusyBox v1.36.1 (2024-09-23 12:34:46 UTC) built-in shell (ash)
  
   _______                     ________        __   _______                     ________        __
Строка 45: Строка 53:
           |__| W I R E L E S S   F R E E D O M           |__| W I R E L E S S   F R E E D O M
  -----------------------------------------------------  -----------------------------------------------------
- OpenWrt 23.05.3r23809-234f1a2efa+ OpenWrt 23.05.5r24106-10cc5fcd00
  -----------------------------------------------------  -----------------------------------------------------
 === WARNING! ===================================== === WARNING! =====================================
Строка 52: Строка 60:
 in order to prevent unauthorized SSH logins. in order to prevent unauthorized SSH logins.
 -------------------------------------------------- --------------------------------------------------
-root@OpenWrt:/cat /etc/os-release +</code>  
 +<code bash> 
 +root@OpenWrt:/cat /etc/os-release 
 +</code> 
 +<code>
 NAME="OpenWrt" NAME="OpenWrt"
-VERSION="23.05.3"+VERSION="23.05.5"
 ID="openwrt" ID="openwrt"
 ID_LIKE="lede openwrt" ID_LIKE="lede openwrt"
-PRETTY_NAME="OpenWrt 23.05.3+PRETTY_NAME="OpenWrt 23.05.5
-VERSION_ID="23.05.3"+VERSION_ID="23.05.5"
 HOME_URL="https://openwrt.org/" HOME_URL="https://openwrt.org/"
 BUG_URL="https://bugs.openwrt.org/" BUG_URL="https://bugs.openwrt.org/"
 SUPPORT_URL="https://forum.openwrt.org/" SUPPORT_URL="https://forum.openwrt.org/"
-BUILD_ID="r23809-234f1a2efa"+BUILD_ID="r24106-10cc5fcd00"
 OPENWRT_BOARD="x86/64" OPENWRT_BOARD="x86/64"
 OPENWRT_ARCH="x86_64" OPENWRT_ARCH="x86_64"
Строка 70: Строка 82:
 OPENWRT_DEVICE_PRODUCT="Generic" OPENWRT_DEVICE_PRODUCT="Generic"
 OPENWRT_DEVICE_REVISION="v0" OPENWRT_DEVICE_REVISION="v0"
-OPENWRT_RELEASE="OpenWrt 23.05.3 r23809-234f1a2efa"+OPENWRT_RELEASE="OpenWrt 23.05.5 r24106-10cc5fcd00" 
 +</code>
  
-выходим из терминала через ctrl+o, подчищаем за собой и переходим к следующему шагу+выходим из терминала через **ctrl+o**, подчищаем за собой и переходим к следующему шагу
  
-qm stop <VM ID> ; qm destroy <VM ID>+<code>qm stop <VM ID> ; qm destroy <VM ID></code>
  
-Шаг 2: OpenWrt ARM64+==== OpenWrt ARM64 ====
  
-В релиз ноутах к PVE 8.1 упоминается, что для эмуляции (U)EFI биоса в виртуальных машинах на ARM64 нужно установить пакет pve-edk2-firmware-aarch64:+В релиз ноутах к [[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+<code>apt install pve-edk2-firmware-aarch64</code>
  
-В каталоге с релизами, выбираем версию, затем targets -> armsr -> armv8.  +В каталоге с [[https://downloads.openwrt.org/releases/|релизами]], выбираем версию, затем **targets -> armsr -> armv8**.  
  
-В консоли Proxmox скачиваем squashfs-combined версию и распаковываем архив:+В консоли Proxmox скачиваем **squashfs-combined** версию и распаковываем архив:
  
 +<code>
 cd /var/lib/vz/template/iso cd /var/lib/vz/template/iso
  
-wget -c https://downloads.openwrt.org/releases/23.05.3/targets/armsr/armv8/openwrt-23.05.3-armsr-armv8-generic-squashfs-combined.img.gz+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.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) \ qm create $(pvesh get /cluster/nextid) \
 --name "openwrt-aarch64" \ --name "openwrt-aarch64" \
Строка 109: Строка 125:
 --scsihw  virtio-scsi-pci \ --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" \ --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+--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>
  
 загружаем загружаем
  
-qm start <VM ID> ; qm terminal <VM ID>+<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) BusyBox v1.36.1 (2024-03-22 22:09:42 UTC) built-in shell (ash)
  
Строка 151: Строка 170:
 OPENWRT_DEVICE_REVISION="v0" OPENWRT_DEVICE_REVISION="v0"
 OPENWRT_RELEASE="OpenWrt 23.05.3 r23809-234f1a2efa" OPENWRT_RELEASE="OpenWrt 23.05.3 r23809-234f1a2efa"
 +</code>
 +
 +выходим из терминала через **ctrl+o**, подчищаем за собой и переходим к добавлению сетевых интерфейсов.
  
-выходим из терминала через ctrl+o, подчищаем за собой и переходим к добавлению сетевых интерфейсов.+<code bash>qm stop <VM ID> ; qm destroy <VM ID></code>
  
-qm stop <VM ID> ; qm destroy <VM ID>+==== Превращаем виртуалку в маршрутизатор ====
  
-Шаг 3: превращаем виртуалку в маршрутизатор 
  
-В данный момент на виртуальном OpenWRT есть всего лишь один сетевой интерфейс, который автоматически подключается в br-lan и инициализируется через DHCP-сервер на реальном роутере. Чтобы сделать маршрутизатор маршрутизатором, нам нужно добавить как минимум еще один сетевой интерфейс. Для этого в ProxmoxVE создадим Linux Bridge интерфейс vmbr1.  +В данный момент на виртуальном OpenWRT есть всего лишь один сетевой интерфейс, который автоматически подключается в **br-lan** и инициализируется через DHCP-сервер на реальном роутере. Чтобы сделать маршрутизатор маршрутизатором, нам нужно добавить как минимум еще один сетевой интерфейс. Для этого в ProxmoxVE создадим Linux Bridge интерфейс vmbr1.  
  
 Через шелл: Через шелл:
  
 +<code bash>
 cp /etc/network/interfaces /etc/network/interfaces.new cp /etc/network/interfaces /etc/network/interfaces.new
  
Строка 176: Строка 198:
  
 systemctl restart networking systemctl restart networking
 +</code>
  
-или же путь через Proxmox GUI: Datacenter->pve->System->Network->Create, Apply Configuration+или же путь через Proxmox GUI: **Datacenter->pve->System->Network->Create**, Apply Configuration
  
-Если в OpenWRT доступны два сетевых интерфейса, первый (eth0) будет назначен как LAN, а второй (eth1) как WAN. Чтобы смоделировать типичную домашнюю сеть и избежать интерференции между DHCP-серверами, нам нужно, чтобы Proxmox интерфейс vmbr1 стал eth0 в OpenWRT, а Proxmox интерфейс vmbr0 стал eth1.+Если в OpenWRT доступны два сетевых интерфейса, первый (**eth0**) будет назначен как LAN, а второй (**eth1**) как WAN. Чтобы смоделировать типичную домашнюю сеть и избежать интерференции между DHCP-серверами, нам нужно, чтобы Proxmox интерфейс vmbr1 стал eth0 в OpenWRT, а Proxmox интерфейс vmbr0 стал eth1.
  
 Учитывая вышеизложенное, команда для создания машины станет такой: Учитывая вышеизложенное, команда для создания машины станет такой:
  
 +<code bash>
 qm create $(pvesh get /cluster/nextid) \ qm create $(pvesh get /cluster/nextid) \
 --name "openwrt-aarch64" \ --name "openwrt-aarch64" \
Строка 200: Строка 224:
 --net1 model=virtio,bridge=vmbr0,firewall=1,link_down=0,mtu=1 \ --net1 model=virtio,bridge=vmbr0,firewall=1,link_down=0,mtu=1 \
 --net0 model=virtio,bridge=vmbr1,firewall=1,link_down=0,mtu=1 --net0 model=virtio,bridge=vmbr1,firewall=1,link_down=0,mtu=1
 +</code>
  
 Запускаем: Запускаем:
  
-qm start <vmid>; qm terminal</vmid>+<code bash>qm start <vmid>; qm terminal <vmid></code>
  
 проверяем: проверяем:
  
 +<code>
 root@OpenWrt:/$ ip a root@OpenWrt:/$ ip a
 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
Строка 230: Строка 256:
     inet6 fe80::be24:11ff:fe25:4ff2/64 scope link      inet6 fe80::be24:11ff:fe25:4ff2/64 scope link 
        valid_lft forever preferred_lft forever        valid_lft forever preferred_lft forever
 +<code> 
 +<code>
 root@OpenWrt:/$ cat /etc/config/network  root@OpenWrt:/$ cat /etc/config/network 
  
Строка 261: Строка 288:
         option device 'eth1'         option device 'eth1'
         option proto 'dhcpv6'         option proto 'dhcpv6'
 +</code>
  
-Как можно видеть, wan-интерфейс привязан к eth1, который получил от реального маршрутизатора адрес 10.1.2.105.+Как можно видеть, wan-интерфейс привязан к **eth1**, который получил от реального маршрутизатора адрес **10.1.2.105**.
  
-OpenWRT по умолчанию открывает порты для управления только на стороне lan, и правильно делает! Но мы же это все затеяли для рисковых опытов, поэтому, чтобы упростить дальнейшую настройку, откроем порты 22, 80, и 443 на стороне wan, что ни в коем случае не стоит повторять на реальном железе:+OpenWRT по умолчанию открывает порты для управления только на стороне **lan**, и правильно делает! Но мы же это все затеяли для рисковых опытов, поэтому, чтобы упростить дальнейшую настройку, откроем порты 22, 80, и 443 на стороне wan, что ни в коем случае не стоит повторять на реальном железе:
  
 +<code bash>
 uci add firewall rule uci add firewall rule
 uci set firewall.@rule[-1].name='Allow-Admin' uci set firewall.@rule[-1].name='Allow-Admin'
Строка 276: Строка 305:
 uci commit firewall   uci commit firewall  
 service firewall restart service firewall restart
 +</code>
  
 Проверяем подключение по ssh с хоста в физической сети: Проверяем подключение по ssh с хоста в физической сети:
  
 +<code>
 $ ssh root@10.1.2.105 $ ssh root@10.1.2.105
 The authenticity of host '10.1.2.105 (10.1.2.105)' can't be established. The authenticity of host '10.1.2.105 (10.1.2.105)' can't be established.
Строка 303: Строка 334:
 -------------------------------------------------- --------------------------------------------------
 root@OpenWrt:~# root@OpenWrt:~#
 +</code>
 Работает! Можно уверенно воплощать самые смелые фантазии на вашем роутере. Работает! Можно уверенно воплощать самые смелые фантазии на вашем роутере.
  • Последнее изменение: 14:12:2024 14:04