用RouterOS PXE启动Linux(GRUB,支持SecureBoot)

PXE关键两个步骤:

  1. 启动一个TFTP服务器,放置相应的启动文件
  2. 在DHCP服务器上设置启动文件

因为TFTP在使用控制端口连接上以后会重选任意端口来传送文件,所以TFTP服务器必须在DHCP服务器上(或者设置DMZ主机),单纯转发控制端口是无效的。

准备启动文件

需要两个文件:

SecureBoot shim

这边给出了用Ubuntu下载的示例。其它发行版或系统请自行拆包。

apt-get source shim-signed

然后从./shim-signed-xxx (xxx 为版本号)提取出shim.efi.signed 文件,重命名为bootx64.efi 。

GRUB netboot

下载http://archive.ubuntu.com/ubuntu/dists/xenial/main/uefi/grub2-amd64/current/grubnetx64.efi.signed ,重命名为grubx64.efi 。

配置RouterOS

首先我们把准备的两个文件传送到RouterOS上磁盘任意位置(可以是外接的USB存储设备或者SD卡):

然后配置DHCP服务器:

/ip dhcp-server
set 0 bootp-support=dynamic
network set 0 boot-file-name=bootx64.efi

最后配置TFTP服务器权限:

/ip tftp
add allow-rollover=yes ip-addresses=<你的内网网段> real-filename=<上传的文件位置>/bootx64.efi req-filename=bootx64.efi
add allow-rollover=yes ip-addresses=<你的内网网段> real-filename=<上传的文件位置>/grubx64.efi req-filename=grubx64.efi

(用图形界面配置RouterOS的话,注意allow-rollover 这一字段在WinBox和网页端是没有的,必须通过命令行设置。对于较大文件建议设为yes 不然有可能导致客户端下载失败。)

这样就大功告成啦。

在局域网段内启动PXE设备,然后就会看到熟悉的GRUB界面:

至于如何用这个GRUB来联网引导并安装操作系统,参见本系列的下一篇文章

已知问题

在一些老旧的PXE ROM(例如VMWare Workstation带的Intel虚拟网卡ROM)上,由于启动文件太大,会报错:

PXE-E79: NBP is too big to fit in free base memory
PXE-M0F: Exiting Intel PXE ROM
Operating System not found

Surface 3上触摸屏和UEFI固件画的触摸键盘无法被GRUB识别,因此还是要插键盘。


 

参考资料:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据