我正在尝试设置我的桌面以生成并使用 IPv6 的临时地址,但无论我做什么都不起作用。我的互联网路由器由我的提供商管理,所以我无法影响路由器广告。AdvManagedFlag 和 AdvOtherConfigFlag 都设置为“on”,并通过 dhcpv6 提供地址。我已使用 sysctl 设置(并应用设置):
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
net.ipv6.conf.eth0.use_tempaddr = 2
net.ipv6.conf.all.temp_prefered_lft = 86400
net.ipv6.conf.eth0.temp_prefered_lft = 86400
net.ipv6.conf.all.temp_valid_lft = 86600
net.ipv6.conf.eth0.temp_valid_lft = 86600
虽然我有一个 Debian 系统,但我使用 NetworkManager 或 systemd-networkd 进行网络配置。这是我的 systemd 配置:
[Match]
Name=eth0
[Network]
#DHCP=yes
DHCP=ipv6
Address=192.168.114.10/24
Address=fd3e:64c2:2817:d97e::a/64
Gateway=192.168.114.1
DNS=192.168.114.3
DNS=fd3e:64c2:2817:d97e::3
DNSSEC=false
DNSSECNegativeTrustAnchors=tr-home.de
Domains=tr-home.de ~.
# overrides setting via sysctl
IPv6PrivacyExtensions=kernel
ManageTemporaryAddress=true
IPv6AcceptRA=true
LinkLocalAddressing=ipv6
IPv6LinkLocalAddressGenerationMode=eui64
[IPv6AcceptRA]
UseDNS=false
Token=eui64
[DHCPv6]
UseDNS=false
使用这些设置根本不会生成 tempaddr。
作为替代方案,我使用 NetworkManager。我使用 IPv6 ==> 隐私选项卡下的设置将其设置为“标准”(结果是根本没有临时地址)或“首选临时地址”(结果是地址生成在几分钟后开始延迟,但它们的 preferred_lft 只有 1 秒,这样每秒都会重新注册相同的地址。这会导致 avahi 不断注册和取消注册地址的问题,并与 chromium 混淆,因为浏览器会混淆使用哪个地址并不断切换。)
我没有找到可以告诉 NetworkManager 使用更长的首选寿命的设置。
而且 Linux 似乎根本不喜欢将隐私扩展与 dhcpv6 结合使用。
隐私扩展的第二个问题与 NFS 有关。我根据固定 IP 地址配置了 NFS 共享。显然,这在不断变化的临时地址下无法工作。因此,我使用额外的 IPv6 ULA 地址进行内部网络通信。但启用隐私扩展后,也会为 ULA 地址生成临时地址。因此,我的服务器共享再次无法使用。
我需要的是一种设置,其中 ULA 仅在固定地址上,而全局地址由路由器广告生成。通过 dhcpv6 提供附加地址对我来说没有问题,因此可以使用 dhcpv6,但我仍然想使用 tempaddr。
对我来说,这看起来像是 IPv6 设置中的一个错误,但也许我遗漏了什么。有没有办法正确设置它?对我来说最令人困惑的是,使用 dhcpv6 时不会生成任何 tempaddr。
使用 radvdump 显示的 RA:
interface wlan0
{
AdvSendAdvert on;
# Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
AdvManagedFlag on;
AdvOtherConfigFlag on;
AdvReachableTime 3600000;
AdvRetransTimer 0;
AdvCurHopLimit 64;
AdvDefaultLifetime 1800;
AdvHomeAgentFlag off;
AdvDefaultPreference medium;
AdvSourceLLAddress on;
RDNSS 2a02:80xx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
{
AdvRDNSSLifetime 300;
}; # End of RDNSS definition
prefix 2a02:80xx:xxxx:xxxx::/64
{
AdvValidLifetime 0;
AdvPreferredLifetime 0;
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
}; # End of prefix definition
route ::/0
{
AdvRoutePreference medium;
AdvRouteLifetime 1800;
}; # End of route definition
}; # End of interface definition
是的,我需要它——我想要我的隐私。
我不需要 dhcpv6,但是路由器的 ra 和 dhcp 只能由提供商设置。
我不明白为什么我不能除了通过 dhcpv6 提供的地址之外再拥有一个临时地址。Android 甚至不使用 dhcpv6……因此,至少对于 Android 来说,尽管设置了“AdvManagedFlag on”,临时地址应该已经可以使用了。
答案1
好的,问题解决了。原因是我的有线电视机顶盒的 ra 不正确,而 ra 是由我的提供商设置的,罪魁祸首是:
AdvValidLifetime 0;
AdvPreferredLifetime 0;
这会导致 ipv6 地址不断重新生成。我现在的有效寿命为 12 小时(43200 秒)。