企业级基于Centos8.5配置IPXE服务批量部署windows方案

一.目的

无需U盘,通过网络PXE启动,实现快速安装操作系统!

二.实验环境(皆依托于实际生产环境)

实验拓扑如下,规划出两个网段:生产(10.142.184.0/24)、办公(10.157.208.0/24),把IPXE服务器网络放于办公网络下,当然也可置于产线网,也可以双网卡(办公、产线网络分别接入IPXE服务器,只是双网卡违背了网络隔离的初衷,存在安全隐患),这里把IPXE服务器接入办公网络,通过acl控制,让生产网络下设备也能访问IPXE服务器。
实验环境拓扑

三.安装步骤

  • centos系统安装
  • 办公、产线交换机配置
  • IPXE相关服务安装配置
    • TFTP服务配置
      • 启动TFTP服务并设置开机自启
    • Samba服务配置
      • 启动Samba并设置开机自启
    • HTTP服务配置
      • 启动HTTP并设置开机自启
  • IPXE配置

1.centos系统安装

系统安装没有特别需要注意的地方,正常安装即可,本实验使用centos8.5

2.办公、产线交换机配置

这很重要,请耐心看完!很多教程直接在IPXE服务器上安装DHCP,然后配置地址池等,这样做不是不行,但是,实际的局域网中(交换机或DHCP服务器)已经配置了DHCP,IPXE再配置DHCP,会有地址抢占,冲突的风险(退一万步讲,即使不考虑地址冲突问题,假如网络开机时,客户机从交换机的DHCP获取到地址,而不是从IPXE的DHCP获取到地址,那它还能抓取到lpxelinux.0,实现网络开机吗?)
我的应对方法:
因我公司局域网DHCP是使用三层交换机(Cisco)来做的,我直接在DHCP交换机里指定PXE服务器启动文件及IP地址。
例:办公DHCP交换机配置项如下(思科三层交换机):

 ip dhcp pool office                      # DHCP地址池名称为office
    network 10.157.208.0 255.255.255.0    # DHCP可分配的IP地址范围
    bootfile lpxelinux.0                  # IPXE的启动文件
    next-server 10.157.208.188            # IPXE服务器的IP地址

若局域网DHCP是windows server搭建的,则在每个地址池的66与67项添加指向即可,即 bootfilenext-server

注:
lpxelinux.0是IPXE的启动文件,PXE启动文件只能通过TFTP方式传输,需要把他存放到TFTP的家目录,即后面说的/tftpboot/下;
next-server指向IPXE服务器的IP地址;
在产线DHCP三层交换机添加指向的方法一样,这么指,默认是不通的(因为产线、办公网隔离),需在路由器添加一条ACL,将产线去往办公UDP:69流量放行(TFTP使用UDP:69)
另外本实验还需HTTP,samba,相应的产线去往办公的TCP:80(HTTP)、TCP:445(samba)流量也要放行,即产线若要访问办公PXE,需要3条ACL

3.IPXE相关服务安装配置

一个命令安装所有:

yum -y install  tftp-server tftp  httpd samba xinetd

注:xinetd是tftp-server的托管服务;

(1).TFTP服务配置

TFTP作用:IPXE启动文件只能基于TFTP传输,如压缩内核vmlinuz与系统初始化文件initrd.img等启动文件
TFTP服务需要由xinetd服务来托管,修改 /etc/xinetd.d/tftp 文件,编辑disable = yes这一行,修改为 disable = no(如行9),在/下创建名为tftpboot目录,并把tftp目录指向/tftpboot(如行8),当然也可以默认TFTP的工作目录为/var/lib/tftpboot,个人习惯罢了。

service tftp
{
socket_type             = dgram
protocol                = udp
wait                    = yes
user                    = root
server                  = /usr/sbin/in.tftpd
server_args             = -s /tftpboot
disable                 = no
per_source              = 11
cps                     = 100 2
flags                   = IPv4
}

注:如果你发现根本不存在 /etc/xinetd.d/tftp 这个文件,那就手动创建它,并赋权755

启动TFTP服务并设置开机自启
systemctl start xinetd
systemctl start tftp
systemctl enable xinetd
systemctl enable tftp

(2).samba服务配置

Samba作用:通过PXE启动进入PE后,挂载samba里的镜像文件,实现装机
Samba服务的主要配置文件为:/etc/sambs/smb.conf

[global]
        workgroup = WORKGROUP
        server string = Samba Server Version %v
        log file = /var/log/samba/log.%m
        max log size = 50
        map to guest = Bad User
        passdb backend = tdbsam
        security = USER
        guest account = nobody
        public = Yes
        dns proxy = No
        nt acl support = No
        kernel oplocks = no

