openwrt自带的dnsmasq比想象中要好玩的多,它不仅提供了DHCP功能,还提供了dns的功能,不太理解的可以去搜索一下dnsmasq的相关资料。本次介绍一下dnsmasq的tftpboot功能。
tftpboot是是通过 TFTP(Trivial File Transfer Protocol)协议从网络加载操作系统或文件到设备的一种方式,常用于嵌入式设备(如路由器、交换机)和服务器的网络启动。它通常用于:
设备的引导加载:通过网络加载内核、操作系统或固件。
设备的恢复和升级:在设备固件损坏或系统不能正常启动时,通过网络传输固件进行恢复。
开发和调试:开发嵌入式系统时,便于快速加载和测试内核或系统文件。
换句话说,如果你的电脑或者嵌入式设备没有操作系统,可以通过这个功能对设备加载内核,甚至启动一个操作系统。这根后面的PXE有着密不可分的关系。
openwrt自带的dnsmasq就可以启用tftpboot功能并完成pxe之前初始化的一些列操作。我们以最有名的netboot引导文件为例介绍一下建立x86计算机的pxe安装linux的过程。
首先下载netboot引导文件
cd /mnt/usb/
# Legacy (PCBIOS) iPXE Bootloaders
wget --no-check-certificate https://boot.netboot.xyz/ipxe/netboot.xyz.kpxe
# UEFI iPXE Bootloaders
wget --no-check-certificate https://boot.netboot.xyz/ipxe/netboot.xyz.efi
配置tftp开启服务
uci set dhcp.@dnsmasq[0].enable_tftp=1
uci set dhcp.@dnsmasq[0].tftp_root=/mnt/usb/
uci set dhcp.@dnsmasq[0].dhcp_boot=netboot.xyz.kpxe
uci commit
/etc/init.d/dnsmasq restart
文件可以设置任意位置,你只需要保证你的openwrt还有向以你该的存储空间即可。然后你的x86的电脑只要在bios中修改系统引导顺序,把网卡的引导放到第一项,这样开机的时候,设备会自动通过dnsmasq的dhcp option 66 67来发现引导文件。dhcp option 66是引导服务器的地址,67是引导文件。
说到这里那么多说几句关于dhcp option DHCP 选项的标准化
核心规范:
RFC 2132: 定义了 DHCP 选项的使用以及如何扩展。
包括基础选项(如子网掩码、网关地址、DNS 服务器等)。
提供了一个编号机制,可扩展新的选项。
RFC 2131: 描述了 DHCP 的协议细节,包括租约和地址分配。
扩展与增强:
新的 DHCP 选项通过独立的 RFC 文档或 IANA 注册机制扩展。
IANA(Internet Assigned Numbers Authority)维护着 DHCP Option Codes 的官方注册列表。
私有选项:
保留了一个范围(通常是 Option 224-254)供组织定义自己的选项。
私有选项的格式和用途由实现者自行决定。
IANA 的 DHCP Option 代码分配列表:
IANA DHCP Option Numbers
包含所有标准化的 DHCP 选项编号、描述和相关 RFC。
RFC 文档:
核心定义在 RFC 2132 和 RFC 2131 中。
额外功能扩展在其他 RFC(如 PXE 定义在 RFC 4578)中。
换句话说,如果你有更多的需求,在开发嵌入式系统时,可以使用扩展的rfc标准自定义自己设备的功能,比如,摩托罗拉的企业无线AP使用了一个自定义的dhcp option在AP没有任何配置文件的情况下,启动以后自动获取tftpboot配置好的配置文件,做到零配置,零管理。
那么我为啥要在openwrt上使用tftpboot功能呢?实际上由于需要经常刷路由器,有了这个功能我就可以不用让我的电脑跟路由器之间频繁插拔网线了,只把需要刷机的路由器接入到网络里面,我就可以通过串口控制,在uboot里面来进行刷机操作。另外,其实使用这个功能是为了接下来网络启动树莓派来准备的。这个问题等下再介绍吧。
另外由于dnsmasq的强大,甚至我们可以使用dhcp option来实现更多的功能。比如给特定的设备配置不同的网关和dns.也留在以后的文章中进行介绍。