Network 之十一 详解 PXE 原理、工作流程、服务端(Tiny PXE Server、Serva、Ubuntu)搭建

  最近,正在学习 iPXE 的源代码,于是开始各种 Google 查找 iPXE 的资料进行学习。由于之前完全没有接触过 PXE,因此从基本概念开始一点点学习,以下为学习中的一些总结。

背景

  网络启动一直都没有一个事实标准。早在 1993 年,网卡就已经在其扩展卡上包含了启动 ROM,每个扩展卡都遵循自己的专有协议来加载和执行引导程序。Jamie Honan 非正式发布的 “Net Boot Image Proposal” 是标准化的第一次努力,很快两个开源项目 Etherboot(1995)和 Netboot(1996)提供了具有可插拔驱动程序支持的通用 ROM 映像。

  与此同时,英特尔从一个更商业的角度来研究无磁盘引导:它应该整合资源,使管理更容易。很快,他们发布了预启动执行环境(PXE)规范,作为其 Wired for Management 的一部分。此后,PXE 逐渐成为了一种广泛应用的规范,并成为了计算机的标配。

PXE

  PXE(Preboot eXecution Environment,预启动执行环境)通常也被称为 PXE Boot、Network Boot,最初是由 Intel 公司开发的一种技术,该技术旨在提供了一种使用网络接口(Network Interface)启动计算机的机制。

  原始的 PXE 规范是由 Intel 和 Systemsoft 于 1999 年 9 月 20 日公布 2.1 版本,至今没有再更新过。后来,Intel 直接将 PXE 引入到统一可扩展固件接口 (UEFI) 标准中,被称为 PXE Boot。

  PXE 规范描述了一个标准化的 客户端 ↔ 服务器 环境,通信过程使用的是 UDP/IP、DHCP、TFTP 等多个标准互联网协议。在这个环境中,计算机启动时可以通过与服务器交互,来动态获取启动需要的资源,从而让计算机的启动可以不依赖本地数据存储设备(如硬盘)。
在这里插入图片描述
  PXE 的主要用途是在新的或出现故障的计算机上安装新的操作系统。最为常见的一个用途就是批量装机,大大简化计算机的大型部署。此外,PXE 还可用于托管故障排除和维护工具,例如,一个简单的 Linux 发行版或者 Windows PE,当系统无法启动时,可以通过 PE 进行维护。
在这里插入图片描述

客户端

  PXE 客户端的实现方法就是在博文 Network 之十 BIOS + MBR、UEFI + GPT、GRUB、BOOTMGR、SYSLINUX 中介绍的 Option ROM 机制。PXE 客户端(通常也称为 PXE 固件)是网卡固件的一部分,被网卡厂商固化在了网卡的 ROM 中。

有些资料中说,也可以在 UEFI 固件中实现 PXE,这个没怎么见过

  PXE 固件提供了基本的通用网络设备接口(UNDI)、极简的 UDP/IP 堆栈、预启动(DHCP)客户端模块和 TFTP 客户端等功能模块。这些功能模块共同构成了 PXE 应用程序编程接口(API), 网络引导程序(Network Bootstrap Program,NBP )在需要与 PXE 环境的服务器对等端提供的服务进行交互时使用这些接口。
在这里插入图片描述
  最初的 PXE 客户端固件由英特尔编写(功能比较单一,支持协议较少),并且是作为可链接的 IA32 目标代码格式模块免费提供的,包含在其产品开发套件(PDK)中。后来,开源世界也产生了非标准衍生项目(如 gPXE / iPXE),提供开源的 PXE 客户端固件。

  PXE 客户端固件与 BIOS 密切相关,可以分为传统 PXE 客户端 和 EFI PXE 客户端。传统 PXE 客户端与传统 BIOS 一起工作,工作在 16 位 8086 的实地址模式;EFI PXE 客户端则是工作在 32 位或 64 位的保护地址模式下。
在这里插入图片描述
  传统 Option ROM 代码生成文件的大小不能太大,BIOS 文件预留的空间不多(通常是 0xC000 ~ 0xE000)。UEFI Option ROM 的限制则在 UEFI 规范的 4.4.2 PCI Option ROMs 章节有详细说明。

