SDB:Native IPv6

跳转到:导航搜索


在 openSUSE 上测试

推荐文章

相关文章

Icon-help.png


本文档介绍在原生 IPv6 环境中配置系统的方法。

情况

您的系统连接到一个支持原生 IPv6 版本的网络的路由器。这意味着您的系统只需启用系统中的 IPv6 即可获得全局 IPv6 地址。

没有 IPv6 路由器

当您在没有此类路由器的情况下启用 IPv6 时,您会看到您的接口获得本地或链路 IPv6 地址(范围:链路)。此类地址以 fe80:: 开头。使用此类地址,您可以与也启用了 IPv6 的同一链路(以太网广播域)上的其他系统进行通信。即使在您拥有 IPv6 路由器的情况下,您的接口始终也会拥有此类地址。

IPv6 路由器

IPv6 路由器始终是全局网络和/或所谓的站点网络的一部分。站点网络类似于本地 IPv4 网络,例如 10.x.x.x 网络。该站点网络中的地址以 fc::/7 开头,也称为唯一本地地址。全局网络连接到全球互联网。全局地址当前以 2 开头。路由器由网络管理配置为向连接到系统连接的链路上的所有系统呈现 IPv6 前缀。这是一个用于全局 IPv6 地址的前缀,如果配置了,也是用于唯一本地 IPv6 地址的前缀。

路由器通告

路由器会定期向以太网网络上的所有系统发送所谓的路由器通告 (RA) 数据包。此数据包中存在前缀、首选生存期和有效生存期。系统还可以发送数据包以请求(征求)此数据包;这是为了加快分配速度。这些生存期值是这些参数可以采用的最大值。因此,如果您在系统中给出更高的值(如下所示),实际值将不会大于 RA 中的值。

无状态自动配置

