|
2#
楼主 |
发表于 2019-7-7 00:55:32
|
只看该作者
本帖最后由 hkkitlee 于 2019-7-10 23:08 编辑
伺服器軟件/設定編:
10/07/2019更新:下面比較沉長。希望大家先閱讀原理,軟件之間關係,明白了再了解配置。
原理會不變,軟件配置就是因應不同的情況而有改變。所以最後最後才看配置文件。否則便很難明白配置了些什麼出來。希望大家明白我的用心。
其實在我學習建立pxe伺服器的時候碰了數不盡的釘子;無菜單到有菜單,有菜單又啟動不了;啟動了又核心錯誤;之後才發現bios/uefi是兩種不同的啟動;自動連線;研究secure boot啟動(最後用現成工具ValdikSS合併);不是向大家炫耀(我也菜鳥!曾經不明白過!比我捧的也大有人在),而是希望給大家信心/恆心。
因為以前學習時找的教學帖、文件,只會叫你裝什麼,什麼指令啟動;當學習者環境情況有變時,即使一對一做也有網絡/啟動問題(我就是從這情況中跌跌碰碰才學出來)。所以,有心學建立(尤其是linux)伺服器希望不要怕多字,學懂原理,因環境作適當配置,一步一步明白實踐建立出你們自己的pxe server。
有問題會盡量解答。
Centos7 minimal install
DNSMASQ---dhcp proxy
xinetd-tftp
httpd/nginx
firewalld port
Pxe server啟動流程原理:
1網卡啟動pxe
2客戶機執行網卡內的pxe rom向dhcp server經udp port 67/4011發廣播請求3個東西[1自身ip][2bootserver ip(即為xinetd-tftp server ip地址)][3bootserver啟動文件的路徑與名稱]
3客戶網卡得到以上資料,從bootserver經udp port 69下載得到 ipxe引導檔
4ipxe在《客戶機》啟動後用https 向伺服器(httpd/nginx)請求下載操作系統檔並存到內存Ram中,下載完成後啟動
即客戶機網卡pxe ---(udp 67/4011)--->向dhcp伺服器(dnsmasq)發送請求,得到bootserver ip後,客戶機網卡的pxe經udp port 69向bootserver下載引導並執行—->ipxe啟動再向web server下載操作系統並啟動---(https<tcp>)--->OS
本usb影像檔啟動流程原理:
1Bios/UEFI啟動並讀取usb影像啟動ipxe
2客戶機載入網卡驅動向dhcp server發廣播請求自身ip
3客戶網卡得到以上資料,向伺服器(httpd/nginx)請求下載操作系統檔並存到內存Ram中,下載完成後啟動
即usb—->網卡載入執行ipxe(不是原網卡內的pxe rom)---(https<tcp>)--->OS
綜合以上
純pxe server需要dnsmasq,xinetd這兩個軟件作udp傳送引導檔用途。而引導檔即ipxe只是《客戶機》自行下載並執行,伺服器的是完完全全沒有執行過的,最多只是傳送到客戶機。打個比喻,如果你的操作系統檔放在tftp給客戶機下載,那就不需要有httpd伺服了。但udp缺點就是慢。
順帶一提,引導檔有多款的,例如syslinux , grub2等等。如果你已完成dnsmasq, xinetd的設定,也可加入其他引導檔一同選擇。
有個思考的問題:
由於本影像檔不經pxe網絡得到可引導檔,所以就不再需要xinetd了。
那dhcp server(dnsmasq)呢?
答:即使你不需要以下全部3項作啟動用途[1自身ip][2bootserver ip(即為xinetd-tftp server ip地址)][3bootserver啟動文件的路徑與名稱],但第1的自身ip即使你的網絡也是需要的。試想想你家用公司網絡,不只是手機,平板電腦,還有訪客都需要dhcp的。總不能每每手動設定吧!
那就帶出了下面的設定檔為何是dhcp-proxy而不是完整的dhcp設定了
路由器/router一般自帶dhcp server。如果兩個dhcp server在同一個網段是會相撞的,輕則部份電腦網絡癱瘓,重則全網癱瘓。dhcp的功能就是如客戶機ip,網關和網段。而dhcp-proxy就是可以不改變既有的dhcp-option上補齊[2bootserver ip(即為xinetd-tftp server ip地址)][3bootserver啟動文件的路徑與名稱]
Dhcp —-ip分派,網關,網段
Dhcp-proxy—-[2bootserver ip(即為xinetd-tftp server ip地址)][3bootserver啟動文件的路徑與名稱]
當然你也可以在一個dhcp server內設定好所有的dhcp-option,但路由器的dhcp多是閹割版,大部份沒了啟動功能;或者
停用路由的dhcp長期開啟電腦等待一個普通的dhcp請求?
希望各位看完以上明白各軟件之間的責任和流程。
下面就是軟件的設定檔,會因應上面的流程給解說
================================dnsmasq.conf=======================================
#Don't function as a DNS server:
port=0 #不以DNS server作啟動
#Log lots of extra information about DHCP transactions.
log-dhcp #以log在伺服器作記錄
#enable-tftp #以#為記號即此行設定不成立,我的設定是以xinetd-tftp作為tftp伺服,所以這裡無而dnsmasq兼任tftp。
#tftp-root=/var/lib/tftpboot #tftp的設定路徑
#Disable re-use of the DHCP servername and filename fields as extra
#option space. That's to avoid confusing some old or broken DHCP clients.
dhcp-no-override #簡單而言,就是避免與太老舊的網卡相撞。
#以下深藍色的就是設定客戶機所需的PXE啟動檔,在tftp中的名稱與路徑請求,予以回報給客戶機下載的設定路徑,只是路徑,bootserver(tftp)的伺服ip是下面淺藍部份。
dhcp-vendorclass=x86PC,PXEClient:Arch:00000 #BIOS x86
#dhcp-vendorclass=BC_EFI,PXEClient:Arch:00006 #EFI x86-64
#dhcp-vendorclass=BC_EFI,PXEClient:Arch:00007 #EFI x86-64
#dhcp-vendorclass=BC_EFI,PXEClient:Arch:00009 #EFI x86-64
pxe-service=X86PC, "Install Legacy BIOS", undionly.kpxe
pxe-service=IA32_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=BC_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=X86-64_EFI, "Boot X86-64", uefi/ipxe.efi
#當下面的tftp伺服器ip與上面的路徑組合在一起,就類似是tftp://tftpserverip/檔名路徑
#pxe-service=tag:BC_EFI,BC_EFI, "Install Linux on BC_EFI UEFI", uefi/ipxe.efi
#dhcp-boot=net:x86PC,undionly.kpxe.0,0,192.168.2.5
#dhcp-boot=net:BC_EFI,uefi/ipxe.efi,0,192.168.2.5
dhcp-range=192.168.2.5,proxy#這個就是設定為dhcp-proxy啟動,並告知客戶機bootserver ip是192.168.2.5。
===============================dnsmasq.conf 完==========================================
dnsmasq解說:
以上各位可以看出,什麼網關,網段,分派客戶ip的工作一個也沒有。只是告訴客戶機bootserver的ip是什麼,引導啟動檔的名稱是什麼,並以dhcp-proxy啟動。其餘的並不參與留待原網絡的dhcp server工作。
那深藍部份的到底是什麼呢?
dhcp-vendorclass=x86PC,PXEClient:Arch:00000 #BIOS x86
#dhcp-vendorclass=BC_EFI,PXEClient:Arch:00006 #EFI x86-64
#dhcp-vendorclass=BC_EFI,PXEClient:Arch:00007 #EFI x86-64
#dhcp-vendorclass=BC_EFI,PXEClient:Arch:00009 #EFI x86-64
dhcp-vendorclass=XXXXXXX#這些設定是基於舊版dnsmasq,還留在此設定是作參考之用。新版如下,如無需要可自行刪除。
pxe-service=X86PC, "Install Legacy BIOS", undionly.kpxe
pxe-service=IA32_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=BC_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=X86-64_EFI, "Boot X86-64", uefi/ipxe.efi
大家請留心標點符號,pxe-service=AAA, "BBB", CCC
AAA=不是隨意的。客戶機宣告給dhcp server自已是什麼架構類型(arch)的機器(例如執行環境bios/uefi/32bit/64bit)所以不能自定更改。
BBB=是隨意的。在啟動時你想顯示的文字,可用作說明或除錯
CCC=是隨意的。啟動文件的路徑與名稱。只需符合與tftpd的檔案路徑即可。
以pxe-service=X86PC, "Install Legacy BIOS", undionly.kpxe作解說:
整句就是:如果dnsmasq收到客戶機自己宣告是什麼架構類型的機器X86PC(AAA),就會顯示Install Legacy BIOS(BBB),並告知引導檔的路徑undionly.kpxe(CCC)
那不同的客戶宣告不同的AAA,就會有不同的顯示BBB與得到引導檔的路徑CCC
tftp
===============================tftp=============================================
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = yes
per_source = 11
cps = 100 2
flags = IPv4
}
================================tftp 完==========================================
xinetd-tftp 解說:
其實沒什麼好寫,因為簡單得不行了
要留意的只有兩樣:
1server_args = -s /var/lib/tftpboot#就是你設定在伺服機的本機路徑。
2對應上面的CCC引導檔路徑。即在伺服機內看到應該是/var/lib/tftpboot/CCC。
簡單就是:Dnsmasq負起通訊,xinetd-tftp負起傳送引導檔案。
另外關於防火牆設定,因應不發行版的linux所使用的命令都不太相同。所以在此只告知 protocol ,port,請自行開啟
Dnsmasq:67/udp,4011/udp
xinetd-tftp:69/udp
Ipxe (ipxe只是一個可執行檔)
回應給pcfan120朋友,win/linux的檔案路徑就是放在ipxe格式的配置文件,並編譯進ipxe檔內。
(和下一樓的一鍵生成是一樣的,只是節錄出來):
以下是編譯的命令
======================================================
#!/bin/bash
make clean #編譯前清空舊文件
make bin-x86_64-efi/ipxe.efi EMBED=ipxe.script; #編譯uefi版ipxe
make bin/undionly.kpxe EMBED=ipxe.script; #編譯bios版ipxe
make bin/ipxe.lkrn EMBED=ipxe.script; #編譯usb版ipxe
cp bin/undionly.kpxe /var/lib/tftpboot/ ; #bios版本複製至tftp的路徑
cp bin-x86_64-efi/ipxe.efi /var/lib/tftpboot/uefi/ ; #uefi版本複製至tftp的路徑
==============================================
拆開這句說明make bin-x86_64-efi/ipxe.efi EMBED=ipxe.script;
make bin-x86_64-efi/ipxe.efi #編譯給x86-64,uefi的環境的執行檔(bios環境不運行的)
EMBED=ipxe.script; ipxe.script就是自己寫的配置內容。
全句就是「把對應的配置文件(ipxe.script)作出對x86-64 uefi環境作編譯。
make bin/undionly.kpxe#這句就是給bios pxe啟動的
make bin/ipxe.lkrn#這句就是bios usb啟動的。
關於執行架構方面的問題,簡單點說如下:
1uefi比較方便,一種格式放在pxe,usb都可以啟動的。
2bios比較煩人,不知是否因為「實模式」的關係。pxe格式不能與usb共用。所以才需要分開編譯。
「實模式」指的是bios執行時的16Bit定址模式,詳細請參考「保護模式」「組合語言」之類的書籍文件。
(表達力真的很有限。)
那就看看下面的配置文件了。
配置文件(此為極其簡單的例子,好讓大家易點明白ipxe如何得知啟動的路徑和配置。注意:不是本影像檔內的配置。)
=====================================
#!ipxe
kernel http://192.168.2.5/boot_templates/debian_8.8/live/vmlinuz
initrd http://192.168.2.5/boot_templates/debian_8.8/live/initrd.img
imgargs vmlinuz boot=live config hooks=filesystem username=live noeject fetch=http://192.168.2.5/boot_templates/debian_8.8/live/filesystem.squashfs
boot
=====================================
假設你打算用http制式傳送啟動文件和你的網頁伺服是在192.168.2.5,當你的ipxe啟動後就會向以上的網址進行下載。
所以你的win/linux盤文件是放在網頁伺服內。
httpd只需按你所寫的路徑複製你需要的啟動文件,例如上面的3個:vmlinuz,initrd.img,filesystem.squashfs就可以。
(測試的話可以複製你所寫的設定網址在瀏覽器開啟一下。正常有詢問是否下載即路徑正確。)
httpd的設定我也沒設就直接用的(原設定),外面的教學如山如海。另外就是閣下也不一定要用http來傳送檔案,ftp,sanboot,總之方法一大把
至於Centos7當中的selinux,因為不是每個發行版都有,在往後時間再加入。 |
|