服务端

  PXE 服务端就是互联网中标准的提供 DHCP、TFTP 等服务的服务器,可能是功能齐全的一台服务器,也可能是互相独立的提供不同服务的多台服务器。其中,DHCP 服务端用于提供适当的客户端网络参数及 TFTP 信息;TFTP 服务端提供引导镜像文件的下载。由于服务端通常是功能强大的服务器,因此,其具有完整的协议栈及应用功能。
在这里插入图片描述
  支持 PXE 的服务器与普通服务器的区别就是其中的 HDCP 服务端增加了 PXE 相关配置,它能够解析 DHCP 中 Option 60 的内容(客户端标识符 PXEClient ),并在应答中给出 Option 66(引导服务器主机名) 和 Option 67(引导文件名)。其他 TFTP 等服务端并不需要特殊配置。

  除此之外,PXE 还提出了 proxyDHCP 的概念,用在无法修改现有 DHCP 服务器的情况(即不允许在现有 DHCP 服务器上配置 PXE 的情况)。使用 proxyDHCP 就可以实现与已有 DHCP 服务器的网络兼容。PXE 和 DHCP 可以由单独的服务器提供,互不干扰。
在这里插入图片描述

  1. 原有的 DHCP 服务器为所有 DHCP 客户端提供 IP 地址、IP 掩码等。
  2. proxyDHCP 服务器仅向 PXE 标识的引导客户端提供 TFTP 服务器的 IP 地址和 NBP 的名称。

网络引导程序

  网络引导程序(Network Bootstrap Program,NBP ) 是引导链过程中的第一个环节,它们通常通过 TFTP 请求一小组补充文件,以便运行一个极简的操作系统执行器(例如,Windows PE 或基本的 Linux 内核 + initrd)。

常见的 NBP:iPXE、PXELINUX

  小型操作系统执行器加载自己的网络驱动程序和 TCP/IP 堆栈,然后进一步完成安装操作系统。此时,引导或安装完整操作系统所需的其余文件通常不是通过 TFTP 提供的,而是使用可靠的传输协议(如 HTTP、CIFS 或 NFS)提供的。

HTTP Boot

  HTTP Boot 是 UEFI 规范版本 2.5 中引入的另一个网络引导方案,可用作 PXE 的高性能替代品。HTTP Boot 结合了动态主机配置协议 (DHCP)、域名系统 (DNS) 和超文本传输协议 (HTTP),以通过网络提供系统部署和配置功能。

  HTTP Boot 的引入主要是解决安全问题。PXE 在设计时没有考虑加密或身份验证机制,容易受到中间人攻击,无法在本地网络之外扩展,并且存在与 TFTP 超时和 UDP 数据包丢失相关的可靠性问题。

工作流程

  首先,确保网络中必须具有已配置的动态主机配置协议(DHCP)服务器和普通文件传输协议(TFTP)服务器,其次,通过 BIOS 或 UEFI 提供的自主选择启动位置的选项选择从网络启动(如果支持 PXE,通常就会专门有一项是从网络启动)。
在这里插入图片描述
  PXE 固件程序就是网卡固件的一部分,选择从网络启动后,BIOS 或 UEFI 就会将网卡中的 PXE 固件加载到内存中去执行。根据 PXE 固件的不同,流程稍有不同。如果网卡中的 PXE 固件本身就是 iPXE 或 gPXE,就可以简化流程(直接去引导系统)。
在这里插入图片描述
  如果网卡中的 PXE 固件是旧版本的,通常的做法是先去加载一个 NBP,由 NBP 再去引导系统。这里的 NBP 可以是 iPXE、PXELINUX 等。注意,如果使用的是 iPXE,则注意避免递归请求。因为,iPXE 运行后又会再次发起 DHCP 请求。

传统 PXE 固件

  传统的 PXE 固件就是指的最初由 Intel 实现的 PXE 固件,运行在 8086 实地址模式,主要指的是与传统 BIOS 一起工作的固件。它通常仅支持通过 TFTP 传输文件,现在,很多网卡中的固件还都是传统的 PXE 固件。PXE 固件启动后会在屏幕上输出 PXE + 版本 类似的字符串。
