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

这篇具有很好参考价值的文章主要介绍了搭建 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)

网络地址:

  • IPv4: 192.168.9.1/24

  • IPv6: (先获取一个 ULA 前缀(点我) )

前缀: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 pxelinux
sudo 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/Legacy

sudo mkdir pxelinux.cfg

vim pxelinux.cfg/default

编辑配置文件:

DEFAULT menu.c32
MENU TITLE ULTIMATE PXE SERVER - By Griffon - Ver 1.0
PROMPT 0
TIMEOUT 0

MENU COLOR TABMSG  37;40  #ffffffff #00000000
MENU COLOR TITLE   37;40  #ffffffff #00000000
MENU COLOR SEL      7     #ffffffff #00000000
MENU COLOR UNSEL    37;40 #ffffffff #00000000
MENU COLOR BORDER   37;40 #ffffffff #00000000

LABEL 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.iso

LABEL 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-signed
apt download shim-signed
dpkg -x shim-signed*deb shim
sudo cp shim/usr/lib/shim/shimx64.efi.signed.latest /srv/tftp/UEFI/bootx64.efi

# grub-efi-amd64-signed
apt download grub-efi-amd64-signed
dpkg -x grub-efi-amd64-signed*deb grub
sudo cp grub/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /srv/tftp/UEFI/grubx64.efi

# grub-common
apt download grub-common
dpkg -x grub-common*deb grub-common
sudo cp grub-common/usr/share/grub/unicode.pf2 /srv/tftp/UEFI/

创建配置文件。

sudo mkdir /srv/tftp/grub
sudo 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 a
1: lo: <LOOPBACK,UP,LOWER_UP> 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 forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 system
network:
  version: 2
  renderer: NetworkManager

编辑配置文件内容。

# Let NetworkManager manage all devices on this system
network:
  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 a
1: lo: <LOOPBACK,UP,LOWER_UP> 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 forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> 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://www.toymoban.com/news/detail-627085.html

到了这里,关于搭建 PXE 服务器(基于 Ubuntu 22.04,支持 IPv4/6 及 Legacy/UEFI)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu 22.04 安装配置时间同步服务器

    参数解释: 1.server 127.127.1.0 #local clock 这个参数指定了一个本地时钟源。127.127.1.0 ,通常用于表示本地计算机的时钟。这个参数告诉NTP守护进程,如果无法从其他NTP服务器获取时间,或者作为备份时钟源,应该使用本地计算机的时钟作为时间源。 2.fudge 127.127.1.0 stratum 10 这个参

    2024年04月28日
    浏览(66)
  • ubuntu22.04 服务器 SSH 密钥登录失败

    SSH密钥登录,是将SSH公钥写入服务端的 ~/.ssh/authorized_keys 文件中。 今天装了ubuntu22.04的系统,按照以往操作,在服务端配置了SSH公钥之后,发现竟然无法登录。 首先查看OpenSSH版本: 查看 /var/log/auth.log 文件,发现有如下错误信息: 通过错误信息来看,填入 authorized_keys 文件的

    2024年01月18日
    浏览(86)
  • ubuntu 22.04 服务器网卡无IP地址

    ssh连接服务器连接不上,提示如下; 连接显示器 ,ip addr ls 命令查看IP地址,有网卡但没有IP地址 用于通过 DHCP 协议获取网络配置信息并为名为 enp10s0 的网络接口分配 IP 地址,enp10s0替换为本机网络接口名称 但是一旦重启 ,又没了IP地址 。目前为止暂未找到解决办法 偶然的机

    2024年02月22日
    浏览(54)
  • Ubuntu22.04 安装深度学习服务器全纪录

    制作启动盘 参考链接:https://blog.csdn.net/lyx_ok/article/details/129308753 安装 Ubuntu 22.04 将U盘插到服务器上,开机按F11键(具体什么键跟主板型号有关)选择启动项进入临时的 Ubuntu 系统,在图形界面中选择 Install Ubuntu ,所有配置都可以使用默认的,改一下用户名和密码即可。 进入

    2024年02月16日
    浏览(55)
  • 【Ubuntu】ubuntu22.04使用VNC链接服务器远程桌面

    本地主要需要一个VNC客户端,用来远程连接服务器端的VNC(在不安装Web版本VNC情况下)。VNC客户端下载地址: VNC客户端下载 在远程服务器控制台中安装Xfce桌面(这个桌面环境比较轻量化,博主用的88块钱的腾讯云服务器) 注意更新软件源 在远程服务器控制台中安装 tightvn

    2024年02月03日
    浏览(61)
  • Ubuntu服务器安装配置slurm (Ubuntu 22.04 LTS)

    Slurm 全称 S imple L inux U tility for R esource M anagement。通常被用于大型Linux服务器 (超算) 上,作为任务管理系统。本文详细讲述如何在 Ubuntu 22.04 LTS 上安装slurm,并进行简单的配置。 其实网上相关的教程已经非常多,但在旧版本的Ubuntu上安装slurm时,通常需要安装一个名为slurm-ll

    2024年02月07日
    浏览(77)
  • 在 ubuntu 22.04 上配置界面服务器 xrdp

    安装 vnc 服务器 和 xrdp 服务器 配置 ~/.xsession

    2024年02月07日
    浏览(55)
  • Ubuntu22.04服务器版本配置静态IP地址

    1、进入文件/etc/netplan/00-installer-config.yam 2、配置文件内容  注意:编写文件内容时一定要格式正确,不然会出差 3、重启网络  4、查看IP  这样就配置成功啦 5、如果是18.04一下版本参照这个配置,22.04版本也可以用这个,重启网络的时候会有报错,但不会有影响  重启网络后

    2024年02月11日
    浏览(61)
  • 在 ubuntu 22.04 上配置界面服务器 vnc

    xrdp服务器的安装 1.安装服务器 查看配置 2.设置密码 3.更改 ~/.vnc/xstartup 4.重新启动 5.连接

    2024年02月08日
    浏览(51)
  • Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器

    NFS(Network File System)是一种允许不同计算机之间共享文件的网络文件系统。 在Ubuntu 22.04 LTS中,您可以使用以下步骤安装并配置NFS服务器。 一、安装NFS服务器 在Ubuntu 22.04 LTS中,您可以使用以下命令安装NFS服务器: 二、创建共享目录 接下来,您需要创建要共享的目录。在本

    2024年02月05日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包