DHCP&PXE&Cobbler简单实现

DHCP&PXE&Cobbler

一、DHCP简介

(一)DHCP工作流程

DHCP: Dynamic Host Configuration Protocol 简而言之动态主机配置协议,即然英文没有说是IP配置协议,那么就是说除了给客户机配置IP外它还能干点儿别的。

下面来看看一个简单的流程说明

  • 第一步,客户端启动后暂未获得IP地址,向所在局域网广播一个DHCP discover报文。

  • 第二步,本地局域网中的DHCP服务器(可能不止一台)收到客户端的discover报文后,向本地网络广播(为了让其他服务器也收到)发送DHCP offer报文,包含服务器从自己掌管的IP地址范围内取出的一个IP。

  • 第三步,客户端收到服务器的offer后,(如果有多台服务器发送了offer,当然是采用最先到达的)。然后客户端再向本地局域网广播(让所有服务器收到它已经拟采用某个IP)一个DHCP request报文。

  • 第四步,提供IP的服务器收到客户端发来的request报文后,再次向本地网络广播发送acknowledgement报文,即ACK确认。

  • DHCP协议报文格式如下:

    dhcp报文

    • Op: 报文类型,分为 两大类: Request(1) 和 Reply(2)
    • HW Type: 硬件类型,一般是以太网:1
    • HW Len: 硬件地址长度,单位字节。对应以太网:6(mac地址长度为6字节48bit)
    • **Transaction ID** :事务ID,随机数,由客户端生成,服务器Reply时,会把Request中的Transaction拷贝到Reply报文中。
    • Secs: 距离第一次发送IP请求或Renew请求过去的秒数
    • **Flags** :标志位,目前仅第一个bit有使用,置1 标明广播
    • **Client IP Address** :当前客户端的IP地址,客户端初始时没有IP地址,则置0,即0.0.0.0
    • Your IP Address: 服务器想客户端提供IP地址时,会把IP地址填入本字段
    • **Next Server IP Address**:客户端获取网络引导文件的服务器,比如TFTP的IP地址
    • Gateway (Relay) IP Address: 网关(中继)IP地址,有DHCP 中继器在转发DHCP报文的时候填入
    • Server Name: Server名字,有64bytes,一般不使用,填充为0
    • Boot File name: 网络启动的引导文件名
    • Option: 选项,不定长度。 常用的比如DHCP Message Type(discover、request、offer、ack)
