Linux学习之路-Linux-DHCP设置及PXE13---20180101

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习之路-Linux-DHCP设置及PXE13---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 

 

[[email protected]~]#rpm -ql dhcp
.....
        /etc/dhcp/dhcpd.conf                             ---> dhcp配置文件
        /var/lib/dhcpd/dhcpd.leases                      ---> 已分配的地址数据库
[[email protected]~]#vim /etc/dhcp/dhcpd.conf 
        # DHCP Server Configuration file.
        #   see /usr/share/doc/dhcp*/dhcpd.conf.sample   --->dhcp配置文件模板
        #   see 'man 5 dhcpd.conf'
...

[[email protected]~]#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选项
}
...
[[email protected]~]#ss -nutlp
Netid  State      Recv-Q Send-Q    Local Address:Port    Peer Address:Port 
udp    UNCONN     0      0                *:67                  *:*     
users:(("dhcpd",3917,7))
...
其余用不上的段落,可以使用 .,$s/^/#/  在本行到最后一行前面加#注释掉,有一个的就是本次注释的,两个的就是之前注释掉的。

[[email protected]~]#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 

 

[[email protected]~]#yum info tftp
...
Description :简单文件传输协议(TFTP)通常仅用于引导无盘工作站。 tftp软件包为TFTP提供了用户界面,允许用户将文件传入和传出远程机器。 这个程序和TFTP提供的安全性非常低,除非明确需要,否则不应启用。

[[email protected]~]#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

[[email protected]~]#ss -nul
State       Recv-Q Send-Q                     Local Address:Port                       Peer Address:Port 
UNCONN      0      0                                      *:69                                    *:*     
[[email protected]~]#rpm -ql tftp-server 
/etc/xinetd.d/tftp
/usr/sbin/in.tftpd
...
/var/lib/tftpboot                                             --->客户端访问的tftp服务,就是默认访问这个目录
如果用tpfp访问下取文件,必须提前告知文件名字,不然无法查询文件。


[[email protected]]#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

[[email protected]]#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 

 

[[email protected]~]#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))
 
[[email protected]]#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 

[[email protected]]#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

[[email protected]]#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 

[[email protected]]#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 

 

[[email protected]]#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设置及PXE13---20180101的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习之路--http-2基础设置及访问限制15---20180108

软考(23)-Linux-DHCP/DNS

软考(23)-Linux-DHCP/DNS

Linux-DHCP服务器

Linux-DHCP服务器架设

学习之路浅谈:基础命令及linux工作原理