在这里插入图片描述
  传统的 PXE 固件可以直接去加载操作系统引导文件,但是由于 NBP 通常可以支持灵活的配置脚本,在多数情况下,传统的 PXE 固件会优先加载一个 NBP,由 NBP 通过配置脚本灵活的安装系统。为此,iPXE 提供了一个被称为链式加载的方案:PXE 固件可以先请求一个 iPXE 固件,后续交由 iPXE 固件执行。
在这里插入图片描述

  1. 第一个阶段:PXE Client 通过 DHCP 获取 IP 地址。这一个阶段就是标准的 DHCP 过程:DORA。与标准 DHCP 不同的是,客户端和服务端支持了 PXE 后,会在通信报文中添加一些额外内容。
    在这里插入图片描述
    1. 由于客户端使用启用了 PXE 的网卡通过网络引导请求 IP 地址,因此客户端发出的 DHCP Discover 包括 DHCP Option 60,其中包含字符串 PXEClient:Arch:xxxxxUNDI:yyyzz。用于告诉服务端,客户机的具体架构及引导方式(rfc4578)。
      • 00000 - Intel x86PC (BIOS boot)
      • 00001 - NEC/PC98
      • 00002 - EFI Itanium
      • 00003 - DEC Alpha
      • 00004 - Arc x86
      • 00005 - Intel Lean Client
      • 00006 - EFI IA32 (x86 EFI boot)
      • 00007 - EFI BC(x64 EFI boot)
      • 00008 - EFI Xscale
      • 00009 - EFI x86-64
    2. 支持 PXE 的 DHCP 服务端会识别 Option 60 的内容,根据识别的架构及引导方式,在 DHCP Offer 添加 Option 66(Next server IP address) 和 Option 67(Boot file name) 的内容,否则系统不能正常安装及启动。
    3. 后续的 DHCP Request 和 Ack 均包含 Option 60、Option 66、Option 67。
    4. 此阶段结束之后,PXE 客户端会获得 自身可用的 IP 地址相关信息(your IP address),TFTP 服务器地址(Next server IP address),启动文件名(Boot file name) 这三个关键要素。
  2. 第二个阶段:PXE 客户端向 DHCP 给的 TFTP 服务器请求 DHCP 给的 Boot File。这一阶段就是标准的 TFTP 传输过程。通常,这里的 Boot File 会是一个网络引导程序(NBP),例如,我这里的是 iPXE。
    在这里插入图片描述
    1. 在 TFTP 中,传输由发出读取或写入服务器上特定文件的请求的客户端启动。
    2. 获取到网络引导程序(NBP)后,后续就会由网络引导程序(NBP)继续运行。例如我这里接下来就是一个完成的 iPXE 固件的执行流程。

iPXE 固件

  iPXE 对 PXE 功能进行了扩展,是先前的 PXE 实现的超集,支持更多协议。iPXE 固件主要针对 UEFI 模式的引导。最为主要的是,iPXE 支持灵活的配置脚本。iPXE 固件启动后会在屏幕上输出 iPXE + 版本 类似的字符串。
在这里插入图片描述
  iPXE 不仅仅是一个 PXE 固件,而且还是一个功能强大的 NBP。因此,可以直接使用 iPXE 来引导操作系统。相比于传统 PXE,iPXE 可以使用更多协议来获取操作系统的文件。
在这里插入图片描述

  1. 第一个阶段:iPXE 固件通过 DHCP 获取 IP 地址。这一个阶段就是标准的 DHCP 过程:DORA。与标准 DHCP 不同的是,客户端和服务端支持了 PXE 后,会在通信报文中添加一些额外内容。
    在这里插入图片描述
    1. 支持 PXE 的 DHCP 服务端需要识别 Option 77 的内容,然后返回对应的配置文件。
    2. 此阶段结束之后,iPXE 固件会获得 自身可用的 IP 地址相关信息(your IP address),TFTP 服务器地址(Next server IP address),启动文件名(Boot file name) 这三个关键要素。这里的 Boot File 就是 iPXE 的配置脚本文件。
  2. 第二个阶段:iPXE 固件向 DHCP 给的 TFTP 服务器请求 DHCP 给的 Boot File。这一阶段就是标准的 TFTP 传输过程。
    在这里插入图片描述

系统安装

  第二个阶段结束之后,NBP 就会加载获得的配置脚本文件。配置脚本文件通常会提供一个菜单界面,可以选择各种操作系统或者工具。选择相应菜单后才是真正请求操作系统文件。
在这里插入图片描述

配置服务端

Windows

  Windows 系统下有一些 All-In-One 的 PXE 服务端软件,例如,Tiny PXE ServerServa,只用这些工具,我们就无需再单独安装及配置 DHCP、TFTP 等服务端。
在这里插入图片描述

Tiny PXE Server

  Tiny PXE Server 是完全免费的,它自带了很多配置,且提供了更为完整的引导文件示例(根目录下的 files 文件夹),直接启动 pxesrv.exe 就可以使用了。它已经预先配置好了一些在线安装,啥也不用配置就可以安装一个系统。

  当然,pxesrv.exe 是个独立的程序,使用它完全可以自己重新搭建一个服务端。接下来,我就使用它从头搭建一下安装 Ubuntu 22.04 LTS 的服务端。

  1. 新建一个目录(我这里是 D:/PXE/TinyPXE),用于存放 PXE 服务端所需要的各种文件。各目录及文件的来源及作用见下图的说明即可。
    在这里插入图片描述
  2. 直接运行 pxesrv.exe,然后根据自己的实际环境进行修改。注意,最后一定要在右键菜单中保存配置,然后关闭重新启动后配置才会生效(暂时不用选择 Online,等后续配置完后在启动即可)。
    在这里插入图片描述
      在选择了 ipxe.pxe 并保存之后,Tiny PXE Server 就会自动将 ipxe.pxe 所在的目录作为引导的根目录。如果选择了顶部的 HTTPd 然后启动服务端之后,那么就可以直接在浏览器中使用 http://你的 IP 地址 访问根目录下的文件。
    在这里插入图片描述
  3. 在 os-images 下新建一个目录(我这里是 ubuntu-22.04-desktop-amd64),然后将我们的系统 iso 文件内容解压到新建的目录下。注意,每个子目录下存放一个操作系统,这样可以允许我们选择安装不同的系统。
    在这里插入图片描述
  4. 新建 menu.ipxe 纯文本文件,然后编辑其中的内容。注意,根据自己的情况稍作修改。
    #!ipxe
    
    #============== Set Variables ===============
       set menu-timeout 16000
       set menu-default ubuntu-22.04-desktop-amd64
       isset ${
          
          ip} || dhcp
       isset ${
          
          next-server} || set next-server 192.168.100.214
       set boot-url http://${next-server}
    
    #============== Menu ===============
    :start
      menu iPXE Boot Menu
      item --gap --             -------------------------------- System Operation ---------------------------
      item ubuntu-22.04-desktop-amd64         Install Ubuntu Desktop 22.04 LTS
      item --gap --             -------------------------------- Advanced -----------------------------
      item --key s shell             [S] Drop to iPXE Shell
      item --key r reboot            [R] Reboot the Computer
      item --key x exit              [X] Exit iPXE and Continue BIOS Booting
      choose --timeout ${
          
          menu-timeout} --default ${
          
          menu-default} selected
      goto ${
          
          selected}
     
    #============ Main Menu Options =============
    :ubuntu-22.04-desktop-amd64
    set os_root os-images/ubuntu-22.04-desktop-amd64
    kernel  ${
          
          boot-url}/os-images/ubuntu-22.04-desktop-amd64/casper/vmlinuz
    initrd  ${
          
          boot-url}/os-images/ubuntu-22.04-desktop-amd64/casper/initrd
    imgargs vmlinuz initrd=initrd boot=casper maybe-ubiquity netboot=nfs ip=dhcp nfsroot=${
          
          next-server}:/D/PXE/TinyPXE/iPXE/os-images/ubuntu-22.04-desktop-amd64 quiet splash ---
    boot
    
    :shell
      echo Type 'exit' to go back to the menu.
      shell
      goto start
     
    :reboot
      reboot
     
    :exit
      exit
    
  5. 使用 windfsd.exe 将 iPXE 这个目录共享。共享的原因是系统文件的获取依赖于 NFS。在 TinyPXE 中单独开启一个命令行工具(cmd,不能用 Powershell),然后输入 winnfsd.exe -id 0 0 D:\PXE\TinyPXE\iPXE。注意,不要关闭命令行,关闭后将停止共享。
    在这里插入图片描述
  6. 选择 Online 就可以启动服务端了(Tiny PXE Server 将自动启动 DHCP 和 TFTP 的服务端),此时服务端准备好了,接下来就是启动客户端了。