(二)DHCP主要配置参数
  • 配置文件路径/etc/dhcp/dhcpd.conf

  • 主配置参数:

    option domain-name "wind.com"; #域名 option domain-name-servers ns1.wind.com; #DNS服务器 default-lease-time 600; #默认DHCP租约时间 max-lease-time 7200; #最大租约时间,超过后不可续约必须重新获取IP

    全局参数会被subnet的定义覆盖,就是说越小范围定义的参数优先起效。所以你可以只定义一个subnet配置段就好。

    subnet 192.168.10.0 netmask 255.255.255.0 { #定义子网网络号,掩码 range 192.168.10.100 192.168.10.200; #本子网可分配的IP范围 option routers 192.168.10.1; #网关 option broadcast-address 192.168.10.255; #广播地址 default-lease-time 600; max-lease-time 7200; }

    另外有保留地址的配置段,可以给你局域网预留一些服务器的IP,比如,DNS、FTP服务器等等

    host fantasia { #host后面的名字随便取,在配置文件中不重名即可 hardware ethernet 0:0:c0:5d:bd:95; #预留IP对应的设备mac fixed-address fantasia.fugue.com; }

二、PXE环境配置

(一)PXE简介

PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)协议下载一个启动软件包(CentOS中是pxelinux.0 )到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。

PXE+Kickstart实现自动安装系统的流程

pxe-kickstart

  1. Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0位于的TFTP服务器IP地址一并传送给Client
  2. Client向PXE Server上的TFTP发送获取网络引导启动文件pxelinux.0请求消息,TFTP接收到消息之后再向Client发送pxelinux.0
  3. Client执行接收到的pxelinux.0文件
  4. Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client
  5. Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统
  6. Client启动Linux内核,此处会重新通过DHCP获取IP,因为之前的IP是网卡的而不是内核的。
  7. Client向TFTP Server发送针对本机的Kickstart文件(在TFTP 服务的pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。
  8. Client下载软件包安装源文件,读取自动化安装脚本

PXE仅支持一个版本的系统安装

(二)TFTP配置

CentOS7.4的话先安装三个软件包

yum -y install syslinux xinetd.x86_64 tftp-server.x86_64

再systemctl start tftp.socket启动tftp

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

三、Cobbler安装与配置

简而言之,Cobbler是为了进行多版本系统批量自动安装的管理工具。

Cobbler的配置结构基于一组注册的对象。每个对象表示一个与另一个实体相关联的实体(该对象指向另一个对象,或者另一个对象指向该对象)。当一个对象指向另一个对象时,它就继承了被指向对象的数据,并可覆盖或添加更多特定信息。

Distros(发行版):表示一个操作系统,它承载了内核和initrd的信息,以及内核参数等其他数据。 Profile(配置文件):包含一个发行版、一个kickstart文件以及可能的存储库,还包含更多特定的内核参数等其他数据。 Systems(系统):表示需要额外配置给客户机的系统参数。它包含一个配置文件或一个镜像,还包含IP和MAC地址、电源管理(地址、凭据、类型)、(网卡绑定、设置valn等)。 Repository(镜像):保存一个yum或rsync存储库的镜像信息。 Image(存储库):可替换一个包含不属于此类比的额文件的发行版对象(例如,无法分为内核和initrd的对象)。

各对象的关系图如下:

cobbler-architecture

(一)主配置文件

yum install -y cobbler #epel源安装cobbler

  • /etc/cobbler/settings #cobbler自身的相关配置

    • default_password_crypted: "11mF86/UHC$WvcIcX2t6crBz2onWxyac."

      这个参数是指定批量安装客户机系统时指定初始的root密码的密文

      一个简单的办法是,直接复制/etc/shadow中的用户密码密文进行替换。

      或者采用如下方法生成:

      openssl passwd -1 -salt $(openssl rand -hex 4) abc123 #最后是设定的密码

    • default_kickstart: /var/lib/cobbler/kickstarts/default.ks

      默认的kickstart文件路径,可直接修改默认文件达成自己的需求,或者修改cobbler的profile指定一个或者多个kickstart文件。

    • server ip 必须与cobbler服务器本机IP一致 ,不然cobbler相关命令会卡死。而且报错却是httpd未启动或未代理cobbler页面或防火墙未关闭。

  • /etc/cobbler/modules.conf

    可由cobbler托管的服务配置文件,RSYNC、DHCP、TFTP、DNS;及web访问验证方式配置。

    • [authentication]

      module = authn_configfile #配置cobbler-web访问时的验证方式

      常用选项是authn_pam(pam模块系统用户验证)、authn_configfile

      • 使用authn_pam模块认证cobbler_web用户

        1. 添加系统用户,用户名和密码按需设定即可,而后将用户名添加至cobbler_web的admin组中。

        2. 修改/etc/cobbler/users.conf文件,将用户名添加为admin参数的值即可,如下所示。

          [admins]

          admin = "USER"

      • 使用authn_configfile模块认证cobbler_web用户

        创建其认证文件/etc/cobbler/users.digest,并添加所需的用户 。cobbler_web的realm只能为Cobbler。 如下所示:

        htdigest -c /etc/cobbler/users.digest Cobbler cblradmin

(二)配置Cobbler
  • 管理distro

    • 配置Cobbler使之可用的第一步为定义distro,可以通过为其指定外部的安装引导内核及ramdisk文件的方式实现。如果已经有完整的系统安装树(如CentOS6的安装镜像)则推荐使用import直接导入的方式进行。

      $ cobbler import --name=centos7.4 --arch=x86_64 --path=/mnt

      The --arch option need not be specified, as it will normally be auto-detected. We're doing so in this example in order to prevent multiple architectures from being found (Fedora ships i386 packages on the full DVD, and cobbler will create both x86_64 and i386 distros by default).

      不需要指定 arch 选项, 因为它通常会自动检测到。在这个例子中这样做是为了防止发现多个体系结构 (例如Fedora在full DVD 中支持i386与x86_64 两个版本, 而Cobbler将在默认情况下创建 x86_64 和 i386 发行版本)。

      **import会自动将光盘文件复制到/var/www/下自动创建的cobbler目录 **

      如果有kickstart文件,也可以使用“--kickstart=/path/to/kickstart_file”一并进行导入 ,不指定此选项,Cobbler也将在生成的profile中引用Cobbler默认的最小化安装kickstart文件 /var/lib/cobbler/kickstarts/default.ks

    • 可使用“cobbler distro list”列出所有的distro。

  • 管理profile

    cobbler使用profile来为特定的需求类别提供所需要安装配置,即在distro的基础上通过提供kickstart文件来生成一个特定的系统安装配置。distro的profile可以出现在PXE的引导菜单中作为安装的选择之一。

    # cobbler profile add --name=centos-6.5-x86_64-basic --distro=centos-6.5-x86_64 --kickstart=/tmp/centos-6.5-x86_64.cfg

    可使用“cobbler profile list”查看已经创建的profile。

    运行cobbler sync 来同步配置,其实profile就是对/var/lib/tftpboot/pxelinux.cfg/default 文件中添加或者修改一个lable段

    DEFAULT menu PROMPT 0 MENU TITLE Cobbler | http://cobbler.github.io/ #安装版本选择菜单的标题可以修改,但是每次同步cobbler设置会覆盖你的修改 TIMEOUT 200 #超时时间,查了官方文档in units of 1/10 s. 也就是20s,依需要修改;如果你敲任意键将停止计时 TOTALTIMEOUT 6000 #此超时是不论用户是否敲键盘超时都将执行下一步操作 即 # Wait 20 seconds unless the user types something, but # always boot after 10 minutes. ONTIMEOUT local #设置在超时时调用的命令行 (通常引用标签)。如果未指定, 则使用 UI (如果存在) 或默认值。 LABEL local MENU LABEL (local) MENU DEFAULT #默认条目,如果你添加了条目要实现自动安装系统时将此项剪切过去 LOCALBOOT -1 MENU end
  • system用的不多,因为我们有更好的选择,ansible与puppet。

    cobbler安装系统的流程如下:

    instsys

posted @ 2018-08-01 10:21  望月胡杨  阅读(1821)  评论(0编辑  收藏  举报