我的编程空间,编程开发者的网络收藏夹
学习永远不晚

搭建 PXE 服务器(基于 Ubuntu 22.04,支持 IPv4/6 及 Legacy/UEFI)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

搭建 PXE 服务器(基于 Ubuntu 22.04,支持 IPv4/6 及 Legacy/UEFI)

基于 Ubuntu 22.04 搭建 PXE 服务器,支持 IPv4, IPv6 网络,支持 Legacy, UEFI 启动模式。

一、PXE 启动流程

PXE 启动大致流程如下:

  1. PXE Client(客户端)通过 DHCP 请求获取 IP,DHCP 服务器在响应请求时同时提供网络启动引导程序(Boot File)的地址(使用 TFTP 协议)。
  2. PXE Client 获得 IP 后,访问 Boot File 地址获取并加载引导程序(Legacy 和 UEFI 的区别在于引导程序不同)及其配置文件。
  3. 引导程序根据配置文件通过 HTTP/FTP/NFS 协议获取完整的系统镜像进行启动。

二、配置清单

必要条件:

  • 正常的 Internet 网络
  • Ubuntu 22.04 操作系统
  • Ubuntu 22.04 系统 ISO 镜像文件

核心软件:

  • DHCP 服务器: isc-dhcp-server
  • TFTP 服务器: tftp-hpa
  • HTTP 服务器: apache2
  • RA 服务器: radvd(IPv6)

网络地址:

前缀:fdb0:d7fa:87bd::/64

选择一个 IP 作为配置使用:fdb0:d7fa:87bd::1/64

三、配置步骤

建议在配置前关闭防火墙。

sudo ufw disable

3.1 搭建 HTTP 服务器

安装 apache2。

sudo apt install apache2

拷贝镜像。

sudo cp <你的镜像文件所在路径>/ubuntu-22.04.2-desktop-amd64.iso /var/www/html/

挂载镜像(解压也行)。

sudo mkdir /var/www/html/Ubuntu_22.04_Desktop/sudo mount /var/www/html/ubuntu-22.04.2-desktop-amd64.iso /var/www/html/Ubuntu_22.04_Desktop/

3.2 搭建 TFTP 服务器

安装 tftp-hpa

sudo apt install tftpd-hpa

3.2.1 配置 Legacy PXE 启动项

安装 syslinux, pxelinux 并拷贝需要的文件。

# 建立 Legacy 目录sudo mkdir /srv/tftp/Legacy# 安装 syslinux pxelinuxsudo apt install syslinux pxelinux# 拷贝文件sudo cp /var/www/html/Ubuntu_22.04_Desktop/casper/{vmlinuz,initrd} /srv/tftp/Legacy/sudo cp /usr/lib/syslinux/modules/bios/{ldlinux.c32,libutil.c32,menu.c32,vesamenu.c32} /srv/tftp/Legacy/sudo cp /usr/lib/PXELINUX/{lpxelinux.0,pxelinux.0} /srv/tftp/Legacy/

创建 pxelinux 的配置文件。

cd /srv/tftp/Legacysudo mkdir pxelinux.cfgvim pxelinux.cfg/default

编辑配置文件:

DEFAULT menu.c32MENU TITLE ULTIMATE PXE SERVER - By Griffon - Ver 1.0PROMPT 0TIMEOUT 0MENU COLOR TABMSG  37;40  #ffffffff #00000000MENU COLOR TITLE   37;40  #ffffffff #00000000MENU COLOR SEL      7     #ffffffff #00000000MENU COLOR UNSEL    37;40 #ffffffff #00000000MENU COLOR BORDER   37;40 #ffffffff #00000000LABEL Ubuntu Desktop 22.04 ISO IPv4    kernel /vmlinuz    initrd /initrd    append root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://192.168.9.1/ubuntu-22.04.2-desktop-amd64.isoLABEL Ubuntu Desktop 22.04 ISO IPv6    kernel /vmlinuz    initrd /initrd    append root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://[fdb0:d7fa:87bd::1]/ubuntu-22.04.2-desktop-amd64.iso

3.2.2 配置 UEFI PXE 启动项

下载并拷贝需要的文件。

