首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPv6 wide-dhcpv6 6-客户机随机间隔失败。

IPv6 wide-dhcpv6 6-客户机随机间隔失败。
EN

Unix & Linux用户
提问于 2023-04-14 22:12:35
回答 2查看 43关注 0票数 1

首先,系统运行正常,并成功地协商了一个IPv6地址并按预期操作。

一段时间后,系统停止发送DHCP请求,IPv6在租约超时后失败,但IPv4继续运行。可以通过重新启动wide dhcpv6 6-客户端服务来恢复系统。这表明问题在于这项服务,但我的互联网搜索还没有找到根本原因。记录了以下消息:

代码语言:javascript
复制
dhcp6c[]: client6_send: transmit failed: Network is unreachable

我还没有找到任何其他相关的错误信息。

虽然错误消息表明网络层有问题,但重新启动清除问题的服务会表明情况并非如此。随着IPv4继续运行,由于几乎所有的IPv6服务都是双重堆叠的,尚不清楚这种情况发生的频率。它今天被手动恢复,最后一次恢复是在两周前,但是日志显示它在不到5天的时间内就失败了。

代码语言:javascript
复制
System Description:    Debian GNU/Linux 11 (bullseye)
DHCPc6 version: wide-dhcpv6-client/stable,now 20080615-23 amd64 

这个问题的根本原因似乎是,如果网络层没有做好准备,那么服务就无法应付,并且会出错。可以通过重新启动服务来解决这个问题,然后恢复正常运行:

代码语言:javascript
复制
systemctl restart wide-dhcpv6-client.service

网络上似乎很少有这方面的报道。

此外,如果服务在网络准备好之前就启动了,则会看到一个不同的错误,即更多的终端,吸引更多的注意和更明显的修复:

代码语言:javascript
复制
wide-dhcpv6-client[]:  failed!
systemd[1]: wide-dhcpv6-client.service: Control process exited, code=exited, status=1/FAILURE
systemd[1]: wide-dhcpv6-client.service: Failed with result 'exit-code'.
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2023-05-03 13:07:33

虽然不是修复,但我已经实现了一个解决方案,直到维护人员修复了这个问题。这是非常初级的,但暂时可以。我在系统启动时将此脚本作为服务运行。

代码语言:javascript
复制
import time
import subprocess
import select

filename="/var/log/syslog"

action_map = {
    "client6_send: transmit failed: Network is unreachable": {"action": "sudo systemctl restart wide-dhcpv6-client.service",
                                                              "cooldown": 5},
    "wide-dhcpv6-client.service: Control process exited, code=exited, status=1/FAILURE": {"action": "sudo systemctl start wide-dhcpv6-client.service",
                                                              "cooldown": 5}
}


def monitor(filename):
        f = subprocess.Popen(['tail','-F',filename],\
                        stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        p = select.poll()
        p.register(f.stdout)
        while True:
                if p.poll(1):
                        check_output(str(f.stdout.readline()))


def check_output(syslog_line):
    for action_key in action_map.keys():
        if action_key in syslog_line:
            subprocess.Popen([action_map[action_key]['action'].split()],\
            stdout=subprocess.PIPE,stderr=subprocess.PIPE)
            time.sleep(action_map[action_key]['cooldown'])
            print("Ran:", action_map[action_key]['action'])

print("Starting syslog_actioner")
monitor(filename)
票数 0
EN

Unix & Linux用户

发布于 2023-05-03 17:05:43

如果IPv6没有网络可达性,那么它的链路本地地址可能会出现问题,因为即使还没有分配全局单播或唯一本地地址,主机也应该使用它的链路本地地址(主机主要使用EUI-64自动配置)与路由器连接。

当您看到上述错误消息时:

  1. 是否有主机的链路本地地址(FE80::/10)?
  2. 您是否也可以按照EUI-64 (拆分mac + fffe +7位翻转)的格式检查有关地址?参考文献
  3. 你能ping6路由器和主机的(平本身)链路-本地地址吗?
  4. 您是否尝试过使用静态链接本地地址?

如果仍然不清楚出了什么问题,那么检查是否没有设置无状态地址自动配置(SLAAC),只是为了确保它没有中断与DHCP6客户端:

  • 如果使用netctl,会否确保没有配置stateless参数?
  • 如果没有iface eth0 inet6 auto设置,可以检查主机的接口配置吗?

可选:

  • 从IPv6消息的角度来看,路由器的日志中有什么?是否存在反映主机链接-本地或全球/本地单播地址的通信?
  • 您会分享Wireshark捕获您的主机试图发送的与IPv6相关的内容吗?

尽管在主机上使用IPv6地址配置还有另一种方法,称为SLAAC,所以您根本不需要使用DHCP,而且通过使用它,您在地址配置方面也减少了网络利用率(对于负载大量主机的网络来说很好)。但是,如果您需要获得DHCP选项值(如DNS ),则仍然需要一个DHCP服务器。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/742943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档