IPv6 的一个特性是,如果存在路由器,则此路由器始终提供无状态自动配置。这意味着接口始终能够在没有用户干预的情况下接收唯一的全局/本地 IPv6 地址。此功能由系统中的三个主要参数控制,并且在出现问题时可能需要第四个参数。这些参数在内核源代码树的 Documentation/networking/ip-sysctl.txt 中记录,如下所示:

  • autoconf:此参数启用或禁用无状态自动配置。如果禁用,则需要将固定地址分配给接口,否则它只能在本地链路上传输。如果启用,您将获得一个全局/本地 IPv6 地址,其最低 64 位来自接口的 MAC 地址。这是一个相当稳定的地址,可用于从其他系统甚至互联网上的系统连接到您的系统。
  • use_tempaddr:此参数启用另一个 IPv6 地址,该地址会定期更改,并且其最低 64 位来自随机生成器。此功能出于安全原因可用。它使得跟踪互联网中的活动(仅适用于旅行设备,静态环境中的设备将始终在 IPv6 地址的更高位中具有相同的值)变得困难。
  • forwarding:如果转发为 1,则计算机本身将充当路由器并忽略来自其他路由器的路由器通告。
  • temp_prefered_lft:临时地址的首选生存期;但是,它可以被路由器通告消息覆盖(例如,参见 bug #731730)。
openSUSE 11.4

在 openSUSE 11.4 中,默认情况下 autoconf 已启用,但 use_tempaddr 未启用(设置为 0),temp_prefered_lft 设置为 86400(1 天)。

openSUSE 12.1 及更高版本

在 openSUSE 12.1 及更高版本中,默认情况下 autoconfig 也设置为 1,但是 use_tempaddr 已启用(设置为 2)。这意味着较低的 64 位是随机生成的,并且在从系统发起的传出数据包中,此 IPv6 地址将用于源地址字段。基于 MAC 地址的 IPv6 地址也存在。因此,可以通过该或多或少固定的地址到达该系统。

use_tempaddr 也可以设置为 1,这意味着存在一个随机生成的较低 64 位 IPv6 地址,但是从系统发起的传出数据包将在源地址字段中使用基于 MAC 地址的 IPv6 地址。

有状态自动配置或 DHCP6

从以上可以看出,DHCP6 不是必需的。但是,它可以更精确地控制 IPv6 地址的分配。如果您的网络中有一个 DHCP6 服务,您可能需要禁用无状态自动配置。

将使用哪个 IPv6 地址

对于传出连接,将使用随机生成的地址作为源地址(除非 use_tempaddr 设置为 1),但如果 use_tempaddr 已禁用,将使用从 MAC 地址派生的地址(autoconf 已启用),如果禁用后者,将使用通过 DHCP6 派生的地址,否则将使用固定地址。

关于临时地址的警告

使用临时地址可能会导致长期连接出现问题,例如 SSH 或 IRC 会话。在这种情况下,最好禁用临时地址或将生存期设置为高值。至少在启动后将使用新值。

原则上,过时的随机生成地址可能会保留一段时间。因此,当生成新地址时,长期连接不会立即受到影响。但这取决于您的 IPv6 环境和路由器。有些情况下,IPv6 路由器在其路由器通告中设置了非常短的生存期,这会覆盖本地生存期 - 有关详细信息,请参见 bug #731730


流程

本文档介绍了以下几种解决方案:

  • 启用私有扩展以设置 IPv6 地址的主机部分(随机生成)
  • 启用具有动态、无 DHCP6 或固定 IPv6 地址的 IPv6

对于 openSUSE 12.3 及更高版本,建议使用 Network Manager 来管理您的网络接口。因此,在 YaST 中,您应该收到警告,这些接口由 NetworkManager 管理,否则将其配置为这样。

使用 YaST2

随机生成 IPv6 地址的主机部分

openSUSE 12.1 及更高版本

这是 openSUSE 12.1 及更高版本的默认设置,但较低版本的 openSUSE 则不是。建议在笔记本电脑或类似设备上使用此设置,该设备在旅行时使用。在其他情况下,由您决定。但是,如果您在更大的环境中使用的系统,您的组织可能有一个禁止这种类型地址的策略,因为它使得跟踪该更大网络中系统的活动更加困难。请参阅下文如何更改此默认值(在命令行上)。

openSUSE 11.4

要启用此功能,请启动 YaST2,选择 System 并启动模块 /etc/sysconfig Editor。展开 Network(按其前面的 +),然后在 Network General 中。选择 IPV6_PRIVACY 并将其设置为 yes。它被标记为 DEPRECATED,但它有效并且是最简单的方法。

没有 DHCP6 的动态 IPv6 地址

在没有 DHCP6 服务器的网络中,您应该禁用 DHCP6。否则,您可能会在获得全局 IPv6 地址之前遇到长时间的延迟。启动 YaST2,选择 Network Devices 并启动模块 Network Settings。在 Global Options 选项卡中,启用 Activate IPv6,这是安装后的默认设置。在 Overview 选项卡中,选择(其中一个)接口并按 Edit。启用 Dynamic IP address 并选择 DHCP version 4 only

openSUSE 11.4

这是默认设置,也是推荐设置,您的 IPv6 地址来自 MAC 地址。

openSUSE 12.1 及更高版本

这是默认设置,但是您将获得两个全局 IPv6 地址。一个来自 MAC 地址,另一个主机部分随机生成。后者会定期更改。它应该在每个 temp_prefered_lft 更改一次,但是如果路由器通告覆盖它,则可能会更频繁地更改(参见 bug #731730)。您可以使用第一个地址连接到您的系统,第二个地址将在传出连接中使用,除非 use_tempaddr 设置为 1。

使用 DHCP6 的动态 IPv6 地址

这与上述类似,但是您选择 4 和 6 或仅 6。仅在您知道网络中有一个 DHCP6 服务器时才使用 DHCP6,否则在获得全局 IPv6 地址之前会有很大的延迟(顺序为 10 分钟)。

在这种情况下,建议禁用无状态自动配置(autoconf = 0)。

使用固定 IP 地址

启动 YaST2,选择 Network Devices 并启动模块 Network Settings。现在您选择 Statically assigned IP Address。之前您在文本框 IP address 中分配了一个 IPv4 地址和该地址的子网掩码,您仍然应该这样做。这意味着您需要在 Add 底部添加第二个 IP 地址到接口。您将看到一个带有三个文本框的对话框。标记为 Alias 的框可以保留为空。其他两个获取 IP 地址,例如 x:x:x:x:x:x:x:x,其中 x 是 0-ffff,以及 netmask 框很可能获取 /64。前 x:x:x:x,前缀由您的 ISP 或组织的网络管理提供。如果您从动态地址开始,您可以从路由器获得 IPv6 地址复制第一个 x:x:x:x。您可以在该命令的输出中看到 netmask。您可以使用您喜欢的 IPv6 地址的主机部分,但是第七个最重要的主机部分位应该是 0,以指示固定地址,因此掩码为 ::2:0:0:0。使用固定 IP 地址,您需要指定默认网关。因此,您还需要选择 Routing 选项卡。这里 IPv6 的默认网关必须是使用掩码屏蔽的 IPv6 地址的一部分,并在末尾添加零,或者复制从动态地址开始时获得的值。

在这种情况下,建议禁用无状态自动配置(autoconf = 0)。

使用 YaST 设置其他参数

通过 YaST 无法设置 autoconf、use_tempaddr 和 temp_address_lft 参数。

使用 Network Manager

通过单击系统托盘中的图标 启动管理窗口,单击 Manage Connections 按钮。单击 Wired 选项卡,您将看到类似于下面的窗口。

如果您的系统具有以太网端口,您将在该窗口中看到一行,标有 Wired connection 1。选择此行并按 Edit... 按钮。在这里,我们只讨论 IPv6 设置,因此单击 IPv6 选项卡。您将看到以下窗口。

我们将从上到下讨论这些选项

  • 您可以更改名称 Wired connection 1。您将在/etc/NetworkManager/system-connections/中找到此名称作为文件名,如果您启用了 System connection
  • Connect automatically。应该启用。
  • System connection。应该启用。系统会要求您在单独的窗口中输入 root 密码。
  • 标有 Basic settings 的下拉按钮。在这里我们只讨论这些基本设置。其他可能性是为高级用户准备的。
  • Method。这里我们有以下选项
    • Automatic。这用于网络环境,其中网络提供了一个路由器通告数据包,该数据包提供了建立 IPv6 地址、默认网关和 DNS 地址所需的所有信息。
    • Automatic (addresses only)。这意味着您必须配置 DNS 信息,路由器信息来自路由器通告。路由器可能配置为不在路由器通告中包含 DNS 信息,因此您可能需要此选项。
    • Automatic (DHCP only)。您需要在网络中有一个 DHCPv6 服务器。将不会使用路由器通告来建立配置。
    • Manual。您必须配置所有配置信息(如下所示)。
    • Link-Local。您将仅获得和使用链路本地地址。
    • Shared。不确定这意味着什么。
    • Disabled。不确定效果是什么。设置此选项后,接口上仍然有可用的全局 IPv6 地址。
  • IP address:仅在选择 Manual 时可用。
  • Subnet Mask:仅在选择 Manual 时可用。
  • Gateway:仅在选择 Manual 时可用(这是默认网关,通常是路由器的唯一本地地址,但路由器的链路本地地址也可以使用)
  • 附加 DNS 服务器,如果选择手动,则更改 DNS 服务器。您需要输入 IP 地址,而不是名称。
  • 附加搜索域名,如果选择手动,则更改 搜索域名。含义:如果无法解析给定的名称,则会将此处输入的域名附加到该名称后进行 DNS 搜索(名称和后缀之间将插入一个点)。
  • 隐私扩展。下拉按钮提供以下选项(对应于上述 use_tempaddr 的值)
    • 禁用。您将仅获得基于 MAC 地址的 IPv6 地址。
    • 启用(优先使用临时地址)。您还将获得一个 IPv6 地址,其下 64 位随机生成,并在与 Internet 系统建立连接时使用。
    • 启用(优先使用公共地址)。您还将获得一个地址,其下 64 位随机生成,但与 Internet 系统建立连接时仍将使用基于 MAC 地址的地址。
  • 此连接需要 IPv6。系统将等待此连接建立完成后才继续启动。当您想通过此连接挂载远程文件系统时需要此功能。

相同的设置适用于无线连接。

固定的 IPv6 地址

如果您的系统是服务器,您可能需要一个不同于基于 MAC 地址的固定 IPv6 地址。使用 手动 配置此类固定 IPv6 地址。首次使用自动模式时,您可以找到网关和 DNS 的值。网络掩码在大多数情况下为 /64。如果您需要在 基本设置 下方 附加地址 中需要多个固定地址。

Icon-warning.png
警告:对于固定地址,我们假定一个稳定的 IPv6 地址前缀

在命令行

最佳实践是使用 YaST 生成网络的基本设置。因此,这里仅考虑 YaST 无法更改的参数。上述参数可以在 /etc/sysconfig/network/ifsysctl 和 /etc/sysconfig/network/ifsysctl-<if> 文件中设置/更改,其中 <if> 是接口的名称,例如 eth0、wlan0 等。

有关这些文件内容以及如何使用它们的更多信息,可以通过执行以下命令找到

$ man ifsysctl

下面给出了 /etc/sysconfig/network/ifsysctl 文件的示例。只需删除其中一个参数前面的 #。

# use randomized IPv6 address which has priority in source address of packet
#net.ipv6.conf.$SYSCTL_IF.use_tempaddr = 2
# use randomized IPv6 address, however source address derived from MAC address has priority
#net.ipv6.conf.$SYSCTL_IF.use_tempaddr = 1
# do not use randomized IPv6 address; only address derived from MAC address will be used
#net.ipv6.conf.$SYSCTL_IF.use_tempaddr = 0
# autoconfig is true is the default, must be 1 for the above parameters to have effect
# set autoconf to 0 when a fixed address is used or you get the address from a DHCP6 server
#net.ipv6.conf.$SYSCTL_IF.autoconf = 0

ifsysctl 中的参数会更改所有网络设备的这些参数。如果您想区分接口,请使用 ifsysctl-<if>,其中 <if> 是接口的名称。更改这些参数后,您必须重新启动才能生效。显然,您可以在此文件中输入更多参数,但上述参数是最重要的。

参见

相关文章

外部链接