首页 > 其他分享 >跟思兼学Klipper(32):修复 CrealityOS IP 地址经常改变的问题

跟思兼学Klipper(32):修复 CrealityOS IP 地址经常改变的问题

时间:2024-06-14 21:21:50浏览次数:31  
标签:租期 CrealityOS 跟思 Klipper IP 报文 IP地址 DHCP udhcpc

前言

原创文章,转载引用务必著名链接,水平有限,如有疏漏,欢迎指正交流。

文章如有更新请访问 DFRobot 社区cnblogs 博客园,前者内容较全,后者排版及阅读体验更佳。

使用 K1C 时有个问题,过个一天或者一段时间再开机它的IP地址会发生改变,很是恼人。本文试图探究可能的原因及多种解决方法。

软硬件测试环境:

  • Creality K1C 3D 打印机
  • CrealityOS,以下简称CoS

本文涉及的内容:

  • DHCP 基础知识

1、常见解决方法

  1. 使用 mdns

    CoS会启动一个精简版的 mdns 服务,地址为 [hostname].local,不论设备 IP 地址如何改变,此域名不变。目前测试 OrcaSlicer、MobaXterm 可以使用,但是网页打不开也 ping 不通。

  2. 绑定 MAC 地址

    在路由器中,将设备网卡 MAC 地址和指定 IP 地址绑定。但是有些朋友没有路由器管理权。

  3. 设置静态 IP 地址

    在设备上设置静态 IP 地址而非从 DHCP 服务器上自动获取 IP 地址,但是存在设备地址冲突的可能,同时更换不同网段的网络时会出问题。

2、可能的原因

查看 CoS 相关服务,/etc/init.d/S44wifi_bcm_up ——> /usr/bin/wifi_up.sh ,可以看到 CoS 使用 udhcpc -i wlan0 -x hostname:$(hostname) & 来从 DHCP 服务器处获取网络配置。我默认由 BusyBox 自带的 udhcpc 背锅,怀疑没有正确续约。当然之前也怀疑过无线网卡 MAC 地址变化导致,观察后排除。

3、可能的解决方法:使用 dhclient 取代 udhcpc

前提:需要启用 root 后安装 chs,并安装 entware 软件仓库

# 安装 dhclient
sed -i.bak 's|https\?://bin.entware.net|http://mirrors.cernet.edu.cn/entware|g' /opt/etc/opkg.conf
opkg update
opkg install isc-dhcp-client-ipv4

# 创建租约文件及 resolv.conf 软链接
mkdir /opt/var/db/ && touch /opt/var/db/dhclient.leases
ln -sf /etc/resolv.conf /opt/etc/resolv.conf

# 修改默认 dhcp 客户端程序
# 注释 udhcpc -i wlan0 -x hostname:$(hostname) &
# 在其下添加一行:/opt/sbin/dhclient -nw -v --no-pid wlan0
sed -i '/hostname:/s/^/# /' /usr/bin/wifi_up.sh
sed -i '/hostname:/a \    /opt/sbin/dhclient -nw --no-pid wlan0' /usr/bin/wifi_up.sh

# 重启生效

4、与 DHCP 服务器交互过程

