在 pxe 的一般場景下,通常在只需要在 dhcp 服務中配置一個通用的 filename
來指定客戶端在 tftp
服務端獲取的引導程序,但是在略微復雜的場景中,比如可能有些服務器默認是 legacy
模式,而有些服務器是 UEFI
模式,這兩種模式使用的引導程序是不同的,但我們又不想頻繁的去修改 dhcp 配置文件。本文主要探討的就是這個問題,如何配置 dhcp 來應對復雜的服務器環境
難點主要有兩個,一個是區分某些 dhcp 客戶端是否需要 pxe 引導程序,另外一個是如何區分不同的模式和架構來去分配對應的 pxe 引導程序
Request For Comments(RFC),是一系列以編號排定的文件。文件收集了有關互聯網相關信息,以及UNIX和互聯網社區的軟件文件。RFC文件是由Internet Society(ISOC)贊助發行?;镜幕ヂ摼W通信協議都有在RFC文件內詳細說明。RFC文件還額外加入許多在標準內的論題,例如對于互聯網新開發的協議及發展中所有的記錄。因此幾乎所有的互聯網標準都有收錄在RFC文件之中。
DHCP Option 60 Vendor class identifier
為廠商類標識符。這個選項作用于客戶端可選地識別客戶端廠商類型和配置。這個信息是N個8位編碼,由DHCP服務端解析。廠商可能會為客戶端選擇定義特殊的廠商類標識符信息,以便表達特殊的配置或者其他關于客戶端的信息。比如:這個標識符可能編碼了客戶端的硬件配置??蛻舳税l送過來的服務器不能解析的類規范信息必須被忽略(盡管可能會有報告)。
dhcp-options
的 man 手冊中有提到對于架構類型在 RFC 4578 中有一套標準,可通過 if 語句判斷 dhcp 客戶端的Arch代碼來提供不同的PXE引導程序給客戶端
# man dhcp-optionsoption pxe-system-type uint16 [, uint16 ... ]; A list of one ore more 16-bit integers which allows a client to specify its pre-boot architecture type(s). This option is included based on RFC 4578.
下述為 RFC 4578 標準中對 arch 代碼制定的標準,name
字段包含啟動模式和 cpu 架構信息(自己的猜測,這里沒找到對于 name 更詳細的解釋)
Type Architecture Name ---- ----------------- 0 Intel x86PC 1 NEC/PC98 2 EFI Itanium 3 DEC Alpha 4 Arc x86 5 Intel Lean Client 6 EFI IA32 7 EFI BC 8 EFI Xscale 9 EFI x86-64
通過前文描述,我們得知 arch 代碼主要是由硬件廠商定義好的,配置好 pxe 服務,arch 代碼的獲取至關重要,去咨詢硬件廠商效率太慢,這里通過更為方便的抓包獲取
抓包主要獲取提供 dhcp 服務的網卡的數據包,需服務端開啟 dhcp 服務,客戶端通過網卡啟動 windows端通過
wireshark
來完成 linux服務端使用tcpdump -i <interface> -w <file>
生成到文件然后用 wireshark 分析
以下提供幾個 dhcp option 60
和 dhcp option 93
報文示例:
UEFI
模式下 這里獲取到的 arch 代碼為 7
legacy
模式下 這里獲取到的 arch 代碼為 0
UEFI
模式下 這里獲取到的 arch 代碼為 11
以上抓包都是在網絡引導的環境下進行的,在使用已安裝操作系統中的網卡去發送 dhcp 請求時,整個數據包傳輸過程都沒有 option 60
和 option 93
這兩個選項的參與,我猜測這兩個選項只有在網絡引導的環境下才會去參與
在上述論證基礎之上,我們就可以通過配置 dhcp 服務來使 pxe 足以應對復雜的網絡環境和硬件環境
解決前言中提到的兩個難點分別通過 option 60
和 option 93
分別解決
# 這里應該是將 option 93 的值格式化成 16 進制,用于下面的 if 判斷(猜測)option arch code 93 = unsigned integer 16;class "pxeclients" { # 這里判斷 option 60 選項的值的前9個字符是否是 PXEClient match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 10.17.25.17; # 這里通過 if 判斷 arch 代碼來決定如何去分配對應的 pxe 引導程序 if option arch = 00:07 { filename "/BOOTX64.efi"; } else if option arch = 00:09 { filename "/BOOTX64.efi"; } else { filename "/pxelinux.0"; } }
較為詳細的配置文件示例,后面有簡化版
# 啟用 PXE 支持allow booting;allow bootp;# PXE 定義命名空間option space PXE;option PXE.mtftp-ip code 1 = ip-address;option PXE.mtftp-cport code 2 = unsigned integer 16;option PXE.mtftp-sport code 3 = unsigned integer 16;option PXE.mtftp-tmout code 4 = unsigned integer 8;option PXE.mtftp-delay code 5 = unsigned integer 8;option arch code 93 = unsigned integer 16; # RFC4578authoritative;one-lease-per-client true;# 不使用DNS動態更新ddns-update-style none;# 忽略客戶端DNS更新ignore client-updates;# 不使用 PXE 的網絡shared-network main {subnet 10.17.25.0 netmask 255.255.255.0 { option routers 10.17.25.254; option subnet-mask 255.255.255.0; option domain-name "zhijie-liu.com"; # 在此網絡關閉PXE支持 deny bootp; pool { range 10.17.25.200 10.17.25.210; host nagios-test { hardware ethernet 00:0d:56:66:82:c3; fixed-address 10.17.25.200; } }}}# 使用 PXE 的網絡shared-network pxe {subnet 10.17.15.0 netmask 255.255.255.0 { option routers 10.17.15.254; option subnet-mask 255.255.255.0; option domain-name "xiyang-liu.com"; option domain-name-servers 10.17.26.88, 8.8.8.8; default-lease-time 86400; max-lease-time 172800; pool { range 10.17.15.1 10.17.15.20; class "pxeclient" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 10.17.25.17; if option arch = 00:07 { filename "/BOOTX64.efi"; } else if option arch = 00:09 { filename "/BOOTX64.efi"; } else { filename "/pxelinux.0"; } } # 根據 MAC 地址單獨分配地址和指定的 PXE 引導程序 host gpxelinux { option host-name "gpxelinux.zhijie-liu.com"; hardware ethernet 00:50:56:24:0B:30; fixed-address 10.17.15.8; filename "/gpxelinux.0" } }}}
簡化版(僅kvm平臺測試通過)
option domain-name "example.org";option domain-name-servers 8.8.8.8, 114.114.114.114;default-lease-time 84600;max-lease-time 100000;log-facility local7;option arch code 93 = unsigned integer 16;subnet 1.1.1.0 netmask 255.255.255.0 { range 1.1.1.100 1.1.1.200; option routers 1.1.1.253; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 1.1.1.21; if option arch = 00:11 { filename "/grubaa64.efi"; } }}
https://blog.csdn.net/u012145252/article/details/125405273
https://www.cnblogs.com/boowii/p/6475921.html
https://www.rfc-editor.org/rfc/rfc4578.html
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
蘋果手機和ipad藍牙怎么連接?而蘋果公司對版權的注重,蘋果的手機是跟別的機子,好象是又不能藍牙無線連接的。蘋果產品的藍牙一般只有連接上外設,肯定不能傳文件。所以又不能搜索別的手機,一直在搜索狀態。假如是iPhone和ipad之間傳東西的話,兩部機子都然后打開AirDrop這個功能就這個可以互傳了,使用方法是:1、再打開后選“所有人”或“僅限聯系人”。2、然后把以分享照片為例,可以打開相冊點照片右...
5g4g3g流量消耗對比?1.測試內容:看一小時1080P視頻,視頻內容是英雄聯盟S11全球總決賽的比賽之一。檢查各種網絡的功耗。2.測試環境室內,今天 天氣預報是7~15度。手機型號是紅米K30s,用了一年,電池精確電池損耗13%。系統是MIUI12.5.5穩定版。開啟智能刷新率,動態畫面補償,屏幕亮度50%,靜音播放,副卡電信4g待機。(測試3g4g5g時關閉wifi,測試wifi時關閉主卡)...
兒童短頭發怎么扎?1.將短發兩邊扎成小球。這種綁法簡單利落,守氣劉海有一種瞬間被萌化的感覺,簡直萌到骨子里了。2、短發寶寶也可以考慮這個丸子頭!把頭發都扎起來綁個皮筋固定就行了!這是一款超級流行的兒童發型!尤其是炎熱的夏天,讓小公主立馬變得涼快很多!3、帶上一個非常簡單的寶寶短發扎法,一個發夾就可以輕松搞定!就把頭發別在一邊,劉海是斜的。你不 不一定要穿裙子才能成為淑女!4.斜扎一個馬尾,自然流露...