Serva

  Serva 分专业版和社区版,社区版支持的功能很少(例如,不支持 UEFI),官网有很多应用示例可以参考。使用 Serva 的好处就是,他会在自动生成相关目录文件。

  1. 新建一个目录(我这里是 D:/PXE/ServaPXE),用于存放 PXE 服务端所需要的各种文件。各目录及文件的来源及作用见下图的说明即可。
    在这里插入图片描述
  2. 直接运行 Serva64.exe,然后进行配置。配置后重启,Serva 就会在我们指定的根目录(Boot)下自动生成各种目录及文件。我们需要做的就是按照 Serva 的要求把系统放到指定的文件夹下。
    在这里插入图片描述
    • BM: 存放 Serva 的 Boot Manager 文件,包括 Windows 和 Linux 的 BIOS、EFI32、EFI64 文件。其中部分文件 Serva 已经自动生成了。
    • NWA_PXE: 存放 Linux 系统的映像文件
    • WIA_RIS: 存放只支持 RIS 安装的早期 Windows 版本,比如 Windos XP、Windows2000 等
    • WIA_WDS: 存放支持 WDS 安装的 Windows 版本,比如 Win10、Windows Server 2016 等
  3. NWA_PXE 下新建一个目录(我这里是 ubuntu-22.04-desktop-amd64),然后将我们的系统 iso 文件内容解压到新建的目录下。注意,每个子目录下存放一个操作系统,这样可以允许我们选择安装不同的系统。
  4. 在每个系统文件目录下(例如,我这里的 NWA_PXE/ubuntu-22.04-desktop-amd64)新建一个名为 ServaAsset.inf 的纯文本文件,然后添加以下内容。注意,如果有多个系统目录,每个都需要添加。
    [PXESERVA_MENU_ENTRY]
    asset = Ubuntu 22.04 LTS
    platform = amd64
    kernel_bios = /NWA_PXE/$HEAD_DIR$/casper/vmlinuz
    append_bios = showmounts toram root=/dev/cifs initrd=/NWA_PXE/$HEAD_DIR$/casper/initrd boot=casper netboot=cifs nfsroot=//$IP_BSRV$/NWA_PXE_SHARE/$HEAD_DIR$ NFSOPTS=-ouser=serva,pass=avres,sec=ntlmv2,vers=2.0,ro ip=dhcp ro ipv6.disable=1
    kernel_efi64 = /NWA_PXE/$HEAD_DIR$/casper/vmlinuz
    append_efi64 = showmounts toram root=/dev/cifs initrd=/NWA_PXE/$HEAD_DIR$/casper/initrd boot=casper netboot=cifs nfsroot=//$IP_BSRV$/NWA_PXE_SHARE/$HEAD_DIR$ NFSOPTS=-ouser=serva,pass=avres,sec=ntlm,vers=1.0,ro ip=dhcp ro ipv6.disable=1
    
  5. 共享 NWA_PXE。直接在 NWA_PXE 上右键,选择 属性->共享,将目录共享即可。
  6. 再次重新启动 Serva64.exe,此时服务端准备好了,接下来就是启动客户端了。

Linux

  Linux(我使用的是 Ubuntu 22.04 LTS)下的配置需要手动单独安装组件:DHCP SERVER、TFTP SERVER、HTTP SERVER、NFS SERVER、DNS SERVER(可选)。以下就简单介绍每个服务端的安装及配置。同时,注意以下几个问题:

  1. 很多文章推荐使用 dnsmasq ,dnsmasq 是一个 Linux工具,它结合了 DNS 服务器、DHCP 服务器、TFTP 服务器和 PXE 服务器。我并没有使用它。
  2. 现在 Linux 的服务端的守护进行都是服务化了。常见的命令:
    1. sudo service xxx start:启动 xxx 服务
    2. sudo service xxx stop:停止 xxx 服务
    3. sudo service xxx restart:重启 xxx 服务
    4. sudo systemctl enable xxx:开机自动启动 xxx 服务
    5. sudo systemctl disable xxx:禁用 xxx 服务
    6. sudo systemctl status xxx:查看 xxx 服务的状态
    7. journalctl -u xxx:查看服务信息
  3. 网络的修改可能还需要对应的修改防火墙:sudo ufw status
  4. 服务端安装后默认就启动,电脑重启后有可能需要再次开启。

