
如果你的x86 Mini PC迷你主機有超過一個網口,那麼用來玩 Openwrt 就不要錯過,尤其是 Openwrt這麼輕量級的路由網路系統,不用 Proxmox 虛擬機來運行太浪費。本文繼續是20分鐘快文一篇,總結Proxmox PVE上安裝Openwrt的幾個重點、常見問題、以及如何極速安裝的方法。
摘要節點
Proxmox 上安裝OpenWRT的三大思路
根據網上的分享,在Proxmox上安裝OpenWRT有三大思路:
- VM (Virtual Machine)虛擬機
- CT (Container, 或稱LXC Linux Container) 容器
- Docker 容器

按小U的主觀分析,第一方案VM (Virtual Machine)虛擬機 是最優解。雖然VM理論上運行效率不及容器,但是在INTEL 12代N100 X86這種高效能平台,效率的差異微乎其微。而且VM有着 LXC和Docker 不能媲美的兩大優點:
VM的內核是獨立的:才能實現完整的Openwrt
「正宗」Openwrt (就是在無線路由器上刷機的) 的Linux Kernel 內核,和mainline主線的Kernel內核並不完全等同。Openwrt有着很多爲了網路效率、網路功能而做的Kernel Patches。因此,只有用VM運行的Openwrt,才是“真正”的Openwrt。LXC和Docker的Openwrt,因爲內核是共用PVE HOST宿主主機,也就是PVE的Debian線Kernel。
VM實現直通十分簡單
硬件直通(passthrough)是虛擬機系統中的重要概念(和玩法)。理論上,直通可以實現硬件的效率最大化和隔離(也就是只有直通的那個系統可以“碰到”直通的硬件)。這在網路安全理論上十分重要,例如,WAN接口是要做到絕對的隔離防火牆,所以WAN的網口用直通隔離十分合適。但是如果在虛擬層面上,是利用Linux Bridge 虛擬網橋來做WAN,就增加了主機會被暴露的風險,人爲或BUG導致本身應該處於內網的虛擬機或宿主機串到了WAN上就麻煩了。VM上直通硬件用滑鼠點幾下就可以了,CT(LXC)中要用修改文檔的方法把權限授予 Container,新手操作比較困難。
因此,Ups-N100 也是選用Proxmox的VM虛擬機來運行Openwrt,這是多數人最佳的選項。
Openwrt x86系統鏡像的選擇
確定了 Openwrt的安裝思路後,到Openwrt 的官網關於 x86的安裝wiki頁面:[OpenWrt Wiki] OpenWrt on x86 hardware (PC / VM / server) 介紹到 Openwrt 的鏡像有好多選擇:

首先是系統架構有四種:
- 64: 現行絕大多數x86主機都是64位的,選這個
- Generic: 32位主機的,例如Pentium四代
- Legacy: 超級老爺機 Pentium MMX, i586 等等
- Geode:沒聽說過的上古平台
然後到文件系統,這一步我們在刷Openwrt時候會比較常遇到:

- ext4-combined-efi.img.gz 這個磁碟映像使用單一的可讀寫 ext4 分區,而不使用只讀的 squashfs 根文件系統。因此,根分區可以擴展以填滿大型硬碟(例如 SSD/SATA/mSATA/SATA DOM/NVMe 等)。由於需要只讀的 squashfs 分區才能運作,功能如安全模式或出廠重置將無法使用。該映像包含啟動分區和根分區以及更新的 GRUB2 的主啟動記錄(MBR)區域。
- ext4-combined.img.gz 這個磁碟映像與上述相同,但它旨在使用 PC BIOS 而非 EFI 啟動。
- ext4-rootfs.img.gz 這是一個僅包含根分區的分區映像。它可用於安裝 OpenWRT,而不覆蓋啟動分區和主啟動記錄(MBR)。
- squashfs-combined-efi.img.gz 這個磁碟映像使用傳統的 OpenWRT 佈局,包含一個只讀的 squashfs 根文件系統和一個可讀寫分區,用於存儲設定和安裝的軟件包。由於這個映像的組裝方式,你將只有不到 100MB 的空間來存儲額外的軟件包和配置,且 extroot 不起作用。它支持從 EFI 啟動。
- squashfs-combined.img.gz 這個磁碟映像與上述相同,但它旨在使用 PC BIOS 而非 EFI 啟動。
- squashfs-rootfs.img.gz
- kernel.bin Openwrt的內核
- rootfs.tar.gz 這個壓縮包包含來自根分區的所有文件。可以將其解壓到根文件系統上,而不需要覆蓋分區。為避免衝突,強烈建議備份任何舊文件,並將此文件解壓到一個空文件系統上。
是不是十分複雜?小U幫大家梳理:
文件系統 EXT4 vs SquashFS vs 散件
用一個極度不嚴禁但容易理解的比喻:EXT4可以理解爲我們常見的Linux的NTFS,可以隨意讀寫修改。而SquashFS就像一個下了寫保護的USB儲存或者是CD,不能隨意讀寫。在「傳統」的OpenWRT用途環境中,SquashFS更爲主流,他將系統的最主要文件(出廠設定)寫保護了起來,有事就同透過長按 RESET按鈕,實現恢復到出廠設定。但是SquashFS修改起來就十分困難。
因爲我們使用 Proxmox VM虛擬Openwrt,Proxmox本身有着極其強大的虛擬機備份和快照功能。這能夠完全取代 SquashFS 的功能。所以,x86上我們優先選擇 EXT4。
最後題外話的說一下“散件”。鏡像名稱中有 combined和combined-efi的系統鏡像,都是包含了啓動分區以及系統分區(Linux的啓動邏輯就不詳細講,有興趣請留言)但散件就是自己來“組裝”,最常見就是自己來搞定Kernel 的啓動,然後把rootfs 放到一個分區中繼續加載系統,LXC常見做法。
Combined vs Combined-EFI
傳統和EFI的啓動引導,Proxmox實際上兩種都支援,EFI / UEFI 引導能支援更多種的硬碟分區和啓動方式,黑群暉系統多數都選UEFI引導。但是 OpenWRT 我個人認爲沒有必要那麼花俏,選擇 Combined , 用傳統BIOS方法啓動 即可。
綜上所述,Ups-N100 是選用 x86/64/ext4-combined.img.gz 的鏡像安裝Openwrt。
極速安裝 OpenWRT VM的方法
Proxmox用家一定要知道的一鍵腳本大全: Proxmox VE Helper-Scripts (tteck.github.io) 有着Openwrt的極速安裝腳本,只需要在PVE SHELL中跟着指示輸入:
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/vm/openwrt.sh)"然後按提示操作即可。
兩個要點:
- 開始前先設定好兩個虛擬網橋(後面可以修改)
- 虛擬網橋的VLAN tag 在啓動後在 VM 的 Option中刪去。不然會連不上。
最後不要忘了檢查是否要把 rootfs分區拓展到Proxmox分配的大小。不然你分了8GB給Openwrt他默認只有200MB: https://openwrt.org/docs/guide-user/installation/openwrt_x86#expanding_root_partition_and_filesystem
OpenWRT 網卡:直通 vs Linux Bridge虛擬網橋
最後說多網口的主機怎麼把網卡(網口)交給Openwrt管理。直通的好處,上文已經說過了,可以實現硬件的效率最大化和隔離。而且,透過Linux Bridge交給Openwrt的Port Status永遠是綠色Connected,而且沒有連線速率。直通的網卡就有正確顯示:

但是如果把所有網口,例如Ups-N100上的4個2.5GBE網口都直通了給Openwrt,就會讓PVE宿主主機沒有了網卡,無法透過網路訪問。所以至少是要保留一個Linux Bridge虛擬網橋,這個網橋起碼能連接着三個“東西”:
- Proxmox Host宿主系統
- 這個物理網卡網口
- Openwrt系統
Ups-N100保留了兩個 Linux Bridge,一個的IP CIDR是掛在和Openwrt同IP段。一個是掛在上級路由器、慣用路由器的IP段上。這是爲了方便在OpenWRT或者Proxmox VM出現問題時候,還能夠透過將電腦IP設爲同IP段來訪問到Proxmox。
由於Proxmox VM的硬件加載機制,Linux Bridge會首先加載,然後再到直通網卡。所以爲了保持 Openwrt裡面的 eth0 eth1 eth2 eth3 順序,和 Ups-N100 物理接口上的標註順序一致,所以 eth0 和 eth1 設爲 Linux Bridge,eth2 和 eth3 設爲直通。又由於理論上直通的網卡隔離性安全性最好,所以我把WAN口設定爲直通的eth3接口(最邊上的)。這樣就很好區分了。
如果你能看到這裡,相信你也能開始把玩 x86上的 Openwrt 虛擬機,體驗強大的軟路由能力。如果你不知道我在寫什麼,太難了,可以考慮我的 Ups-N100 (毫不掩飾的業配)。


写得很用心。
感謝你的支持
如果 wan port 是dynamic IP,proxmox 可以點config?
由 openwrt 管理