使用 OpenWRT 配置 PXE 启动
在家庭服务器环境或小型机房中,通过网络(PXE)启动服务器可以显著简化设备的安装流程。本文将介绍如何在 OpenWRT 路由器 + 一台内网 Linux 服务器的组合下,搭建可用于 UEFI 启动的 PXE 环境,并支持 iPXE、HTTP 启动等现代特性。
本文实验成功的环境:
- 路由器:OpenWRT(系统版本 24.10)
- TFTP / HTTP 服务器:一台内网 Linux 服务器(安装 Ubuntu 系统)
- 客户端:支持 UEFI PXE 的服务器主板
PXE 启动原理
PXE(Preboot eXecution Environment)启动主要由以下步骤组成:
- 客户端通过网络发送 DHCP Discover
- DHCP 服务器返回 IP 地址,并附加 PXE 相关字段:
- next-server(TFTP server 的 IP)
- filename(要下载的启动文件,如
snponly.efi)
- 客户端向 TFTP 服务器请求文件
- 使用下载到的引导器加载后续启动流程,例如:
- iPXE(支持 HTTP、iSCSI 等)
- Linux kernel + initrd
OpenWRT 的 dnsmasq 内置了 PXE 支持,并且可以方便地通过 LuCI 界面配置。
配置 TFTP 服务
首先,在内网 Linux 服务器上安装 TFTP 服务,用于提供必要的文件。以 tftpd-hpa 为例:1
sudo apt install tftpd-hpa
编辑 /etc/default/tftpd-hpa:1
2
3
4TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
重启服务:1
sudo systemctl restart tftpd-hpa
配置 HTTP 服务
以 Nginx 为例:1
sudo apt install nginx
重启服务:1
sudo systemctl restart nginx
准备文件
为了实现 UEFI PXE 启动,我们需要准备相关启动文件。可以预先下载一个完整的 Ubuntu 安装镜像,例如ubuntu-22.04.5-desktop-amd64.iso,然后从中进行提取。
通过 TFTP 提供的文件
以下文件需要放置在 TFTP 服务器目录 /srv/tftp/ 下:
snponly.efi,这是 iPXE 引导文件,可以通过https://boot.ipxe.org/snponly.efi链接下载autoexec.ipxe,这是snponly.efi启动之后会自动加载的配置,可以写入以下内容:将此处的1
2
3
4
5
6
7
8
9
10#!ipxe
echo Booting via HTTP script...
dhcp
set server_ip 192.168.x.x
set base_url http://${server_ip}/pxe
kernel ${base_url}/vmlinuz ip=dhcp url=${base_url}/ubuntu-22.04.5-desktop-amd64.iso
initrd ${base_url}/initrd.img
boot192.168.x.x替换为你的 HTTP 服务器 IP,镜像的文件名也可以根据需要修改。这样,启动程序就会进一步通过 HTTP 加载必要的文件。
为了验证 TFTP 是否配置正确,可以使用 tftp 命令测试下载 snponly.efi 文件:1
tftp 127.0.0.1 -c get snponly.efi
通过 HTTP 提供的文件
在顺利启动后,iPXE 会根据autoexec.ipxe的内容,通过 HTTP 加载内核和 initrd 文件。我们可以准备以下文件放在 Nginx HTTP 服务器目录 /var/www/html/pxe/ 下:
vmlinuz和initrd,这是 Ubuntu 安装镜像中的内核和初始内存盘文件。可以通过挂载 ISO 镜像来提取:1
2
3
4
5
6mkdir /mnt/iso
sudo mount -o loop ubuntu-22.04.5-desktop-amd64.iso /mnt/iso
cp /mnt/iso/casper/vmlinuz /var/www/html/pxe/
cp /mnt/iso/casper/initrd /var/www/html/pxe/
sudo umount /mnt/iso
rmdir /mnt/isoubuntu-xxx.iso,将完整的 ISO 镜像文件也放在/var/www/html/pxe/目录下。
配置 OpenWRT
登录 OpenWRT,进入「网络」 → 「DHCP/DNS」 → 「PXE/TFTP」进行配置。可以参考下图:

「文件名」「服务器名称」「服务器地址」和「强制」选项都需要配置,否则 PXE 启动可能无法正常工作。
配置完成后,登陆 OpenWRT 重启 dnsmasq 即可:1
/etc/init.d/dnsmasq restart
测试 PXE 启动
将新的服务器主板设置为从网络启动,确保其连接到同一局域网内。启动后,设备应通过 DHCP 获取 IP 地址,并从 TFTP 服务器下载 snponly.efi 文件,随后加载 iPXE 并通过 HTTP 获取内核和 initrd 文件,最终进入 Ubuntu 安装界面。

如果出现问题,可以查看 OpenWRT 的日志,或者通过抓包工具(如 Wireshark)分析 DHCP 和 TFTP 交互过程,找出问题所在。
顺利的话,此时就可以成功进入 Ubuntu 界面,使用ubiquity或者ubuntu-desktop-installer程序进行系统安装了。