[windows]
        comment = Windows Image
        level2 oplocks = No
        locking = No
        oplocks = No
        path = /samba/windows
        read only = No

[data]
        comment = Windows data
        path = /samba/data/
        public = no
        admin users = samba
        valid users = @samba
        browseable = yes
        writable = yes
        create mask = 0777
        directory mask = 0777
        force directory mode = 0777
        force create mode = 0777

注:
[windows] 用于存放各类操作系统镜像,方便在PE下挂载,无需账号密码,只读
[data] 用于存放临时文件,需账号密码(samba/samba),读写权限

创建samba账户命令:
[root@localhost ~]# smbpasswd -a samba    #创建一个名为samba的账户
New SMB password:                         #输入samba账户的密码
Retype new SMB password:                  #确认密码
启动samba并设置开机自启
 systemctl start smb
 systemctl enable smb

(3).HTTP服务配置

HTTP作用:客户机网络启动,进入PXE菜单后,例如要进入U启通(或Win PE),客户端需要透过网络下载U启通文件到缓存,默认是通过TFTP传输,过程非常非常缓慢,若改用HTTP传输,传输速率可提升N倍
HTTP无需做任何特殊配置,把你需要的Win PE iso放到HTTP工作目录即可(/var/www/html),如:

[root@DRBL html]# pwd
/var/www/html
[root@DRBL html]# ll
总用量 5507176
drwxrwxrwx. 2 root root        66 1215 2021 clonezilla
-rw-r--r--  1 root root 320864256 1225 2021 clonezilla-live-2.7.3-19-amd64.iso
-rwxrwxrwx  1 root root 780918784 1130 2021 EasyU_v3.5.iso
-rwxrwxrwx  1 root root     25756 1130 2021 memdisk
-rw-r--r--  1 root root 424443904 1227 2021 system.iso
drwxrwxrwx  2 root root        73 418 10:24 test
drwxrwxrwx  2 root root        43 122 2021 uqitong
-rwxrwxrwx. 1 root root 219451392 1124 2021 WePE_64_V2.1.iso
-rwxrwxrwx  1 root root 431263744 126 2021 WinPE.iso

其中名为system.iso是自己客制化的一个PE系统,后面也会提到,如何通过IPXE配置文件调用这些PE文件(即default配置文件)

启动HTTP并设置开机自启
 systemctl start httpd
 systemctl enable httpd

4.IPXE配置

首先需要理清楚几个概念:pxe, ipxe, pxelinux,以及几个名词:pxelinux.0, ipxelinux.0

  • pxe是一个协议,跟mbr是一个性质的东西,它规定了CPU启动后通过什么方式获取引导代码并执行。
  • pxe的实现有许多,不同的厂商有不同的实现。并且pxe的实现代码主要有两种存放位置,一种是存在主板上,一种是存在网卡里,现在新的网卡一般都自带了pxe的实现代码。(去mbr查找引导代码的实现是在主板上的。)
  • 由于pxe协议比较“落后”,仅支持tftp传输数据,性能差,灵活性也差,于是有了gpxe这个项目。gpxe是一种兼容pxe的实现,并且在pxe之上增加了许多特性,例如通过http/ftp等协议传输数据。
  • gpxe原先使用的域名的拥有者突然收回了该域名的使用权,于是这些人fork出去做了ipxe,gpxe现在已经不再开发,ipxe开发非常活跃。
  • 一些较新的intel的网卡里都带了gpxe的实现代码,最新的可能会带ipxe代码。
  • pxelinux是syslinux项目的一个部分,syslinux主要有三个产出,syslinux、isolinux、pxelinux,分别用于硬盘、光盘、网络启动,它的角色与grub相同。
    ​* 由于大多数网卡、主板都不自带gpxe/ipxe的代码,所以通常引导时需要这样的途径: pxe -> ipxe -> pxelinux.bin,后面这两步可以合并,于是大家就把ipxe与pxelinux.bin​的代码合体,做成了 ipxelinux.0 (gpxe+pxelinux.bin = gpxelinux.0)。一般习惯上裸的pxelinux镜像用.bin后缀,加上gpxe/ipxe之后用.0后缀。此外还会有.lkrn后缀,这是ipxe的东西,ipxe的代码默认只能通过pxe协议的方式加载,他们搞了另外一个代码入口,使得可以通过像linux kernel的方式一样加载(就是可以通过grub引导),这种镜像的后缀是lkrn.
  • 所以可行的引导过程可以有这些:
    • pxe(网卡) -> ipxe -> pxelinux.bin -> menu.c32
    • pxe -> ipxelinux.0 -> menu.c32
    • pxe -> syslinux.bin -> ipxe -> pxelinux.bin -> menu.c32
    • pxe -> syslinux.bin -> ipxelinux.0 -> menu.c32
    • grub -> ipxe.lkrn -> pxelinux.bin -> menu.c32
    • grub -> ipxelinux.lkrn -> menu.c32
    • ipxe(烧入网卡) -> pxelinux.bin

