緣由
一切的本來是可以不用這麼複雜的。
之前入手了一台 4 Port Ethernet 的工業電腦,
本來安裝 Proxmox VE (這過程很曲折,可以另外寫一篇)然後做網卡直通 (NIC Passthrough),
但苦惱目前這顆 CPU: Intel Celeron J1900
支援 Intel® Virtualization Technology (VT-x),可以做虛擬化(可以開虛擬機 VM)
但不支援 Intel® Virtualization Technology for Directed I/O (VT-d)
對 Intel Celeron J1900 有興趣的話可以看 這裡

但這個在網卡直通是必要項,故心一橫,直接裸機 (Bare metal) 安裝 OpenWRT 吧!
這中間也遇到有的沒的坑,就寫了一篇文章來分享。
備註:Directed I/O (VT-d) 是一種虛擬化技術,讓虛擬機 (VM) 直接控制實體網卡,
繞過 Hypervisor 層以實現極致的網路性能、低延遲和低 CPU 佔用率。
那我們就開始吧!
🖥️ 前置準備
需準備的硬體
- CPU:x86_64 的 CPU (Intel 或 AMD 皆可)
- RAM:建議 ≥ 1 GB
- Disk:建議 ≥ 8 GB SSD/eMMC (屆時會 整顆格式化掉 要注意)
- Ethernet:64-bit 映像檔支援 Intel 與 Realtek Ethernet 晶片組(工業電腦常見的 Intel i210/i225/i350 均有良好支援)
範例使用的硬體
- CPU: Intel Celeron J1900 (x86_64)
- RAM: 4GB
- HDD: 64GB SSD
- Ethernet: Intel(R) PRO/1000 Network Connection x 4

(圖片來源)
工具準備
- 一台 Windows/Linux/macOS 電腦,開啟 SMB (網路上的芳鄰) 分享
- 一支做好 Ubuntu Live USB 隨身碟(≥ 2 GB)
Step 0: 製作 Ubuntu Live USB

(圖片來源)
- 下載 Ubuntu ISO 檔案
前往 Ubuntu 官網
下載所需版本的 ISO 檔案,建議下載 LTS (Long-Term Support) 版本,
選擇 Intel or AMD 64-bit architecture 的版本

- 使用 Balena Etcher 製作 Live USB
下載 Balena Etcher
安裝並開啟 Balena Etcher
點擊「Flash from file」選擇下載的 Ubuntu ISO
點擊「Select Target」選擇 USB 隨身碟
插入至少 8GB 大小的 USB 隨身碟
點擊「Flash」開始寫入(需要輸入系統密碼)
等待完成即可

Step 1: 全機備份
如果原本硬碟有資料,可以做磁碟備份,
以免到時候反悔要處理有得處理,
如果是全新安裝可以跳過這段
備份的步驟
使用 Ubuntu Live CD (Live USB) 開機
掛載 SMB (網路上的芳鄰的共享資料夾)
sudo apt update -y
# 安裝 SMB/CIFS 協議
sudo apt install -y cifs-utils
# 新增一個 smb_share 資料夾(名稱可以自己取)
sudo mkdir /mnt/smb_share
# 掛載你的 SMB 目錄
sudo mount -t cifs -o username=YOUR-USERNAME //192.168.1.10/ /mnt/smb_share
確認磁碟資訊
bashlsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,LABEL
# 或
fdisk -l
使用 dd 全磁碟複製(最完整,含 MBR/GPT/EFI)
# 備份
sudo dd if=/dev/sda of=/mnt/smb_share/disk_backup.img bs=4M status=progress conv=fsync
ddrescue(更安全、有錯誤處理)
# 安裝
sudo apt-get install gddrescue
# 備份到映像檔(含 log 檔方便中斷續傳)
sudo ddrescue -d -r3 /dev/sda /mnt/smb_share/disk_backup.img /mnt/smb_share/disk_backup.log
參數說明:
-d:直接讀取(bypass cache)-r3:遇到壞軌重試 3 次- log 檔讓你可以中斷後繼續
備註: dd 會備份整顆磁碟(包含空白空間),映像檔大小 = 磁碟總容量
要準備足夠的空間
還原的步驟
還原方式
使用 dd 還原
# 從映像檔還原到磁碟
sudo dd if=/mnt/smb_share/disk_backup.img of=/dev/sda bs=4M status=progress conv=fsync
使用 ddrescue 還原
# ddrescue 還原
sudo ddrescue -d /mnt/smb_share/disk_backup.img /dev/sda /mnt/smb_share/disk_backup.log
Step 2:下載正確的 OpenWRT 映像檔
前往官方下載頁面:https://downloads.openwrt.org/releases/
選擇最新穩定版(目前為 25.12.x),路徑為:
releases → [版本號] → targets → x86 → 64

UEFI 模式必須下載帶 -efi 的檔案:
| 檔名 | 說明 |
|---|---|
generic-ext4-combined-efi.img.gz |
✅ 推薦,可擴展分區 |
generic-squashfs-combined-efi.img.gz |
唯讀 rootfs,類似嵌入式路由器 |
UEFI 系統必須使用 64-bit EFI OpenWRT 映像,大多數新板子需要 UEFI,Legacy BIOS 支援已較罕見。
這次下載的檔案檔名是
openwrt-25.12.2-x86-64-generic-ext4-combined-efi.img.gz
僅供參考
驗證映像完整性 (Optional)
下載完成後,在終端機執行 sha256 驗證(與官網 sha256sums 核對):
# Linux / macOS
sha256sum openwrt-25.12.2-x86-64-generic-ext4-combined-efi.img
# Windows (PowerShell)
Get-FileHash openwrt-25.12.2-x86-64-generic-ext4-combined-efi.img -Algorithm SHA256
Step 3:確認並設定 BIOS
進入 BIOS 設定(通常按 Delete / F2 / F12):
這邊只是列個大概,每家 BIOS 設定選項有些許不同
- 關閉 Secure Boot(Security → Secure Boot → Disabled)
- 確認開機模式為 UEFI(Boot → Boot Mode → UEFI only)
- 調整開機順序:將 USB 設為第一優先
- 儲存並重啟(Save & Exit)
若 OpenWRT 無法載入,請確認已停用 Secure Boot,並確認 USB 裝置已設為優先開機裝置。
Step 4:將 OpenWRT 映像寫入磁碟
使用 Live CD (Live USB) 開機
確認磁碟資訊
bashlsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,LABEL
# 或
fdisk -l
找出你的 SSD(通常是 /dev/sda,NVMe 則為 /dev/nvme0n1)
先確定是哪顆磁碟,這邊假設是 /dev/sda
先解壓縮
gunzip openwrt-25.12.2-x86-64-generic-ext4-combined-efi.img.gz
會得到 openwrt-25.12.2-x86-64-generic-ext4-combined-efi.img 檔案
然後使用 dd 全磁碟複製 開始安裝
(你沒看錯,就是用 dd 指令)
sudo dd if=/mnt/smb_share/openwrt-25.12.2-x86-64-generic-ext4-combined-efi.img of=/dev/sda bs=4M status=progress conv=fsync
sync
範例輸出:
126123520 bytes copied, 3.25 s, 38.8 MB/s
⚠️
/dev/sdX請替換為你的 SSD,切勿寫錯裝置 (寫錯會悲劇)
這邊做的是直接「整顆」硬碟做複製,故 /dev/sda (範例值) 後面不需要帶數字
Step 5:擴展 OpenWRT 根目錄分區(強烈建議,一定要做)
OpenWRT 預設 img 映像檔只有約 100~270 MB 的 root 分區 (Partition),
以我的例子來說,我 SSD 有 64GB,但預設只有 29.5M 可以使用
需擴展以便利用完整磁碟
我們再次使用 Live CD (Live USB) 開機
然後使用 parted 指令來查看磁碟區
parted /dev/sda
然後打
print
中間會叫你 Fix 有問題的磁區,你就 Fix
這邊會自動修正 GPT 問題
這邊紀錄一下執行結果
root@OpenWrt:~# parted /dev/sda
GNU Parted 3.6
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: ATA Kston 64GB (scsi)
Disk /dev/sda: 64.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
128 17.4kB 262kB 245kB bios_grub
1 262kB 17.0MB 16.8MB fat16 legacy_boot
2 17.0MB 64.0GB 64.0GB ext4
然後擴展磁碟分區
# 擴展分區(以 /dev/sda2 為例,為 ext4 rootfs)
parted /dev/sda resizepart 2 100%
做完可能要再 重開機,然後再次進入 LiveCD (LiveUSB)
先做檔案系統檢查(必要步驟)
e2fsck -f /dev/sda2
刷新分區表
partprobe /dev/sda
擴展 ext4 檔案系統到分區最大
resize2fs /dev/sda2
可以使用 df 再次查看
df -h
記錄一下執行結果
# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 58.8G 372.6M 58.5G 1% /
tmpfs 1.9G 1.8M 1.9G 0% /tmp
/dev/sda1 16.0M 6.2M 9.8M 39% /boot
/dev/sda1 16.0M 6.2M 9.8M 39% /boot
tmpfs 512.0K 0 512.0K 0% /dev
你就會發現 ext4 磁區的可用空間變大了,
如果沒有做 resize2fs 擴展磁區,分區已經撐滿了,但磁區仍然在很小的狀態
Step 6:移除 USB,從 SSD 開機
- 重啟機器,移除 USB 隨身碟
- UEFI 應自動偵測到 EFI 分區並從 SSD 開機
- 開機後看到 OpenWrt 的 GRUB 選單及登入提示即成功
Step 7:初始網路設定(4 Port 主機設定的關鍵步驟)
這邊會看到一堆開機 Log 文字,熟悉的 Linux 登入字樣
OpenWRT 預設會幫你設定
eth0→ LAN(br-lan,IP: 192.168.1.1)eth1→ WAN(DHCP client)
帳號為 admin 預設沒有密碼,
ssh 有開啟,預設綁到 eth0,
很有可能沒有 LuCI (Web UI) 介面
接下來我們一步一步著手設定你的 OpenWRT
識別網路介面

