如何通过“addr-gen-mode=eui64”有效地设置全局静态ipv6?

如何通过“addr-gen-mode=eui64”有效地设置全局静态ipv6?

我看到有很多关于静态 IPv6 和隐私的问题(例如这里这里这里这里这里),我相信我已经尝试了大多数可用的解决方案(或者至少是那些我能理解的解决方案)。但似乎旧帖子包含了一些过时的信息,即使在实施了它们提供的解决方案后,我也没有让 UIE-64 地址生成格式工作。所以我想知道当前设置静态 ipv6 的最佳实践是什么,或者我遗漏了什么,导致 UIE-64 地址生成无法在我的 Ubuntu 22.04 PC 上运行。


背景:我想通过 SSH 远程访问 Ubuntu PC。这是一个我已经知道的 Ubuntu 22.04.3 LTS 系统:

  • 我的 ISP 分配动态 IP(ipv4)。
  • 看来 ipv6 的前缀是静态的。
  • 在路由器菜单中,我看到 dhcp6 被禁用。

目前,我已经能够使用临时 IP(ipv4 和 ipv6)在我的本地网络中通过 ssh 访问它,方法是物理访问 PC(并输入ip addr),复制 IP 并使用它来远程访问……所以,虽然这个想法是让它作为无头服务器工作,但我还不能这样做……我知道其他方法,比如从远程 PC 搜索我网络中的所有 IP(至少对于 ipv4),但我更愿意让它保持静态。因为稍后我想从本地网络之外访问它。

我注意到,此 Ubuntu 版本已将 ipv6 隐私设置设为默认设置,尽管较早的帖子/问题称其默认为关闭。因此,ipv6 会定期更改(默认为一天),并在初始常量前缀后包含随机字符和数字。

所以我已经学到了很多关于 ipv4、Ipv6、UIE-64 模式等的知识,但看来我对于这个主题还有很多遗漏。


我很困惑,因为有几种替代(互补?冲突?)方法来设置配置……但我尝试了以下方法:

  • 编辑<networkName>.nmconnection文件/etc/NetworkManager/system-connections/。如所述这里、编辑
    • [ipv6]
    • 修改addr-gen-modestable-privacyaddr-gen-mode=eui64
  • nmcli connection edit <network>按照指示这里
    • set ipv6.addr-gen-mode 0
    • set ipv6.ip6-privacy 1
  • 編輯 /etc/sysctl.d/10-ipv6-privacy.conf
    • net.ipv6.conf.all.use_tempaddr = 0
    • net.ipv6.conf.default.use_tempaddr = 0
    • net.ipv6.conf.<wlanCode>.accept_ra = 0
    • net.ipv6.conf.<wlanCode>.autoconf=1
    • net.ipv6.conf.<wlanCode>.use_tempaddr=2
    • 我也尝试过不添加最后两行,或者在最后一行添加 0 ( net.ipv6.conf.<wlanCode>.use_tempaddr=0)
  • 编辑.yaml文件/etc/netplan(如所述这里这里
    • network: * version: 2 * ethernets: * <WLancode>: * dhcp6: false * ipv6-privacy: off * ipv6-address-generation: eui64 * accept-ra: false * renderer: NetworkManager

我看到一些帖子在文件中手动设置静态全局 ipv6 地址netplan。我还没有尝试过……它可以是任意的最终值吗(我得到的前缀必须与 ISP 提供的前缀相同)?我读到了一些关于从 MAC 地址中扣除非临时 Ipv6 的内容……

我知道我们不一定需要停用 ipv6-private,因为我们可以同时拥有随机/临时和静态全局 ipv6。我在将 address-generation 设置为 eui64 后添加了此类配置,但不起作用,也没有解决问题……

系统已重启,我确认重启后上述所有定义都已保存。但使用ip addr,我发现所有 ipv6 地址(除本地链接地址外)都是临时的,它们已valid_lft设置在sec,而不是forever

我的理解是,通过上述配置,我得到了一个与 MAC 关联的 IPv6 链接(我得到了一个不同的链接 IPv6,它发生了变化),但不是全局静态 IPv6,可能是因为默认的隐私设置......


那么,如何在我的 Ubuntu 22.04 上启用全局 eui-64 ipv6 的生成?从我查阅过的帖子的讨论来看,我想可以从 Ubuntu 方面解决这个问题……但如果最终不是与 Ubuntu 相关的问题,我很抱歉……我可能遗漏了路由器或 ISP 方面的一些阻止此类设置的内容,因为我对这个主题的了解还很基础……

任何帮助都将受到赞赏。

答案1

我能理解你的痛苦,因为我和你有同样的感受:)

我的生活变得更加复杂,因为我必须在某些内部 vm 服务器上启用 IP 转发,并根据可能随时更改的委托 IPv6 前缀分配静态 IP 地址。

经过大量的研究,其中大部分都是循环且令人沮丧的,我终于找到了灵丹妙药;

在 netplan 中,我添加了以下行

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
      ipv6-address-token: "::ace:face"
      addresses:
        - <ipv4 static address>
      nameservers: ...

此外,在 /etc/sysctl.conf 中添加了以下行

net.ipv6.conf.eth0.accept_ra=2

sysctl conf 中的这一行强制接受路由器公告 (ra),而不管 ip 转发设置如何。这很重要,因为 ra 会告知我们委托的前缀。

netplan 中的 ipv6 address token template 行用于生成使用路由器提供的前缀和我们指定的地址来生成地址的 ipv6 地址。因此,我们最终得到以下形式的地址

<delegated prefix>::ace:face/<bit length of netmask>

仍然不是完全静态的但是可预测的,并且当前缀改变时我不必重新配置每个服务器。

希望这可以帮助。

相关内容