由于pxe代码是主板、网卡自带的,所以兼容性最好(至少本机的代码兼容本机的设备)。而ipxe兼容性略差(只是相对来说,因为我们编译时可能会漏掉一些网卡,或者一些特殊问题不好解决),曾经尝试过直接一步 pxe -> ipxelinux.0,但是发现有一些机器无法启动,加载ipxe之后就停住了。所以后来退而求其次,用两步加载,对于ipxe不支持的设备,可以在第一步pxe->pxelinux.bin之后手快一些按任意键中断,然后仍然可以使用pxe,不过之后我们一直没有维护通过tftp加载的pxelinux以及配置文件,所以那部分内容其实现在都已经严重过时了。通过论坛查看详细说明
废话不多说,回到正题!
下载所需IPXE启动文件:点击这里下载

里面包括有 lpxelinux.0,menu.c32,ldlinux.c32,libutil.c32,memdisk 等PXE引导需要用的文件。也可以自己安装centos8,然后安装syslinux,把以上几个内核文件拷贝下来(centos7版本自带的syslinux版本号还是4.05,所以如果要6.04版本,最好从centos8里提取)
把提取的文件存放到/tftpboot/下赋权777,并创建pxelinux.cfg目录,如:

[root@DRBL tftpboot]# pwd
/tftpboot
[root@DRBL tftpboot]# ll
总用量 36012
-rwxrwxrwx. 1 root root 264945664 1124 15:16 filesystem.squashfs  #再生龙启动文件
-rwxrwxrwx. 1 root root  29770260 1124 15:16 initrd.img           #再生龙镜像文件
-rwxrwxrwx. 1 root root   6821216 1124 15:16 vmlinuz              #再生龙内核
-rwxrwxrwx. 1 root root     74907 1124 15:16 lpxelinux.0          #IPXE预启动
-rwxrwxrwx. 1 root root    116096 1124 15:16 ldlinux.c32          #IPXE预启动依赖
-rwxrwxrwx. 1 root root     22804 1124 15:16 libutil.c32          #IPXE预启动依赖
drwxrwxrwx. 2 root root        21 1124 15:16 pxelinux.cfg         #IPXE配置文件目录
-rwxrwxrwx. 1 root root     25756 1124 15:16 memdisk              #window PE预启动
-rwxrwxrwx. 1 root root     26272 1124 15:16 menu.c32             #默认蓝色背景预启动菜单(不可自定义菜单背景等)
-rwxrwxrwx. 1 root root     26788 1124 15:16 vesamenu.c32         #标准菜单(可自定义菜单背景、颜色等)
-rwxrwxrwx. 1 root root    180668 1124 15:16 libcom32.c32         #标准菜单依赖
-rwxrwxrwx. 1 root root    259251 1124 15:15 background.png       #自定义的菜单背景(只支持640x480)

以上是IPXE全部的预启动文件,而启动配置文件存放在pxelinux.cfg/default里(名字只能是default),vim /pxelinux.cfg/default编辑启动菜单配置文件:

default vesamenu.c32  #标准菜单(默认是menu.c32蓝色菜单)
prompt 0
timeout 600           #菜单等待时间(60秒)
ontimeout local       #超时本地启动
display boot.msg      #显示描述信息(有描述信息的话)

menu clear
menu background background.png             #自定义背景
menu title FOXCONN Ems2 IPXE Boot Menu     #启动菜单抬头
   menu color screen   37;40               #80ffffff #00000000 std
   menu color border   30;44               #400060 #00000000 std
   menu color title   1;36;44              #20ff00 #00000000 std
   menu color unsel   37;44                #ffff00 #00000000 std
   menu color hotkey   1;37;44             #ffffffff #00000000 std
   menu color sel      7;37;40             #ff0000 #20ff8000 all
   menu color hotsel   1;7;37;40           #e0400000 #20ff8000 all
   menu color disabled   1;30;44           #60cccccc #00000000 std
   menu color scrollbar   30;44            #20ff00 #00000000 std
   menu color tabmsg   31;40               #2000ff #00000000 std
   menu color cmdmark   1;36;40            #c000ffff #00000000 std
   menu color cmdline   37;40              #c0ffffff #00000000 std
   menu color pwdborder   30;47            #80ffffff #20ffffff std
   menu color pwdheader   31;47            #80ff8080 #20ffffff std
   menu color pwdentry   30;47             #80ffffff #20ffffff std
   menu color timeout_msg   37;40          #600000 #00000000 std
   menu color timeout   1;37;40            #40ffff #00000000 std
   menu color help      37;40              #c0ffffff #00000000 std
   menu color msg07   37;40                #90ffffff #00000000 std