(圖片來源)
可以用以下步驟來確認網路介面
ip link show
# 或
ls /sys/class/net/
紀錄執行結果
# ip link show
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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br-lan state UP qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br-lan state DOWN qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br-lan state DOWN qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DOWN qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
6: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
你會看到類似 eth0 eth1 eth2 eth3(或 enp* 名稱)
確認哪個 port 對應哪條實體網路線:
# 逐一測試,觀察 Link 狀態
ip link set eth0 up
cat /sys/class/net/eth0/carrier # 1 = 有連線, 0 = 無連線
OpenWRT x86 預設:
eth0→ LAN(br-lan,IP: 192.168.1.1)eth1→ WAN(DHCP client)
預設就有設定好 NAT 連線。
以我的例子為例,
- LAN1 port 是 eth0
- LAN2 port 是 eth1
- LAN3 port 是 eth2
- WAN port 是 eth3
就依序設定好對應的 WAN 與 LAN,可能跟你的情況不同。
這邊你用 Web UI 設定也可以。
這邊還是提供指令版的修改網路設定(1 WAN + 3 LAN)
編輯 /etc/config/network:
vi /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 interface 'lan'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
list device 'eth0'
list device 'eth1'
list device 'eth2' # 將 eth1, eth2 也加入 LAN bridge
config interface 'wan'
option device 'eth3' # 指定第4個 port 為 WAN
option proto 'dhcp' # 或 pppoe
在 OpenWRT 中,你需要明確指定哪個實體 NIC 網卡用於 WAN 或 LAN,
x86 硬體與一般路由器不同,端口角色必須手動設定。
套用設定
/etc/init.d/network restart
Step 8:安裝 LuCI (Web UI) 圖形介面
如果是穩定版 (stable) 預設有安裝 LuCI,
如果你裝的是 SNAPSHOT 版本的話,要手動安裝
因為 OpenWRT 在一個版本之後,改了套件管理程式
我就新舊版指令都列出來
新版指令 (使用 apk 套件管理程式)
apk update
apk add luci
舊版指令 (使用 opkg 套件管理程式)
opkg update
opkg install luci
然後啟動 httpd 伺服器
/etc/init.d/uhttpd enable
/etc/init.d/uhttpd start
之後從 LAN 側的電腦瀏覽器開啟 http://192.168.1.1 即可使用圖形介面。

Step 9:後續基本安全設定
這邊就依照你的需求,安裝所需的軟體
這邊跟一般 Linux 操作類似,就不多敘述了
# 設定 root 密碼
passwd
# 安裝常用工具
opkg update
opkg install curl wget-ssl btop irqbalance
Step 10:(加碼)安裝 Docker
這台範例機器 CPU / RAM / Disk 應該綽綽有餘,
聰明的你,可能會想到要來裝 Docker,沒問題,安排!
新版指令 (使用 apk 套件管理程式)
# 套件更新
apk update
# 安裝 docker
apk add dockerd docker docker-compose luci-app-dockerman
舊版指令 (使用 opkg 套件管理程式)
# 套件更新
opkg update
# 安裝 docker 套件
opkg install dockerd docker docker-compose luci-app-dockerman
記得啟動服務
/etc/init.d/dockerd enable
/etc/init.d/dockerd start
以上指令就是安裝 Docker 相關套件,說明如下:
- dockerd:執行容器所需的主要 Docker 守護程式/引擎。
- docker:用來與守護程式互動的命令列介面 (CLI)。
- docker-compose:用於定義和執行多容器應用程式的工具。
- luci-app-dockerman:一個受歡迎的網頁式介面(LuCI 應用),可直接從 OpenWRT 瀏覽器儀表板管理 Docker 容器。

常見問題排除
| 問題 | 解決方法 |
|---|---|
| UEFI 開機失敗 | 確認下載的是 -efi 版本;關閉 Secure Boot |
| 只看到 UEFI Shell | 進 BIOS 手動加入開機項:EFI\boot\bootx64.efi |
| 網路 port 認不到 | 確認晶片是 Intel / Realtek;可能需安裝 kmod-* 驅動 |
| 磁碟空間不足 | 擴展 rootfs 分區 |
| WAN 無法上網 | 確認 eth 編號對應正確,用 ip link 和 carrier 確認 |
完成以上步驟後,你的工業電腦就會是一台以 UEFI 模式運行的 OpenWrt x86_64 路由器,4 個網路口可以靈活設定為任意的 WAN/LAN 組合。
參考資料
OpenWrt on x86 hardware (PC / VM / server)
https://openwrt.org/docs/guide-user/installation/openwrt_x86openwrt 教學













































































