筆記如何建立一個PXE 和 HTTP Boot 的Server
先參考Ted哥的分享:
https://adersaytech.com/windowsos-tutorial/windows-deployment-service.html?fbclid=IwZXh0bgNhZW0CMTEAAR0HHHIrJSB3MphOVnR2BOyAbA9wwoiylNGpwo3FTJOf4igA1CjgD3JjUg8_aem_ZmFrZWR1bW15MTZieXRlcw
重點整理一下:
Windows Server 相對熟悉windows 介面的人,較簡單建立一個 PXE 或者 HTTP Boot的伺服器。
目前我做的測試 PXE IPv4/6 跟 HTTP IPv4/6 (有在BIOS給定URL) 都可以成功Boot。
而HTTP Boot有個設定是你可以決定你是否要再BIOS填寫Bootfile-Name (URL) ,現在我沒填寫URL的情況下只剩下IPv6沒成功Boot
但大概原因下面會分享。
而要架設伺服器流程很簡單
1. 安裝Windows Server (我目前使用的是2022版)
2. 安裝好後設定靜態IP。德叔文章有IPV4示範我就只示範IPV6 (我使用的是IPv4 192.168.1.1、 IPv6 2001:db8::1)

3. 安裝好DHCP跟WDS 跟設定好兩個feature,依照德叔的步驟應該很簡單。
4.記得關閉防火牆。
我的測試手法是,Win Server的機器直接Lan port 與 Client 端對接。
這樣可以省去要架設DNS跟Router設定上的麻煩。
基本上,只要設定好DHCP 跟 WDS 就差不多了,不過我在做測試的時候還是不太順利。
後來加入某接設定後,就可以很穩定的作PXE 跟 HTTP Boot了。
** 就是在DHCP Manager點開後

對你的IPv4 DHCP欄位下方找 Scope Option 點右鍵,選擇Configure Option.
有三個Option 需要加入設定。
1.Option 60 "PXEClient"
[PXEClient | HTTPClient] (這個欄位取決你要用PXE還是HTTP Boot 後面會簡單說明)
有可能沒有這個選項,你可以右鍵選IPv4 找 Set Predefinition 自己增加option.
2.Option 66 "Boot Server Host Name ”
填寫你的靜態IP就好 (192.168.1.1) 字面上的意思,也可以指定成DNS的位置, 但是我的手法是DHCP跟WDS同位置所以我這樣填寫。
3.Option 67 "Bootfile-Name"
PXE 的話就填寫 bootd\wdsnbp.efi,HTTP 則需要填寫你HTTP的網址 比如 http://192.168.1.1:[port]/[File path]
用的是第三方程式 HFS.exe 開啟後給定你的Boot image path。 EX: C:/EFI/Boot/Bootx64.efi
HFS :https://www.azofreeware.com/2006/03/hfs-20.html
首先來看一下DHCP封包結構 (維基百科)


先看一下PXE Boot 與 DHCP 是怎麼完成PXE BOOT的任務
1. client 端發送PXE or HTTP request給DHCP
2. DHCP 收到PXE或HTTP Client 的訊號
3. 回傳給client,告訴它Boot image在什麼位置
4. Client 端收到boot image位置後,就會去該位置要求Boot image
這時候就知道option的關鍵性了,它清楚標記這個封包是要幹嘛的
所以在前面才提到為什麼HTTP 跟 PXE 的時候 Option 60、67要改的原因。
至於前面提到為什麼DHCPv6 沒辦法做到不填寫URL HTTP BOOT會失敗的原因
問題在於 Windows Server 在IPv6 的 Option選項中沒有 Option 16、59
Ipv6 Option 16 等同 Ipv4 Option 60 用來設定PXE or HTTP Clietn用的
Ipv6 Option 59 等同 Ipv4 Option 67 Bootfile-Name 可以幫你引導到預設的Boot path
不知道為什麼,Win Server 的Set Predefinition也無法自己新增 Option 16、59
OP 16 錯誤訊息顯示為已經被預訂,所以不能被定義
OP 59 應該是微軟的bug,可以被定義,但是定義後無法顯示 也無法使用
基於這個原因我沒辦法達成HTTP BOOT 完整功能。
這個問題可以用Ubuntu 的DHCP去解決,但是很可惜為了單一一項功能要另外設置一個伺服器,很不划算。
這只是自己的小筆記
對於網路協定等有太多知識不熟悉
如果有任何錯誤 請各位大大不吝指教 謝謝
請先 登入 以發表留言。