Ubuntu 22.04下如何通过addr-gen-mode=eui64配置全局静态EUI-64格式IPv6?
Ubuntu 22.04下如何通过addr-gen-mode=eui64配置全局静态EUI-64格式IPv6?
我来帮你梳理下当前的问题:你想要在Ubuntu 22.04上生成一个稳定的、基于EUI-64格式的全局IPv6地址,用来远程SSH访问,但之前试了各种配置后,仍然只有临时IPv6地址。大概率是你混用了不同配置工具的设置,或者某些关键参数没配置对,下面是一步步的解决方案:
一、先统一配置工具,避免冲突
Ubuntu 22.04默认用NetworkManager管理网络,你之前同时修改了netplan和NetworkManager的配置,很容易导致设置互相覆盖。先把netplan的配置还原:
- 打开你的netplan配置文件(通常在
/etc/netplan/目录下,比如01-network-manager-all.yaml) - 删掉之前添加的所有IPv6相关配置,恢复成默认的NetworkManager托管模式:
network: version: 2 renderer: NetworkManager - 执行
sudo netplan apply让配置生效。
二、用NetworkManager配置EUI-64地址生成
这是最直接且不易出错的方式:
- 先查看你的网络连接名称:执行
nmcli con show,找到你正在使用的WiFi/有线连接名称(比如叫HomeWiFi) - 进入该连接的交互编辑模式:
nmcli con edit "HomeWiFi" - 在交互界面里依次输入以下命令(每输完一条按回车):
# 设置地址生成模式为EUI-64 set ipv6.addr-gen-mode eui64 # 关闭隐私扩展,避免生成临时地址(如果不需要临时地址的话) set ipv6.ip6-privacy 0 # 开启路由通告接收!这是关键!你之前设为false会导致无法获取ISP的全局前缀 set ipv6.accept-ra true # 保存配置并退出 save quit - 重启NetworkManager让配置生效:
sudo systemctl restart NetworkManager
三、调整sysctl参数,固化配置
编辑/etc/sysctl.d/10-ipv6-privacy.conf,确保隐私临时地址不会干扰:
net.ipv6.conf.all.use_tempaddr = 0 net.ipv6.conf.default.use_tempaddr = 0 # 删掉之前设置的accept_ra=0,否则无法获取全局前缀 net.ipv6.conf.<你的网卡名>.autoconf = 1 net.ipv6.conf.<你的网卡名>.use_tempaddr = 0
执行sudo sysctl --system让sysctl配置立即生效。
四、验证配置是否成功
执行ip addr show <你的网卡名>(比如ip addr show wlan0),查看输出里的IPv6地址:
- 你会看到一个全局IPv6地址,格式为
[ISP提供的静态前缀]:[EUI-64后缀],并且valid_lft和preferred_lft都显示为forever,这就是你要的静态EUI-64全局地址。
补充说明
- 为什么之前配置失败?你之前把
accept-ra设为false,这会让系统拒绝接收路由器的IPv6路由通告,自然无法获取ISP的全局前缀,也就生成不了全局EUI-64地址。 - 关于手动设置静态IPv6:如果ISP前缀确实是静态的,你也可以手动配置完整的IPv6地址,格式为
[ISP前缀]:[EUI-64后缀]/64。EUI-64后缀是从MAC地址转换来的——把MAC地址中间插入FFFE,再翻转第七位(比如MAC是aa:bb:cc:dd:ee:ff,转换后是a8:bb:cc:ff:fe:dd:ee:ff)。不过自动生成更省心,只要前缀不变,地址就不会变。
备注:内容来源于stack exchange,提问作者hamagust
相关产品推荐
相关产品推荐