# 建立 UEFI 目录mkdir /srv/tftp/UEFI# 拷贝文件sudo cp /var/www/html/Ubuntu_22.04_Desktop/casper/{vmlinuz,initrd} /srv/tftp/UEFI/# 下载并拷贝必要的文件cd ~# shim-signedapt download shim-signeddpkg -x shim-signed*deb shimsudo cp shim/usr/lib/shim/shimx64.efi.signed.latest /srv/tftp/UEFI/bootx64.efi# grub-efi-amd64-signedapt download grub-efi-amd64-signeddpkg -x grub-efi-amd64-signed*deb grubsudo cp grub/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /srv/tftp/UEFI/grubx64.efi# grub-commonapt download grub-commondpkg -x grub-common*deb grub-commonsudo cp grub-common/usr/share/grub/unicode.pf2 /srv/tftp/UEFI/

创建配置文件。

sudo mkdir /srv/tftp/grubsudo vim /srv/tftp/grub/grub.cfg

编辑配置文件:

        set default="0"        set timeout=-1               if loadfont unicode ; then          set gfxmode=auto          set locale_dir=$prefix/locale          set lang=en_US        fi        terminal_output gfxterm        set menu_color_normal=white/black        set menu_color_highlight=black/light-gray        if background_color 44,0,30; then          clear        fi        function gfxmode {                set gfxpayload="${1}"                if [ "${1}" = "keep" ]; then                        set vt_handoff=vt.handoff=7                else                        set vt_handoff=                fi        }        set linux_gfx_mode=keep        export linux_gfx_mode        menuentry 'Ubuntu 22.04 IPv4' {                gfxmode $linux_gfx_mode                linux /UEFI/vmlinuz root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://192.168.9.1/ubuntu-22.04.2-desktop-amd64.iso                initrd /UEFI/initrd        }        menuentry 'Ubuntu 22.04 IPv6' {                gfxmode $linux_gfx_mode                linux /UEFI/vmlinuz root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://[fdb0:d7fa:87bd::1]/ubuntu-22.04.2-desktop-amd64.iso                initrd /UEFI/initrd        }

3.3 搭建 DHCP 服务器

安装 isc-dhcp-server

sudo apt install isc-dhcp-server

使用 ip a 查看网络接口

vboxuser@Ubuntu-22:~$ ip a1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: enp0s3:  mtu 1500 qdisc fq_codel state UP group default qlen 1000    link/ether 08:00:27:02:fa:39 brd ff:ff:ff:ff:ff:ff    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3       valid_lft 84432sec preferred_lft 84432sec    inet6 fe80::cd67:89ac:208:e978/64 scope link noprefixroute        valid_lft forever preferred_lft forever3: enp0s8:  mtu 1500 qdisc fq_codel state UP group default qlen 1000    link/ether 08:00:27:3d:0d:a4 brd ff:ff:ff:ff:ff:ff    inet6 fe80::51b:be51:b6c2:43ee/64 scope link noprefixroute        valid_lft forever preferred_lft forever

可以看到我这台机器上有两张网卡 enp0s3enp0s8,前者用来上网,后者用来连接局域网提供 PXE 服务。

先给目标网卡 enp0s8 配置静态 IP。

3.3.1 配置静态 IP

使用 netplan 配置静态 IP,打开配置文件。

sudo vim /etc/netplan/01-network-manager-all.yaml

打开后的默认配置文件如下:

# Let NetworkManager manage all devices on this systemnetwork:  version: 2  renderer: NetworkManager

编辑配置文件内容。

# Let NetworkManager manage all devices on this systemnetwork:  ethernets:    enp0s8:      dhcp4: no      dhcp6: no      addresses:        - 192.168.9.1/24        - fdb0:d7fa:87bd::1/64  version: 2  renderer: NetworkManager

应用更改。

sudo netplan apply

检查是否配置成功。

vboxuser@Ubuntu-22:~$ ip a1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: enp0s3:  mtu 1500 qdisc fq_codel state UP group default qlen 1000    link/ether 08:00:27:02:fa:39 brd ff:ff:ff:ff:ff:ff    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3       valid_lft 86356sec preferred_lft 86356sec    inet6 fe80::cd67:89ac:208:e978/64 scope link noprefixroute        valid_lft forever preferred_lft forever3: enp0s8:  mtu 1500 qdisc fq_codel state UP group default qlen 1000    link/ether 08:00:27:3d:0d:a4 brd ff:ff:ff:ff:ff:ff    inet 192.168.9.1/24 brd 192.168.9.255 scope global noprefixroute enp0s8       valid_lft forever preferred_lft forever    inet6 fdb0:d7fa:87bd::1/64 scope global noprefixroute        valid_lft forever preferred_lft forever    inet6 fe80::a00:27ff:fe3d:da4/64 scope link noprefixroute        valid_lft forever preferred_lft forever

3.3.2 配置 dhcpd

指定 isc-dhcp-server 要监听的网卡。打开配置文件。

sudo vim /etc/default/isc-dhcp-server

编辑内容:

INTERFACESv4="enp0s8"INTERFACESv6="enp0s8"

编辑 dhcpd.conf 配置文件。

sudo vim /etc/dhcp/dhcpd.conf 

添加内容:

option arch code 93 = unsigned integer 16;  subnet 192.168.9.0 netmask 255.255.255.0 {  range  192.168.9.2 192.168.9.254;  option routers 192.168.9.1;  next-server 192.168.9.1;  if option arch = 00:07 {        filename "/UEFI/bootx64.efi";  } else {        filename "/Legacy/pxelinux.0";  }}

重启服务。

sudo systemctl restart isc-dhcp-server

检查服务是否启动成功。

systemctl status isc-dhcp-server

此时基于 IPv4 的 PXE 服务器已配置完成。

3.3.3 (IPv6)配置 dhcpd6

编辑 dhcpd6.conf 配置文件。

sudo vim /etc/dhcp/dhcpd.conf 

编辑内容:

option dhcp6.bootfile-url code 59 = string;option dhcp6.client-arch-type code 61 = array of unsigned integer 16;option dhcp6.name-servers fdb0:d7fa:87bd::1;if option dhcp6.client-arch-type = 00:07 {        option dhcp6.bootfile-url "tftp://[fdb0:d7fa:87bd::1]/UEFI/bootx64.efi";} else {        # Support a hypothetical BIOS system that can PXE boot over IPv6        option dhcp6.bootfile-url "tftp://[fdb0:d7fa:87bd::1]/Legacy/pxelinux.0";}subnet6 fdb0:d7fa:87bd::/64 {        range6 fdb0:d7fa:87bd::3:10 fdb0:d7fa:87bd::3:99;        range6 fdb0:d7fa:87bd:: temporary;}

重启服务。

sudo systemctl restart isc-dhcp-server6

检查服务是否启动成功。

systemctl status isc-dhcp-server6

注意:由于 IPv6 的特性,当 dhcpd6 搭建成功后,局域网内的机器能够正确获得 IP,但是却无法连通。因此,还需要继续配置 [radvd](#3.4 搭建 RA 服务器)。

3.4 (IPv6)搭建 RA 服务器

安装 radvd。

sudo apt install radvd

创建配置文件。

vim /etc/radvd.conf

编辑配置文件:

interface enp0s8{    AdvSendAdvert on;    prefix fdb0:d7fa:87bd::/64 {        AdvOnLink on;        AdvAutonomous on;    };    #Send DNS Server setting - assumes there is a DNS server setup at the address below    RDNSS fdb0:d7fa:87bd::1{    };};

重启 radvd 服务。

sudo systemctl restart radvd

检查 radvd 服务状态。

systemctl status radvd

若服务正常运行,则此时 IPv6 网络已配置完成。

来源地址:https://blog.csdn.net/qq_44710943/article/details/131220762

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

搭建 PXE 服务器(基于 Ubuntu 22.04,支持 IPv4/6 及 Legacy/UEFI)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

搭建 PXE 服务器(基于 Ubuntu 22.04,支持 IPv4/6 及 Legacy/UEFI)

基于 Ubuntu 22.04 搭建 PXE 服务器,支持 IPv4, IPv6 网络,支持 Legacy, UEFI 启动模式。 文章目录 一、PXE 启动流程二、配置清单三、配置步骤3.1 搭建 HTTP 服务器3.2 搭
2023-08-23

编程热搜

目录