#本地启动#
label local
menu label 1. Boot from local disk
localboot 0xffff

#U启通3.5自定义修改#
label EasyU_v3.5
menu label 2. Custom EasyU_v3.5_PE
kernel http://10.157.208.188/uqitong/MEMDISK
append initrd=http://10.157.208.188/uqitong/EASYU_V3.5.iso iso raw

#自己做的PE#
label Install System
menu default
menu label 3. Install System
kernel http://10.157.208.188/memdisk
append initrd=http://10.157.208.188/system.iso iso raw

#微PE#
label WePE_64_V2.1
menu label 4. WinPE
kernel memdisk
append initrd=http://10.157.208.188/WePE_64_V2.1.iso iso raw

#再生龙#
label clonezilla-live-2.7.3-19-amd64
menu label 5. clonezilla-live
kernel http://10.157.208.188/clonezilla/vmlinuz
append initrd=http://10.157.208.188/clonezilla/initrd.img boot=live union=overlay noswap noeject nolocales vga=788 locales=zh_CN.UTF-8 keyboard-layouts=NONE fetch=tftp://10.157.208.188/filesystem.squashfs

#硬盘检测#
label hdat2cd_lite_74.iso
menu label 6. HDD Test
kernel memdisk
append initrd=http://10.157.208.188/test/hdat2cd_lite_74.iso iso raw

#内存检测#
label mt531b.iso
menu label 7. Memory Check
kernel memdisk
append initrd=http://10.157.208.188/test/mt531b.iso iso raw

四.效果展示

在这里插入图片描述
在这里插入图片描述

五. 扩展说明

1.添加防火墙白名单

用于现网中,还是建议开启防火墙,以添加防火墙白名单方式运作
TFTP,HTTP,samba添加防火墙白名单(永久生效),提示 success 表示成功

 firewall-cmd  --zone=public --add-port=69/udp--permanent
 firewall-cmd --zone=public --add-port=80/tcp --permanent 
 firewall-cmd --zone=public --add-port=445/tcp --permanent  

查看已开放的端口

firewall-cmd --zone=public --list-ports

重新载入

firewall-cmd --reload

删除

firewall-cmd --zone=public --remove-port=80/tcp --permanent

2.自定义PE

对于公司装机,PE需有以下要求
1.体积小(通过网络加载时间短)
2.必须内置网卡驱动(挂载samba共享)
目前市面上比较好用的PE推荐微PE(体积只有200MB左右)与U启通(3.5以上版本内置网卡驱动),但遗憾的是微PE未内置网卡驱动,U启通3.5以上版本体积700MB以上,很难满足个性化需求,综上,需要自定义PE。但是,对于新手来说,从iso提取install.wim文件来新做PE,似乎不那么容易。选用一款跟当前业务匹配较高的PE,去修改它,话题较敏感,只能大概说一下流程
<1>.使用UltraISO解开匹配的PE,并提取出里面的.wim文件
解开iso文件

<2>.使用Wim Tool解开.wim文件即可自定义程序,例如解到C:\temp
解开wim文件
wim文件内容
PE下定义的各类软件

<3>.定义完成后,新制.wim文件
新制wim文件

<4>.将新制.wim文件与PE里的旧.wim文件替换,另存即可
可以看到,定义的PE大小仅400M左右,符合预期
自定义的PE大小

3.PE下挂载samba共享盘批处理

我是这么做的

@echo off
chcp 65001
color 9F
ping 10.157.208.188 > nul
if %errorlevel% leq 0 (
   echo 网络正常,可以连接到10.157.208.188服务
   echo
   start net use p: \\10.157.208.188\windows
   start X:\PESOFT\EasyImageX2\EasyImageX2.exe
) else (
   echo 网络异常,无法连接到10.157.208.188,请等待网络加载完成后再试......
   pause
)

注:
chcp 65001防乱码
color 9F蓝色窗口
ping 10.157.208.188 > nul简单检测是否能与IPXE通信,若能,则回复“网络正常,可以连接到10.157.208.188服务”,并自动挂载samba,打开EasyImageX2装机程序;若不能,则回复“网络异常,无法连接到10.157.208.188,请等待网络加载完成后再试…”
若想让此批处理看起来更高大尚一些,可利用Bat To Exe Converter工具,将批处理转换成exe程序
例如:
在这里插入图片描述
在这里插入图片描述

——其他文档——
再生龙部署教程
其他大神写的部署教程

  • 1
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七十一阿哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值