IPv6寻址,动态前缀静态本地部分


10

我网络上的路由器会分发我ISP分配的IPv6前缀。该前缀是动态的,但“相当粘”。

我希望我的机器自动选择在RA中发布的前缀,但将其与用户指定的本地部分结合在一起,而不是随机生成一个前缀或基于MAC地址。有没有简单的方法可以做到这一点?


1
我还没有看到任何允许您执行此操作的操作系统:(
Sander Steffann

@SanderSteffann从未使用过Linux?
迈克尔·汉普顿

1
@Michael我从未见过可以配置IID令牌的操作系统。从技术上讲,内核可以做到,但是没有操作系统(如发行版)支持它:(
Sander Steffann

Answers:


11

有两种方法可以做到这一点。一种是简单的方法,一种是困难的方法。

简单的方法是在网络上运行DHCPv6服务器,并为每个设备自己分配主机地址。或者让服务器选择主机部分;即使前缀发生更改,我所见过的DHCPv6服务器也将保留相同的主机部分。

困难的方法是使用ip token设置标记化的接口标识符。描述为:

IPv6标记化的接口标识符支持用于为节点分配众所周知的主机部分地址,同时仍从路由器通告中获取全局网络前缀。标记标识符的主要目标是服务器平台,在该服务器平台上通常是手动配置地址,而不是使用DHCPv6或SLAAC。通过使用标记化标识符,主机仍可以通过使用SLAAC来确定其网络前缀,但是如果其网络前缀发生更改,主机将更易于自动重新编号。草案中描述了标记化的IPv6标识符:<draft-chown-6man-tokenised-ipv6-identifiers-02>。

之所以如此困难,是因为尽管Linux包含此功能,但我所知的Linux发行版都不支持将这样的配置持久化并在引导时应用它,就像它们对手动或DHCP配置的地址一样。因此,除非进行某些分发,否则它可能不会很好地为您服务。注意,现在可以在NetworkManager和systemd-networkd中配置IPv6令牌。最近的答案有特定的配置说明。


最后,如果您的ISP偶尔更改前缀,请考虑在网络中使用唯一本地地址。这样,您所有的设备将始终具有一个永远不会更改的地址,它们可以彼此通信。一些支持IPv6的家庭/ SOHO路由器(例如OpenWrt)可以选择在整个家庭网络中启用ULA。如果家中有多个路由器,则应在连接到ISP的路由器上启用此功能。


实际提示该问题的问题是我的ISP路由器发出的RA寿命很短。这会导致隐私地址出现严重问题。OTOH我不太喜欢向世界展示我的MAC地址的想法。
–plugwash

静态的本地部分避免了隐私地址的问题,而无需透露我的MAC地址,谢谢。
Plugwash

您知道将多个令牌添加到单个接口以设置多个“动态静态” IPv6地址的方法吗?
wedi

@wedi Linux每个接口仅支持一个令牌。不管是什么,IPv6令牌可能都不是解决问题的方法。
迈克尔·汉普顿'18

6

迈克尔做了一个很好的总结,plugwash的最新技巧是我花了几个小时寻找CentOS 7 / RHEL(也是系统和网络管理器)解决方案之后找到的最好的技巧。习惯了nmcli之后(我主要还是使用ifcfg和ip)-我可以成功地应用它。

但是根据https://developer.gnome.org/NetworkManager/stable/settings-ipv6.html深入研究NetworkManager直接支持将IPv6标记化的接口标识符作为属性(从2016年8月1.4版开始http://news.softpedia.com/ news / networkmanager-1-4-adds-support-for-setting-ipv6-tokenized-interface-identifiers-507601.shtml)。

因此,您无需将网络管理器IPv6设置设置为忽略,而是应将设置设置为

nmcli connection modify eth0 ipv6.method "auto" # if not already
nmcli connection modify eth0 ipv6.addr-gen-mode "eui64" # use interface token
nmcli connection modify eth0 ipv6.token "::2"

它将写入IPV6_TOKEN=::2/ etc / sysconfig / network-scripts / ifcfg-eth0以在重新启动后幸存下来。要立即应用,请通过以下方式重新启动界面

nmcli connection up id eth0  # restart

3

感谢Michael确认Linux支持该功能并指向底层命令。该答案涵盖了如何使其在Debian Stretch台式机(带有systemd和network-manager)上实际工作。

首先在网络管理器中编辑连接,然后将IPv6设置设为忽略。

现在创建一个文件/etc/NetworkManager/dispatcher.d/pre-up.d/iptoken。该文件应归root用户所有,权限755,并具有以下内容。

#!/bin/sh
ip token set ::2 dev eth0

将eth0替换为所需的设备,并将:: 2替换为所需的后缀。


2

在Linux下,您可以使用systemd-network

只需在下面创建一个.network文件/etc/systemd/network/somename.network

[Match]
Name=e*

[Network]
DHCP=yes
IPv6Token=::1

您可以输入完整的接口名称,而不是e*匹配所有以开头e的接口。这将启用DHCP {v4,v6}并::1用作后缀。您可以选择任何IPv6地址,但前64位必须设置为零。

启用后,启动systemd-networkd.service

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.