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;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章