1. 程式人生 > >Linux學習之路-Linux-DHCP設置及PXE【13】---20180101

Linux學習之路-Linux-DHCP設置及PXE【13】---20180101

tla x86 rect gte vml 實現 安全性 itl pass


一、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