Linux學習之路-Linux-DHCP設置及PXE【13】---20180101
一、DHCP服務
DHCP(動態主機配置協議)是一種協議,它允許IP網絡上的各個設備從DHCP服務器獲取自己的網絡配置信息(IP地址,子網掩碼,廣播地址等)。 DHCP的總體目的是使管理大型網絡更容易。 dhcp軟件包包括ISC DHCP服務和中繼代理。
要在您的網絡上使用DHCP,請安裝DHCP服務(或中繼代理),並在客戶端上運行DHCP客戶端守護程序。 dhcp包提供了ISC DHCP服務和中繼代理。
1、網絡配置方法:
靜態指定
動態獲取有兩種方式:
bootp:boot protocol MAC與IP一一靜態對應
dhcp:增強的bootp,動態
2、DHCP: (Dynamic Host Configuration Protocol)
動態主機配置協議
局域網協議,UDP協議,用到了67(服務器端),68(客戶端)端口
註意:如果設置防火墻,別攔截67,68端口
3、主要用途:
用於內部網絡和網絡服務供應商自動分配IP地址給用戶
用於內部網絡管理員作為對所有電腦作集中管理的手段
4、使用場景
自動化安裝系統
解決IPV4資源不足問題
5、DHCP共有八種報文
DHCP DISCOVER:客戶端到服務器
DHCP OFFER :服務器到客戶端
DHCP REQUEST:客戶端到服務器
DHCP ACK :服務器到客戶端
DHCP NAK:服務器到客戶端,通知用戶無 法分配合適的IP地址
DHCP DECLINE :客戶端到服務器,指 示地址已被使用
DHCP RELEASE:客戶端到服務器,放棄 網絡地址和取消剩余的租約時間
DHCP INFORM:客戶端到服務器, 客戶 端如果需要從DHCP服務器端獲取更為詳細 的配置信息,則發送Inform報文向服務器 進行請求,極少用到
6、續租
50% :租賃時間達到50%時來續租,剛向DHCP服務器發向新的DHCPREQUEST請求。如果dhcp服務沒有拒絕的理由,則回應DHCPACK信息。當DHCP客戶端收到該應答信息後,就重新開始新的租用周期
87.5%:如果之前DHCP Server沒有回應續租請求,等到租約期的7/8時,主機會再發送一次廣播請求
7、DHCP服務簡介
a、同網段多DHCP服務
DHCP服務必須基於本地
先到先得的原則
b、相關協議
Arp
rarp
c、跨網段獲取DHCP動態地址的方法:
RFC 1542 Compliant Routers
dhcrelay: 中繼
二、DHCP實現
1、Linux DHCP協議的實現程序:
dhcp軟件包
dnsmasq軟件包,包含dhcp、dns服務(適合小環境)
2、Dhcp Server
/usr/sbin/dhcpd
/etc/dhcp/dhcpd.conf --> /etc/rc.d/init.d/dhcpd
/etc/dhcp/dhcpd6.conf--> /etc/rc.d/init.d/dhcpd6
/usr/sbin/dhcrelay
/etc/rc.d/init.d/dhcrelay
dhcp server:67/udp
dhcp client: 68/udp
dhcpv6 client:546/udp
3、Dhcp clientdh
client
自動獲取的IP信息:
/var/lib/dhclient
4、DHCP配置文件
dhcpd.conf:
幫助參考:man 5 dhcpd.conf全局配置
subnet { ... } host { }
地址分配記錄
/var/lib/dhcpd/dhcpd.leases
5、dhcpd.conf 示例
option domain-name "magedu.com"; option domain-name-servers 192.168.0.1,8.8.8.8; default-lease-time 86400; max-lease-time 86400; subnet 192.168.100.0 netmask 255.255.255.0 { range 192.168.100.1 192.168.100.200; option routers 192.168.100.1; }
6、其它配置選項:
filename: 指明引導文件名稱
next-server:提供引導文件的服務器IP地址
示例:
filename "pxelinux.0";
next-server 192.168.100.100;
檢查語法
service dhcpd configtest
[root@Centos-6~]#rpm -ql dhcp ..... /etc/dhcp/dhcpd.conf ---> dhcp配置文件 /var/lib/dhcpd/dhcpd.leases ---> 已分配的地址數據庫 [root@Centos-6~]#vim /etc/dhcp/dhcpd.conf # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.sample --->dhcp配置文件模板 # see 'man 5 dhcpd.conf' ... [root@Centos-6~]#vim /etc/dhcp/dhcpd.conf ... option domain-name "example.org"; --->域名解析 option domain-name-servers 114.114.114.114, ns2.example.org; --->DNS設置 default-lease-time 86400; --->分配的地址時效 max-lease-time 864000; --->特殊需求可以申請的最大時間 ... # DHCP server to understand the network topology. subnet 192.168.27.0 netmask 255.255.255.0 { --->DHCP服務器所在的網段及子網掩碼 range 192.168.27.100 192.168.27.200; --->設置自動獲取ip的網段 option routers 192.168.27.1; --->設置網關.最後的分號千萬別寫錯了,不然服務啟動不了 filename "pxelinux.0"; --->tftp文件名字 next-server 192.168.27.6; --->服務器ip地址 } ... host fantasia { --->設置固定mac和ip地址綁定 hardware ethernet 08:00:07:26:c0:a5; --->寫明mac地址 fixed-address 192.168.27.100; --->寫明ip地址 還可以在加網關和dns選項 } ... [root@Centos-6~]#ss -nutlp Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 *:67 *:* users:(("dhcpd",3917,7)) ... 其余用不上的段落,可以使用 .,$s/^/#/ 在本行到最後一行前面加#註釋掉,有一個的就是本次註釋的,兩個的就是之前註釋掉的。 [root@Centos-6~]#service dhcpd configtest --->這個命令現在只能在centos6中使用,7中已失效 Syntax: OK
註意:最後的分號千萬別寫錯了,不然服務啟動不了
三、PXE實現
1、PXE:
Preboot Excution Environment 預啟動執行環境
Intel公司研發
基於Client/Server的網絡模式,支持遠程主機通過網絡 從遠端服務器下載映像,並由此支持通過網絡啟動操作系統
PXE可以引導和安裝Windows,linux等多種操作系統
2、PXE工作原理
Client向PXE Server上的DHCP發送IP地址請求消息,DHCP檢測Client是否合法(主要是檢測Client的網卡MAC地址),如果合法則返回Client的IP地址,同時將啟動文件pxelinux.0的位置信息一並傳送給Client
Client向PXE Server上的TFTP發送獲取pxelinux.0請求消息,TFTP接收到消息之後再向Client發送pxelinux.0大小信息,試探Client是否滿意,當TFTP收到Client發回的同意大小信息之後,正式向Client發送pxelinux.0
Client執行接收到的pxelinux.0文件
Client向TFTP Server發送針對本機的配置信息文件(在TFTP服務的pxelinux.cfg目錄下),TFTP將配置文件發回Client,繼而Client根據配置文件執行後續操作。
Client向TFTP發送Linux內核請求信息,TFTP接收到消息之後將內核文件發送給Client
Client向TFTP發送根文件請求信息,TFTP接收到消息之後返回Linux根文件系統
Client啟動Linux內核
Client下載安裝源文件,讀取自動化安裝腳本
四、PXE自動化安裝Centos 7
1、安裝前準備:關閉防火墻和SELINUX,DHCP服務器靜態IP
安裝軟件包
httpd
tftp-server
dhcp
syslinux
system-config-kickstart
配置文件共享服務:
systemctl enable httpd
systemctl start httpd
mkdir /var/www/html/centos/7
mount /dev/sr0 /var/www/html/centos/7
準備kickstart文件
/var/www/html/ks/centos7.cfg 註意:權限
配置tftp服務
systemctl enable tftp.socket
systemctl start tftp.socket
[root@Centos-6~]#yum info tftp ... Description :簡單文件傳輸協議(TFTP)通常僅用於引導無盤工作站。 tftp軟件包為TFTP提供了用戶界面,允許用戶將文件傳入和傳出遠程機器。 這個程序和TFTP提供的安全性非常低,除非明確需要,否則不應啟用。 [root@Centos-6~]#cat /etc/xinetd.d/tftp --->centos6需要設置xinetd.d下面的配置文件 ... disable = no --->默認是yes,修改成no,為啟動服務 socket_type = dgram 或者執行chkconfig tftp on命令 protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot per_source = 11 cps = 100 2 flags = IPv4 [root@Centos-6~]#ss -nul State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 *:69 *:* [root@Centos-6~]#rpm -ql tftp-server /etc/xinetd.d/tftp /usr/sbin/in.tftpd ... /var/lib/tftpboot --->客戶端訪問的tftp服務,就是默認訪問這個目錄 如果用tpfp訪問下取文件,必須提前告知文件名字,不然無法查詢文件。 [root@Centos-6ksdir]#cat 6.9-mini.ks --->自己寫的迷你配置文件 #version=DEVEL install url --url=http://172.18.27.6/centos/6 lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 network --hostname=Centos6-mini.L rootpw --iscrypted $6$Pa.VQGS2Ic.1vnLd$bJq6seXxmSRIWRuBy8LMl4NfangNX/5nmyBFF.arZz27I2z8b8788hnQFIOyUqaPuEBFM77.p8Alnoe2DNLEb1 firewall --disabled firstboot --disable authconfig --enableshadow --passalgo=sha512 selinux --diabled timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" # here so unless you clear all partitions first, this is # not guaranteed to work clearpart --all --initlabel # Clear the Master Boot Record zerombr part /boot --fstype=ext4 --size=512 part / --fstype=ext4 --size=20480 part /app --fstype=ext4 --size=10240 part swap --size=1024 %packages @core @Base @server-policy @workstation-policy %end %post rm -f /etc/yum.repos.d/* cat > /etc/yum.repos.d/base.repo <<EOF [base] name=file.cdrom baseurl=file:///misc/cd gpgcheck=0 enabled=1 [epel] name=epel-ali baseurl=https://mirrors.aliyun.com/epel/6/x86_64/ gpgcheck=0 enabled=1 EOF useradd L echo lanyangyang | passwd --stdin L &> /dev/null %end [root@Centos-6ksdir]#cat 6.9-server.ks ---> 用raid分區模式 #version=DEVEL install url --url=http://192.168.27.6/centos/6 lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 network --hostname=Centos6-server.L rootpw --iscrypted $6$nKc0Av3Bje8Tcm9a$u2DsNPgkEnuBg6kKSA/9pwaWU0wpmmzkC8SMnk3brKLAJQrwmMEN.5a7zHB.cIgLp9zPlxwyU9VP0JDYs27zv1 firewall --disabled authconfig --enableshadow --passalgo=sha512 selinux --disabled timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda,sdb --append="crashkernel=auto rhgb quiet" # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work # Clear the Master Boot Record zerombr clearpart --all --initlabel raid / --fstype=ext4 --level=0 --device=md0 raid.008002 raid.008017 raid /app --fstype=ext4 --level=0 --device=md1 raid.008003 raid.008018 raid swap --level=0 --device=md2 raid.008005 raid.008019 raid /home --fstype=ext4 --level=0 --device=md3 raid.008006 raid.008021 part /boot --fstype=ext4 --size=1024 part raid.008002 --size=20480 part raid.008003 --size=10240 part raid.008005 --size=2048 part raid.008006 --size=5120 part raid.008017 --size=20480 part raid.008018 --size=10240 part raid.008019 --size=2048 part raid.008021 --size=5120 %packages @core @Base @server-policy @workstation-policy %end
2、配置DHCP服務
vim /etc/dhcp/dhcpd.conf
option domain-name "example.com";
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.1 192.168.100.200;
filename "pxelinux.0";
next-server 192.168.100.100;
}
systemctl enable dhcpd
systemctl start dhcpd
[root@Centos-6~]#ss -nutlp Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 *:67 *:* users:(("dhcpd",3059,7)) udp UNCONN 0 0 *:68 *:* users:(("dhclient",3035,7)) udp UNCONN 0 0 *:69 *:* users:(("xinetd",1569,5)) tcp LISTEN 0 128 :::80 :::* users:(("httpd",3118,4),("httpd",3129,4),("httpd",3130,4),("httpd",3131,4),("httpd",3132,4), ("httpd",3133,4),("httpd",3134,4),("httpd",3135,4),("httpd",3136,4)) [root@Centos-6centos]#mount ... /dev/sr1 on /misc/cd type iso9660 (ro,nosuid,nodev) /dev/sr0 on /var/www/html/centos/7 type iso9660 (ro) --->把有的系統光盤提前掛在上 /dev/sr1 on /var/www/html/centos/6 type iso9660 (ro) --->或者把系統iso文件內容拷貝到httpd服務器文件夾中
2、準備相關文件
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /misc/cd/isolinux/isolinux.cfg
/var/lib/tftpboot/pxelinux.cfg/default
文件列表如下:
/var/lib/tftpboot/
├── initrd.img
├── menu.c32 (如果使用其他菜單風格文件,就考取其他的菜單文件即可)
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vmlinuz
[root@Centos-6ksdir]#tree . ├── ks6.9-cb.cfg ├── ks6.9-mini.cfg ├── ks6.9-server.cfg ├── ks7.4-cb.cfg ├── ks7.4-mini.cfg └── ks7.4-server.cfg [root@Centos-6tftpboot]#tree . ├── 6 │ ├── initrd.img │ └── vmlinuz ├── 7 │ ├── initrd.img │ └── vmlinuz ├── menu.c32 ├── pxelinux.0 ├── pxelinux.cfg │ └── default ├── splash.jpg └── vesamenu.c32
3、準備啟動菜單
Vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 600
menu title PXE INSTALL MENU
label auto
menu label Auto Install CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.100.100/ks/centos7.cfg
label manual
menu label Manual Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.repo=http://192.168.100.100/centos/7
label local
menu default
menu label ^Boot from local drive
localboot 0xffff
[root@Centos-6tftpboot]#cat pxelinux.cfg/default default vesamenu.c32 #prompt 1 timeout 100 menu background splash.jpg menu title Welcome to CentOS Install System menu color border 0 #ffffffff #00000000 menu color sel 7 #ffffffff #ff000000 menu color title 0 #ffffffff #00000000 menu color tabmsg 0 #ffffffff #00000000 menu color unsel 0 #ffffffff #00000000 menu color hotsel 0 #ff000000 #ffffffff menu color hotkey 7 #ffffffff #ff000000 menu color scrollbar 0 #ffffffff #00000000 label local menu default menu lable Boot from ^local drive localboot 0xffff label Cenots-6.9-server menu label Install 6.9-^serversystem kernel 6/vmlinuz append initrd=6/initrd.img ks=http://192.168.27.6/ksdir/ks6.9-server.cfg label Cenots-6.9-mini menu label Install 6.9-^minisystem kernel 6/vmlinuz append initrd=6/initrd.img ks=http://192.168.27.6/ksdir/ks6.9-mini.cfg label Cenots-6.9-cb menu label Install 6.9-^cbsystem kernel 6/vmlinuz append initrd=6/initrd.img ks=http://192.168.27.6/ksdir/ks6.9-cb.cfg label Cenots-7.4-mini menu label Install 7.4-^minisystem kernel 7/vmlinuz append initrd=7/initrd.img ks=http://192.168.27.6/ksdir/ks7.4-mini.cfg label Cenots-7.4-cb menu label Install 7.4-^cbsystem kernel 7/vmlinuz append initrd=7/initrd.img ks=http://192.168.27.6/ksdir/ks7.4-cb.cfg label Cenots-7.4-server menu label Install 7.4-^serversystem kernel 7/vmlinuz append initrd=7/initrd.img ks=http://192.168.27.6/ksdir/ks7.4-server.cfg
五、PXE自動化安裝Centos 6
1、安裝前準備:關閉防火墻和SELINUX,DHCP服務器靜態IP
安裝相應軟件包
dhcp
httpd
tftp-server
syslinux
chkconfig tftp on
chkconfig xinetd on
chkconfig httpd on
chkconfig dhcpd on
service httpd start
service xneted start
2、準備Yum 源和相關目錄
mkdir -pv /var/www/html/centos/{6,ks}
mount /dev/sr0 /var/www/html/centos/6
3、準備kickstart文件
/var/www/html/centos/ks/centos6.cfg
註意權限:
chmod 644 /var/www/html/centos/ks/centos6.cfg
4、準備相關的啟動文件
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cd /misc/cd/images/pxeboot/
cp vmlinuz initrd.img /var/lib/tftpboot
cd /misc/cd/isolinux/
cp boot.msg vesamenu.c32 splash.jpg /var/lib/tftpboot
5、準備啟動菜單文件
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32 指定菜單風格
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to wang CentOS 6
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label auto
menu label ^Automatic Install Centos6
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.100.100/centos/ks/centos6.cfg
label manual
menu label ^Manual Install Centos
kernel vmlinuz
append initrd=initrd.img inst.repo=http://192.168.100.100/centos/6
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
6、目錄結構如下:
tree /var/lib/tftpboot/ /var/lib/tftpboot/
├── boot.msg
├── initrd.img
├── pxelinux.0
├── pxelinux.cfg
| └── default
├── splash.jpg
├── vesamenu.c32
└── vmlinuz
1 directory, 7 files
7、配置dhcp服務
cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample
/etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
option domain-name "magedu.com";
option domain-name-servers 192.168.100.1;
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.1 192.168.100.200;
option routers 192.168.100.1;
filename "pxelinux.0";
next-server 192.168.100.100;
}
service dhcpd start
[root@Centos-6tftpboot]#cat /etc/dhcp/dhcpd.conf # dhcpd.conf ...... # DHCP server to understand the network topology. subnet 192.168.27.0 netmask 255.255.255.0 { range 192.168.27.100 192.168.27.200; option routers 192.168.27.1; filename "pxelinux.0"; next-server 192.168.27.6; }
Linux學習之路-Linux-DHCP設置及PXE【13】---20180101