root@K1Max-5BC9 /root [#] dhclient -v wlan0
Internet Systems Consortium DHCP Client 4.4.3-P1
Copyright 2004-2022 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/wlan0/fc:ee:28:01:5b:c9
Sending on   LPF/wlan0/fc:ee:28:01:5b:c9
Sending on   Socket/fallback
# Client:DHCP 发现
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6
# Server: DHCP 提供
DHCPOFFER of 192.168.0.118 from 192.168.0.1
# Client: DHCP 请求/续租
DHCPREQUEST for 192.168.0.118 on wlan0 to 255.255.255.255 port 67
# Server: DHCP 确认
DHCPACK of 192.168.0.118 from 192.168.0.1

bound to 192.168.0.118 -- renewal in 3173 seconds.

udhcpc 是一个简单的 DHCP 客户端,用于在 Unix-like 系统上自动获取网络配置。以下是 udhcpc 续租 IP 地址的基本步骤和原理:

  1. DHCP 发现(DHCPDISCOVER)

- 当 udhcpc 启动时,它会发送一个 DHCPDISCOVER 广播消息,以发现网络上可用的 DHCP 服务器。

  1. DHCP 提供(DHCPOFFER)

- DHCP 服务器收到 DHCPDISCOVER 消息后,会发送一个 DHCPOFFER 消息,提供给客户端一个 IP 地址和其他网络配置信息。

  1. DHCP 请求(DHCPREQUEST)

- udhcpc 收到 DHCPOFFER 消息后,会发送 DHCPREQUEST 消息,请求分配提供的 IP 地址。

  1. DHCP 确认(DHCPACK)

- 如果 DHCP 服务器确认请求,它会发送一个 DHCPACK 消息,正式分配 IP 地址和相关配置。

  1. 续租(DHCPREQUEST)

- 在租期过半(通常为50%)时,udhcpc 会自动发送 DHCPREQUEST 消息给之前分配 IP 地址的 DHCP 服务器,请求续租当前的 IP 地址。

  1. 续租成功或失败

- 如果 DHCP 服务器响应 DHCPACK,表示续租成功,租期将被重置。
- 如果 DHCP 服务器响应 DHCPNACK,表示续租失败,udhcpc 将重新发送 DHCPDISCOVER 消息以获取新的 IP 地址。

  1. 租期结束

- 如果在租期结束前没有收到 DHCP 服务器的响应,udhcpc 将放弃当前 IP 地址,并重新进入 DHCP 发现阶段。

  1. 释放 IP 地址(DHCPRELEASE)

- 如果用户希望主动放弃 IP 地址,udhcpc 可以发送 DHCPRELEASE 消息给 DHCP 服务器,释放当前的 IP 地址。

udhcpc 的续租行为通常是自动的,不需要用户干预。但是,用户可以通过配置文件或命令行参数来调整续租行为,例如设置租期长度或禁用自动续租。

如果您发现 udhcpc 没有续租 IP 地址,可能的原因包括:

- DHCP 服务器没有响应续租请求。
- 网络配置问题导致 udhcpc 无法与 DHCP 服务器通信。
- udhcpc 配置错误或版本问题。
- 系统防火墙或安全设置阻止了 DHCP 通信。

【以上内容部分由 kimi 生成】

5、leases 租约文件内容


root@K1Max-5BC9 /root [#] cat /opt/var/db/dhclient.leases
lease {
  interface "wlan0";
  fixed-address 192.168.0.118;
  option subnet-mask 255.255.255.0;
  option routers 192.168.0.1;
  option dhcp-lease-time 7200;
  option dhcp-message-type 5;
  option domain-name-servers 223.5.5.5,114.114.114.114;
  option dhcp-server-identifier 192.168.0.1;
  renew 5 2024/06/14 00:55:30;
  rebind 5 2024/06/14 01:50:31;
  expire 5 2024/06/14 02:05:31;
}

renew、rebind 和 expire 概念介绍

由上面内容可知路由器的 DHCP 服务租约时长为 7200s,即 2h。

在DHCP(动态主机配置协议)中,renewrebindexpire是与IP地址租期管理相关的三个概念,它们的含义如下:

  • renew:当DHCP客户端的IP地址租期达到50%时,会自动以单播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);如果收到DHCP NAK报文,则重新发送DHCP DISCOVER报文请求新的IP地址。
  • rebind:当DHCP客户端的IP地址租期达到87.5%时,如果仍未收到DHCP服务器的应答,DHCP客户端会自动以广播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);如果收到DHCP NAK报文,则重新发送DHCP DISCOVER报文请求新的IP地址。
  • expire:如果DHCP客户端的IP地址租期到期时都没有收到服务器的回应,客户端将停止使用此IP地址,并重新发送DHCP DISCOVER报文请求新的IP地址。

renewrebind都是DHCP(动态主机配置协议)中的概念,它们的主要区别在于触发的时间和发送的目标服务器不同。

renew报文是在DHCP客户端的IP地址租期达到50%时触发的,此时客户端会以单播的方式向最初提供IP地址的DHCP服务器发送renew报文,请求延长IP地址的租期。如果客户端在租期的50%时发送了renew报文,但没有收到服务器的响应,那么它将在租期的87.5%时触发rebind报文。

rebind报文是在renew报文没有得到响应的情况下触发的,客户端会以广播的方式向任何可用的DHCP服务器发送rebind报文,请求延长IP地址的租期。

总的来说,renew报文是在租期的中期发送给特定的服务器,而rebind报文是在renew报文没有得到响应时发送给所有可用的服务器。这样可以确保客户端在IP地址租期到期之前能够及时续租,避免IP地址被收回。

【以上内容部分由 豆包 生成】

Bonus

entware 的路径问题

我们发现 opkg 安装的软件包都在 /opt 目录,配置文件亦如是,导致很多软件从 /etc 载入默认配置时报错。考虑和 entware 有关

查看 Creality-Helper-Script/files/entware/generic.sh 可知如下:

ln -nsf /usr/data/opt /opt
# echo '#!/bin/sh\n/opt/etc/init.d/rc.unslung "$1"' > /etc/init.d/S50unslung
# 这里有错误,应该为如下内容:
echo -e '#!/bin/sh\n/opt/etc/init.d/rc.unslung "$1"' > /etc/init.d/S50unslung

ln -sf /etc/localtime /opt/etc/localtime
ln -sf /etc/resolv.conf /opt/etc/resolv.conf
# 目录则是额外 -n 参数 

其他调试命令

# 时区设置:/etc/localtime
# 搜索并关闭进程
ps aux |grep udhcpc
kill [pid]
# 测试 DNS 解析
nslookup example.com

文档链接

  1. isc-dhcp-client-ipv4
  2. Linux dhclient命令教程
  3. https://man.archlinux.org/man/dhclient.8.en

标签:租期,CrealityOS,跟思,Klipper,IP,报文,IP地址,DHCP,udhcpc
From: https://www.cnblogs.com/sjqlwy/p/18248675/cos_fix_ip

相关文章

  • klipper & orange pi zero 2w安装记录
    官网下载ubuntu镜像并使用烧写工具(例如Win32DiskImager)烧写至TF卡中根据官网的描述页面中使用USB转串口连接UART0打开PuTTY并使用serial连接并进入命令行界面使用命令nmtui连接wifi并编辑wifi,将IPV4设置为manual,注意,有可能因为编辑了wifi之后上不了网,只能ping通内网IP注......
  • 跟思兼学Klipper(30):使用辅助宏调整3D打印机无感归位堵转检测阈值
    又名《调整堵转检测阈值降低创想三维K1C打印机无感归位啪啪声》前言原创文章,转载引用务必著名链接,水平有限,如有疏漏,欢迎指正交流。文章如有更新请访问DFRobot社区及cnblogs博客园,前者内容较全,后者排版及阅读体验更佳。手中的创想三维K1C3D打印机目前使用很满意。如果......
  • 跟着思兼学习Klipper(29):行空板遇上Klipper之一: 安装Klipper全家桶
    前言原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎交流指正。文章如有更新请访问DFRobot社区及cnblogs博客园,前者内容较全,后者排版及阅读体验更佳。先有三后有一,你说奇怪不奇怪。去年Ash老板问我行空板能否安装使用Klipper全家桶作为3D打印机上位机使用,答案......
  • 跟着思兼学习3D打印 Klipper 固件系列文章合集
    (01)XY电机方向调整新方法|使用force_move快速校准CoreXY电机方向(02)打印平台中心校准与调整|校准打印平台中心,最大化打印尺寸(03-1)加速度计与输入整形器|1,推荐。固件烧录,查找Klipper引脚定义,加速度计采样(03-2)番外1-自定义stm32f103bootloader|2编译st......
  • 跟着思兼学习Klipper(26): 大卸八块 Klipper 远程控制实验汇总
    又名《给创想三维K1找个"强力外援"》前言原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎交流指正。文章如有更新请访问DFRobot社区及cnblogs博客园,前者内容较全,后者排版及阅读体验更佳。我们约定:主板指MCU部分,上位机指运行Klippy的MPULinux部分。玩了好......
  • 华为跟思科配置VLAN与trunk模式切换
    华为交换机跟思科交换机设置VLAN跟trunk与access模式切换在原有交换机基础上配上vlan,vlan是一种隔离技术1.隔离广播   2.隔离故障配置交换机(华为)1. sy回车,进入配置模式undo in en   关闭英文提示,好看一点,可以不打。实际工作中,不打。2. 分别输入vlan10 ......
  • 跟着思兼学习Klipper(25)提高 Klipper 进程优先级减少报错
    前言原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎指正交流。文章如有更新请访问DFRobot社区或者cnblogs博客园。欢迎对Klipper固件,以及对改版CNC加工的Voron三叉戟、v0、v2.4感兴趣的朋友加群交流(QQGroup:490111638)由于Klipper主要采用滚动更新机制(小......
  • 跟着思兼学习Klipper(24): 红外遥控3D打印机
    原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎指正交流。文章如有更新请访问DFRobot社区或者cnblogs博客园。书接上回,这次补完红外遥控的部分。6、番外:板载USER_LED的使用上面3.1pwr_status.sh说到启动后会控制板载用户可控LED间隔0.5s闪烁。但是在BTT......
  • [3d打印]klipper固件设置温度塔 TuningTower命令
    省流:TUNING_TOWERCOMMAND="SET_HEATER_TEMPERATUREHEATER=extruder"PARAMETER=TARGETSTART=开始温度STEP_DELTA=每次减少/增加多少度STEP_HEIGHT=多少高度改变一次 例:下列命令表示从高度0开始,起始温度250度,高度每隔5mm温度降低10度TUNING_TOWERCOMMAND="SET_......
  • 3d打印机添加AI炒面检测服务 klipper+fluidd ubuntu本地部署TheSpaghttiDetective Ser
    炒面检测(TheSpaghettiDetective)介绍:炒面检测服务可以借助打印机的摄像头,检测打印是否炒面(打印失败)并作出提醒或停止打印的一种服务,该服务由服务器和客户端组成客户端支持两种: ocoprint或klipper服务器也有两种:ocobi官方提供的有限免费服务......