TFTP SERVER 安装及配置

  在 Ubuntu 下,TFTP SERVER 对应的软件包是 tftpd-hpatftpd-hpa 是 BSD TFTP 客户端和服务器的增强版本。与原始版本相比,它拥有许多错误修正和增强),因此,直接使用命令 sudo apt install tftpd-hpa 进行安装。
在这里插入图片描述
  tftp-hpa 的配置文件为 /etc/default/tftpd-hpa,可以不用修改。默认情况下,tftp-hpa 的根目录是 /srv/tftp,将 PXE 的启动配置文件放到该目录即可。这样 PXE 客户端就可以直接获取到这些文件。随便找个客户端:tftp 192.168.100.63 -c get ipxe.pxe 进行测试。
在这里插入图片描述

DHCP SERVER 安装及配置

  在 Ubuntu 下,DHCP SERVER 对应的软件包是 isc-dhcp-serverInternet Systems Consortium 开发的,目前主流的开源 DHCP 实现),因此,直接使用命令 sudo apt install isc-dhcp-server 进行安装。
在这里插入图片描述
  正常安装之后,需要编辑 DHCP SERVER 默认的配置文件 /etc/dhcp/dhcpd.conf 才可以正常工作。修改之后使用命令 sudo service isc-dhcp-server restart 重启 DHCP SERVER。详细介绍可以参考 ISC-DHCP 官方文档。针对 PXE,在 /etc/dhcp/dhcpd.conf 的最后追加如下内容(注意根据自己的网络环境更改):

option routers 192.168.100.1;
#option broadcast-address 192.168.100.255;
subnet 192.168.100.0 netmask 255.255.255.0 {
    
    
    range 192.168.100.215 192.168.100.230;
}

#option client-system-arch code 93 = unsigned integer 16;
class "pxeclients" {
    
    
    match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
    next-server 192.168.100.214;
    if exists user-class and option user-class = "iPXE" {
    
    
        filename "menu.ipxe";
    } else {
    
    
        filename "ipxe.pxe";
    }
}
  1. IPv4 和 IPv6 的 DHCP SERVER 是相互独立的(例如,IPv6 的服务名为 isc-dhcp-server6,配置文件名为 /etc/dhcp/dhcpd.conf),上面说的仅针对 IPv4。
  2. DHCP SERVER 要绑定的网卡,编辑 /etc/default/isc-dhcp-server
    在这里插入图片描述
  3. 最好将网卡配置为使用静态 IP

NFS SERVER 安装及配置

  在 Ubuntu 下,NFS SERVER 对应的软件包是 nfs-kernel-server,因此,直接使用命令 sudo apt install nfs-kernel-server 进行安装。正常安装时,会进行一系列的配置。感兴趣的的话,可以自行去学习。
在这里插入图片描述
  这里我们需要做的就是在 /etc/export 中添加需要共享的目录。例如,我这里的是 /home/zcshou/PXE/os-images *(rw,sync,no_root_squash,no_subtree_check)。注意配置后需要重启 sudo service nfs-kernel-server restartsudo exportfs -ar 生效。使用 showmount -e [ip] 可以查看共享的目录。
在这里插入图片描述
随便找个客户端,进行测试 sudo mount -t nfs -o vers=4 192.168.100.63:/home/zcshou/PXE/os-images /mnt/nfs

HTTP SERVER 安装及配置

  在 Ubuntu 下,HTTP SERVER 对应的软件包是 apache2,因此,直接使用命令 sudo apt install apache2 进行安装。安装完成之后,我们就可以直接从浏览器进行访问,看到如下页面。
在这里插入图片描述
  apache 的 HTTP SERVER 默认使用的根目录是 /var/www/html,默认的说明页面中有介绍它的配置文件。Apache2 Web Server 在 Ubuntu 下的配置有些特殊(与上游不同),详细介绍参见 Ubuntu 的专题页面 HTTPD - Apache2 Web Server

  默认情况下,Ubuntu 不允许通过 web 访问 /var/wwwpublic_thml/usr/share 之外的目录。如果您的站点使用的是位于其他地方的 web 文档根目录,您可能需要在 /etc/apache2/apache2.conf 中将文档根目录指定为白名单。

DNS SERVER 安装及配置

  在 Ubuntu 下,HTTP SERVER 对应的软件包是 bind9Internet Systems Consortium 开发的,目前主流的开源 DNS 实现),因此,直接使用命令 sudo apt install bind9 进行安装。
在这里插入图片描述
  此外,DNS SERVER 还有个测试工具 dnsutils,一般也会一起安装 sudo apt install dnsutils。需要注意,bind9 默认的服务名字为 named.service,在 Ubuntu 上有个别名叫 bind9.service,我一般直接使用 named.service 即可。

  BIND 的主要配置文件是 /etc/bind/named.conf,每当 BIND 启动时,就会读取这个配置文件!不过,现在 BIND 的配置文件结构化了,/etc/bind/named.conf 只用于引入 /etc/bind/named.conf.options/etc/bind/named.conf.local/etc/bind/named.conf.default-zones,因此,我们需要修改也是引入的这三个文件。
在这里插入图片描述

  • /etc/bind/named.conf.options:这个文件是全局配置项,比如定义解析文件的位置(directory)、DNS 上游服务器(forwarders)、以及一些安全性格的参数配置等。基本修改是配置转发 DNS,表示如果我们的 DNS SERVER 有解析不了的,就转发给这里指定的 DNS 去解析。
    在这里插入图片描述
  • /etc/bind/named.conf.local:添加自定义的域名信息(zone)及对应的解析文件(file)。例如,将 xxx.com 和 192.168.xx.xx 关联起来。
  • /etc/bind/named.conf.default-zones:默认的正/反解记录清单文件

相关参考:

  1. https://linuxhint.com/configure-dns-server-ubuntu/
  2. https://jingwei.link/2019/04/26/dns-server-setup-on-ubuntu.html
  3. https://www.cnblogs.com/pied/archive/2013/04/09/3010286.html
  4. https://blog.kuoe0.tw/posts/2013/08/11/install-dns-server-on-ubuntu/
  5. https://blog.csdn.net/evanyanglibo/article/details/123484424
  6. https://www.2daygeek.com/start-stop-restart-enable-reload-bind-dns-named-server-service-in-linux/

SYSLOG SERVER 安装及配置

  在 Ubuntu 下,SYSLOG SERVER 对应的软件包是 rsyslog,因此,直接使用命令 sudo apt install rsyslog 进行安装。貌似 Ubuntu 好像默认就已经安装了 rsyslog,我在安装时提示已经安装了,但不记得安装过!

  安装之后,必须要修改配置文件 /etc/rsyslog.conf,以定义 SYSLOG SERVER 使用的协议及端口号。具体就是找到如下部分,去掉注释,保存即可。使用命令 sudo service rsyslog restart 重启服务后生效,使用命令 ss -4altunp | grep 514 查看监听状态。默认日志位置是 /var/log
在这里插入图片描述
  客户端也需要稍作配置,在客户端的 /etc/rsyslog.conf 文件最后添加 cron.none;*.info;mail.none;authpriv.none @SYSLOG SERVER IP 地址:514,其中,一个 @ 表示使用 UDP,两个 @ 表示使用 TCP。

参考

  1. https://linuxhint.com/pxe_boot_ubuntu_server/
  2. https://uwnthesis.wordpress.com/2014/07/24/pxe-booting-how-network-booting-works/
  3. https://linuxhit.com/pxe-boot-what-is-pxe-how-does-it-work/
  4. https://net.co.at/doc/howto/docs/pxe_howto/ch06.html
  5. https://blog.51cto.com/u_15545168/5220003
  6. http://mistyprojects.co.uk/documents/TinyPXEServer/index.html
  7. https://www.aresgalaxy.org/system-administration/how-to/boot-ubuntu-live-over-network-pxe-using-serva-on-windows-7-8-10
  8. https://www.bilibili.com/read/cv12076448

猜你喜欢

转载自blog.csdn.net/ZCShouCSDN/article/details/127474287
PXE
今日推荐