sysadmin:proxmox:openwrt

Это старая версия документа!


Эмулируем arm64 OpenWRT роутер в Proxmox VE

В каталоге с релизами, выбираем версию, затем 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.3-x86-64-generic-squashfs-combined-efi.img.gz

Disclaimer: выбранный путь хранения образа, возможно, не best practice, но он присутствует на Proxmox ноде по умолчанию. Также у меня storage называется local-zfs, если у вас другой путь, то просто замените local-zfs на свой в параметрах –efidisk0 и –scsi0 в командах ниже.

Собственно, уже можно создавать машину

qm create $(pvesh get /cluster/nextid) \
--name "openwrt-amd64" \
--description "openwrt-amd64" \
--arch x86_64 \
--tags "openwrt" \
--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.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

и запускать

qm start <VM ID> ; qm terminal <VM ID>

Если все закончилось хорошо, то в терминале увидим примерно следующее:

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="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.3 r23809-234f1a2efa"

выходим из терминала через ctrl+o, подчищаем за собой и переходим к следующему шагу

qm stop <VM ID> ; qm destroy <VM ID

Шаг 3: превращаем виртуалку в маршрутизатор

В данный момент на виртуальном OpenWRT есть всего лишь один сетевой интерфейс, который автоматически подключается в br-lan и инициализируется через DHCP-сервер на реальном роутере. Чтобы сделать маршрутизатор маршрутизатором, нам нужно добавить как минимум еще один сетевой интерфейс. Для этого в ProxmoxVE создадим Linux Bridge интерфейс vmbr1.

Через шелл:

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

или же путь через 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 <vmid>; qm terminal</vmid>

проверяем:

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
       

Источник

  • Последнее изменение: 14:12:2024 13:41