AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 494699
Accepted
Søren Sjøstrøm
Søren Sjøstrøm
Asked: 2019-01-16 15:14:15 +0800 CST2019-01-16 15:14:15 +0800 CST 2019-01-16 15:14:15 +0800 CST

PXE 引导期间的 TFTP 超时问题

  • 772

在 CentOS 7 机器上设置 PXE 引导服务器时,我遇到了一个奇怪的 TFTP 问题。如果没有遇到超时问题,我无法从 TFTP 服务器检索任何文件。启动过程到此为止,我正确地从 DHCP 服务器获得了 IP 地址和文件名。但是,当要从 TFTP 服务器检索引导文件时,会出现“TFTP 打开超时”消息。如果我从本地计算机手动建立到 PXE 服务器的 TFTP 连接,我会立即访问该服务器。但如果我尝试使用“get pxelinux.0”命令,我会收到另一条超时消息。我的防火墙设置正确,如果我完全关闭防火墙也没有什么区别。SeLinux 也被禁用。如果我在端口 69 上进行 tcpdump,我会收到以下消息:

12:34:33.477401 IP 172.16.1.202.ah-esp-encap > tools.dmz.tuxme.dk.tftp:  27 RRQ "pxelinux.0" octet tsize 0
12:34:35.481131 IP 172.16.1.202.acp-port > tools.dmz.tuxme.dk.tftp:  27 RRQ "pxelinux.0" octet tsize 0
12:34:39.490793 IP 172.16.1.202.msync > tools.dmz.tuxme.dk.tftp:  27 RRQ "pxelinux.0" octet tsize 0
12:34:45.477712 IP 172.16.1.202.gxs-data-port > tools.dmz.tuxme.dk.tftp:  27 RRQ "pxelinux.0" octet tsize 0
12:34:53.441801 IP 172.16.1.202.vrtl-vmf-sa > tools.dmz.tuxme.dk.tftp:  27 RRQ "pxelinux.0" octet tsize 0
12:35:03.384065 IP 172.16.1.202.newlixengine > tools.dmz.tuxme.dk.tftp:  32 RRQ "pxelinux.0" octet blksize 1456
12:35:39.414843 IP 172.16.1.202.newlixconfig > tools.dmz.tuxme.dk.tftp:  32 RRQ "pxelinux.0" octet blksize 1456
12:36:51.422568 IP 172.16.1.202.tsrmagt > tools.dmz.tuxme.dk.tftp:  32 RRQ "pxelinux.0" octet blksize 1456
12:38:39.406732 IP 172.16.1.202.tpcsrvr > tools.dmz.tuxme.dk.tftp:  32 RRQ "pxelinux.0" octet blksize 1456

不幸的是,系统日志没有显示任何有用的信息:

Jan 15 13:13:19 tools xinetd[6993]: EXIT: tftp status=67 pid=7954 duration=0(sec)
Jan 15 13:13:21 tools xinetd[6993]: START: tftp pid=7955 from=172.16.1.202
Jan 15 13:13:21 tools in.tftpd[7955]: no user tftp: Success
Jan 15 13:13:21 tools xinetd[6993]: EXIT: tftp status=67 pid=7955 duration=0(sec)
Jan 15 13:13:25 tools xinetd[6993]: START: tftp pid=7956 from=172.16.1.202
Jan 15 13:13:25 tools in.tftpd[7956]: no user tftp: Success
Jan 15 13:13:25 tools xinetd[6993]: EXIT: tftp status=67 pid=7956 duration=0(sec)
Jan 15 13:13:31 tools xinetd[6993]: START: tftp pid=7957 from=172.16.1.202
Jan 15 13:13:31 tools in.tftpd[7957]: no user tftp: Success

/var/lib/tftpboot 目录的权限是 0755。

这是我的设置文件:

/etc/xinetd.d/tftp:

service tftp
socket_type             = dgram
protocol                = udp
wait                    = yes
user                    = root
server                  = /usr/sbin/in.tftpd
server_args             = -c -v -u tftp -p -U 117 -s /var/lib/tftpboot
disable                 = no
per_source              = 11
cps                     = 100 2
flags                   = IPv4
linux networking
  • 2 2 个回答
  • 6577 Views

2 个回答

  • Voted
  1. Best Answer
    telcoM
    2019-01-16T16:59:07+08:002019-01-16T16:59:07+08:00

    看起来tcpdump输出只包含请求,根本没有任何响应。如果这是实际发生的情况,则预期会出现超时错误。

    在server_argsxinetd 的 TFTP 配置行中,您有-u tftp. 这告诉in.tftpd以用户身份运行tftp。鉴于此,记录的这条消息in.tftpd可能很重要:

    Jan 15 13:13:21 tools in.tftpd[7955]: no user tftp: Success
    

    它说“没有用户 tftp”。用户帐户是否实际存在于您的系统中?tftp

    Success日志消息末尾的 需要一点 C 编程知识才能理解。它可能来自一个极简的错误处理函数,它可能只是调用perror()然后在退出之前进行任何必要的清理。

    该perror()函数从其调用者那里获取一条消息,然后附加一条与errno变量的当前值相对应的标准错误消息。它旨在用于先前系统调用失败的情况;自定义消息应该描述遇到错误时程序正在做什么,然后标准消息应该阐明遇到的问题的类型。

    但是,如果程序员使用他们的错误处理函数报告了一个以其他方式捕获的错误,标准错误消息部分将显示为Success.

    我的猜测是该in.tftpd过程开始于xinetd,准备切换到 user tftp,并发现这样的用户不存在。因此,该in.tftpd进程输出该日志消息并在没有向客户端发送任何内容的情况下终止。

    结尾带有误导性“成功”的简洁信息是“如果你唯一的工具是锤子,你倾向于把一切都当作钉子”的旧概念的一个例子。在这种情况下,程序员可能在其输出格式不太适合的情况下使用了他们唯一的错误处理功能。

    此外,这些请求看起来有点奇怪:

    12:34:33.477401 IP 172.16.1.202.ah-esp-encap > tools.dmz.tuxme.dk.tftp:  27 RRQ "pxelinux.0" octet tsize 0
    12:34:35.481131 IP 172.16.1.202.acp-port > tools.dmz.tuxme.dk.tftp:  27 RRQ "pxelinux.0" octet tsize 0
    12:34:39.490793 IP 172.16.1.202.msync > tools.dmz.tuxme.dk.tftp:  27 RRQ "pxelinux.0" octet tsize 0
    12:34:45.477712 IP 172.16.1.202.gxs-data-port > tools.dmz.tuxme.dk.tftp:  27 RRQ "pxelinux.0" octet tsize 0
    12:34:53.441801 IP 172.16.1.202.vrtl-vmf-sa > tools.dmz.tuxme.dk.tftp:  27 RRQ "pxelinux.0" octet tsize 0
    

    tsize 0表示客户端期望 TFTP 传输文件大小总计为 0 字节。

    您是否知道 UEFI PXE 规范(存在于 UEFI 2.3 版左右)要求 DHCP 服务器告诉 PXE 客户端它应该加载的文件的大小?如果您使用的是 ISC DHCP 服务器,则所需的选项可以指定为

    option boot-size <size value>; 
    

    应该是引导文件的<size value>大小(以字节为单位)除以 512,然后向上取整。

    • 3
  2. Алексей
    2022-03-31T04:54:58+08:002022-03-31T04:54:58+08:00

    如果我正确理解了这个问题,我遇到了类似的问题。

    PXE 服务器运行顺利,没有问题,tftp 因“PXE-E32: TFTP Open timeout”而掉线

    经过长时间搜索后的解决方案是更改 tftp 配置 /etc/default/tftpd:

    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/srv/tftp"
    TFTP_ADDRESS="0.0.0.0:69"
    TFTP_OPTIONS="--secure -l -v -r blksize"
    

    我在 tftp 选项中添加了“-r blksize”。

    • -1

相关问题

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 奇怪的路由器与centos 6一起工作[关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve