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 / 问题 / 561407
Accepted
DrP3pp3r
DrP3pp3r
Asked: 2020-01-11 05:13:01 +0800 CST2020-01-11 05:13:01 +0800 CST 2020-01-11 05:13:01 +0800 CST

udhcpc:如果 DHCP 服务器提供 IP 地址而不是主机名,则 DHCP 选项 66 变量 tftp 包含“错误”

  • 772

我正在开发一个嵌入式 Linux,它使用BusyBox和udhcpc(BusyBox的一部分)作为其 DHCP 客户端。

如果我将 DHCP 服务器配置为在 DHCP 选项 66 中提供 FTP 服务器,那么只要选项包含主机名(可能是有效的 DNS 名称?!),一切都很好(即其中的tftp变量包含配置的值)。/etc/udhcpc.script如果选项包含 IP 地址,则变量tftp包含值“bad”。

这种行为的原因和意义是什么?

我在udhcpc文档中找不到有关此行为的任何信息(https://udhcp.busybox.net/README.udhcpc、https://udhcp.busybox.net/ ) ,也没有在 Google 上获得任何有用的搜索结果。

RFC2132不包含在此选项中不允许 IP 地址的任何限制(据我了解)。

有什么方法可以从 udhcpc 中的选项 66 获取 IP 地址?

dhcp busybox
  • 1 1 个回答
  • 864 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2020-01-11T05:30:00+08:002020-01-11T05:30:00+08:00

    更新:使用单独的 TFTP 服务器通常不需要选项 150(或 66),如果在 DHCP 服务器上可配置,原始siaddr字段应该足够了,见最后。

    RFC 5859说明了这一点:

    抽象的

    本备忘录记录了“TFTP 服务器地址”
    选项的现有用法。当前使用的选项编号为 150。

    [...]

    有两种普遍接受的方法可以通过 DHCP 发现此服务器;DHCP 标头[RFC2131]中的“sname”字段和“TFTP 服务器名称”选项 (66) [RFC2132]。但是,这两个信息源都包含 TFTP 服务器的主机名。然后必须将该主机名转换为 IP 地址。实现这一点的常用方法是 DNS [RFC1034]。

    [...]

    1. TFTP 服务器地址选项定义

    TFTP 服务器地址选项是一个 DHCP 选项 [RFC2132]。该选项包含一个或多个客户端可以使用的 IPv4 地址。此选项的当前用途是通过 TFTP 从 VoIP 服务器下载配置;但是,该选项可用于联系 VoIP 配置服务器以外的其他目的。

    选项的格式是:

    Code   Len   IPv4 Configuration Server Address(es)
    +-----+-----+-----+-----+-----+-----+
    | 150 |  n  |     IPv4 address      | ...
    +-----+-----+-----+-----+-----+-----+
    
                  Figure 1
    

    选项最小长度 (n) 为 4。

    [...]

    所以我只能告诉你问题的答案是:不,你不能为此使用选项 66,你应该支持 DHCP 选项 150或指向 TFTP 服务器的“下一个服务器”配置的siaddr字段,但是这个 RFC 提到一些有限的 DHCP 服务器只会在这个字段中返回自己。


    更新(澄清解决方案可能比想象的要简单):

    如果 DHCP 服务器(例如:ISC dhcp,或者 busybox 自己的udhcpd )支持提供正确的siaddr(即不同于 DHCP 服务器本身),那么它当然已经被udhcpcd客户端支持:

    环境变量的参数如下:

    $HOME     - The set $HOME env or "/"
    

    [...]

    siaddr        - The bootp next server option
    

    [...]

    到目前为止,我一直在使用siaddr来通过 DHCP 使用单独的 TFTP 服务器启动 x86 系统,例如直接安装到 Debian 网络安装。我不知道也不需要选项 66 或 150。

    • 2

相关问题

  • 如何使 mkinitcpio busybox ash 源 /etc/profile?

  • 使用“cat”克隆块设备

  • busysbox 重启在初始化脚本中不起作用

  • 此 dhcp 错误缺少什么?

  • 为什么我的交换机没有从指定的池中获取地址

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