我看到有很多关于静态 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-mode
为stable-privacy
addr-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>
仍然不是完全静态的但是可预测的,并且当前缀改变时我不必重新配置每个服务器。
希望这可以帮助。