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协议报文格式如下:
- 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实现自动安装系统的流程
- Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0位于的TFTP服务器IP地址一并传送给Client
- Client向PXE Server上的TFTP发送获取网络引导启动文件pxelinux.0请求消息,TFTP接收到消息之后再向Client发送pxelinux.0
- Client执行接收到的pxelinux.0文件
- Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client
- Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统
- Client启动Linux内核,此处会重新通过DHCP获取IP,因为之前的IP是网卡的而不是内核的。
- Client向TFTP Server发送针对本机的Kickstart文件(在TFTP 服务的pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。
- 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的配置结构基于一组注册的对象。每个对象表示一个与另一个实体相关联的实体(该对象指向另一个对象,或者另一个对象指向该对象)。当一个对象指向另一个对象时,它就继承了被指向对象的数据,并可覆盖或添加更多特定信息。
各对象的关系图如下:
(一)主配置文件
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用户
-
添加系统用户,用户名和密码按需设定即可,而后将用户名添加至cobbler_web的admin组中。
-
修改/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 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 #此超时是不论用户是否敲键盘超时都将执行下一步操作 即 -
system用的不多,因为我们有更好的选择,ansible与puppet。
cobbler安装系统的流程如下: