修复 RackNerd 服务器 IPv6 连接问题
2023-01-18 注:服务器近期更换到 Debian 11 系统,出现了同样的问题。此方法依然有效。
2023-06-03 更新:关闭 IPv6 隐私扩展的解决方法。
这两天简单鼓捣了一下去年黑五闪购买来吃灰的 RackNerd 服务器,发现服务器的 IPv6 默认配置下工作不正常,具体表现在其能够正确响应外界对其IPv6地址的请求(搭建 nginx 服务器可访问),但是却无法访问任何外界 IPv6 资源(ping6 不通 Google)。
服务器位于 Los Angeles DC02 (Multacom) 机房,使用 Ubuntu 20.04 镜像。
问题排查与解决
使用 ip addr
查看服务器现有IP:(为了保护隐私,部分地址被隐藏)
1 |
|
10行是服务器的 IPv4 地址,14行是服务器的 IPv6 地址,16行是一个 IPv6 内网地址,这些条目都符合预期。但是在 12 行有一个未知的外网 IPv6 地址,并且其并非固定地址,而像是被分配的(valid_lft 不是 forever),怀疑就是这个 IP 导致了连接问题。
使用 ifconfig eth0 inet6 del [问题地址]/64
指令删除这个问题地址,删除后服务器的对外 IPv6 连接恢复正常。
但是,十几秒之后,对外 IPv6 连接再次无法正常工作,发现这个问题地址又被重新分配并出现在了 ip addr
查询结果里。
2023-06-03 更新:建议使用下一节中关闭 IPv6 隐私扩展的方法解决问题,本节剩余内容仅供存档。
这个地址是被分配的,且删除后又被重新分配,则必定是有服务在请求分配,大概是与 IPv6 自动配置有关的服务。经过一番搜索,找到了关闭 IPv6 自动配置的办法:
1 |
|
执行语句后再删除问题地址,发现对外 IPv6 连接恢复正常,且不再有新地址添加回来。
这条指令重启后将会失效,如想使其永久生效,需要将其加入到 /etc/sysctl.conf
中,与配置 BBR 的过程类似。
1 |
|
2023-06-03 更新:关闭 IPv6 隐私扩展
RFC 4941 规定了 IPv6 隐私扩展标准,其在无状态地址自动配置的基础上通过混淆生成与自身 MAC 地址无关的 IPv6 地址,确保对外访问不会暴露自身的 IP 地址。
可能是由于 RackNerd 机房内路由器的错误配置,服务器使用这一 IP 地址无法对外访问,这是本次故障的根本原因。通过关闭内核中 IPv6 隐私扩展的功能即可解决这一问题。
1 |
|