32.12. IPv6

原始作者:Aaron Kaplan.
重新组织和增加:Tom Rhodes.
中文翻译: 雪平.
Extended by Brad Davis.

IPv6 (也被称作 IPng 下一代 IP) 是众所周知的 IP 协议 (也叫 IPv4) 的新版本。 和其他现代的 *BSD 系统一样, FreeBSD 包含了 KAME 的 IPv6 参考实现。 因此, 您的 FreeBSD 系统包含了尝试 IPv6 所需要的所有工具。 这一节主要集中讨论如何配置和使用 IPv6。

在 1990 年代早期, 人们开始担心可用的 IPv4 地址空间在不断地缩小。 随着 Internet 的爆炸式发展, 主要的两个担心是:

IPv6 解决这些和其它许多的问题:

IPv6 还有其它许多有用的功能,如:

要更多信息,请查看:

32.12.1. 关于 IPv6 地址的背景知识

有几种不同类型的 IPv6 地址:Unicast,Anycast 和 Multicast。

Unicast 地址是为人们所熟知的地址。一个被发送到 unicast 地址的包实际上会到达属于这个地址的接口。

Anycast 地址语义上与 unicast 地址没有差别, 只是它们强调一组接口。指定为 anycast 地址的包会到达最近的 (以路由为单位) 接口。Anycast 地址可能只被路由器使用。

Multicast 地址标识一组接口。指定为 multicast 地址的包会到达属于 multicast 组的所有的接口。

注意:

IPv4 广播地址 (通常为 xxx.xxx.xxx.255) 由 IPv6 的 multicast 地址来表示。

表 32.3. 保留的 IPv6 地址
IPv6 地址预定长度 (bits)描述备注
::128 bits未指定类似 IPv4 中的 0.0.0.0
::1128 bits环回地址类似 IPv4 中的 127.0.0.1
::00:xx:xx:xx:xx96 bits嵌入的 IPv4低 32 bits 是 IPv4 地址。这也称作 IPv4 兼容 IPv6 地址
::ff:xx:xx:xx:xx96 bitsIPv4 影射的 IPv6 地址低的 32 bits 是 IPv4 地址。 用于那些不支持 IPv6 的主机。
fe80:: - feb::10 bits链路环回类似 IPv4 的环回地址。
fec0:: - fef::10 bits站点环回 
ff::8 bits多播 
001 (base 2)3 bits全球多播所有的全球多播地址都指定到这个地址池中。前三个二进制位是 001

32.12.2. IPv6 地址的读法

规范形式被描述为:x:x:x:x:x:x:x:x, 每一个x就是一个 16 位的 16 进制值。当然, 每个十六进制块以三个0开始头的也可以省略。如 FEBC:A574:382B:23C1:AA49:4592:4EFE:9982

通常一个地址会有很长的子串全部为零, 因此每个地址的这种子串常被简写为::。 例如:fe80::1 对应的规范形式是 fe80:0000:0000:0000:0000:0000:0000:0001

第三种形式是以众所周知的用点.作为分隔符的十进制 IPv4 形式,写出最后 32 Bit 的部分。例如 2002::10.0.0.1 对应的十进制正规表达方式是 2002:0000:0000:0000:0000:0000:0a00:0001 它也相当于写成 2002::a00:1.

到现在,读者应该能理解下面的内容了:

# ifconfig
rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255 inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1 ether 00:00:21:03:08:e1 media: Ethernet autoselect (100baseTX ) status: active

fe80::200:21ff:fe03:8e1%rl0 是一个自动配置的链路环回地址。它作为自动配置的一部分由 MAC 生成。

关于 IPv6 地址的结构的更多信息,请参看 RFC3513

32.12.3. 进行连接

目前,有四种方式可以连接到其它 IPv6 主机和网络:

  • 咨询你的互联网服务提供商是否提供 IPv6。

  • SixXS 向全球范围提供通道。

  • 使用 6-to-4 通道 (RFC3068)

  • 如果您使用的是拨号连接, 则可以使用 net/freenet6 port。

32.12.4. IPv6 世界里的 DNS

对于 IPv6 有两种类型的 DNS 记录:IETF 已经宣布 A6 是过时标准;现行的标准是 AAAA 记录。

使用AAAA记录是很简单的。通过增加下面内容, 给您的主机分配置您刚才接收到的新的 IPv6 地址:

MYHOSTNAME AAAA MYIPv6ADDR

到您的主域 DNS 文件里,就可以完成。要是您自已没有 DNS 域服务,您可以询问您的 DNS 提供商。目前的 bind 版本 (version 8.3 与 9) 和 dns/djbdns(含IPv6补丁) 支持 AAAA 记录。

32.12.5. 在 /etc/rc.conf 中进行所需的修改

32.12.5.1. IPv6 客户机设置

这些设置将帮助您把一台您 LAN 上的机器配置为一台客户机, 而不是路由器。 要让 rtsol(8) 在启动时自动配置您的网卡, 只需添加:

ipv6_enable="YES"

要自动地静态指定 IP 地址, 例如 2001:471:1f11:251:290:27ff:fee0:2093, 到 fxp0 上, 则写上:

ipv6_ifconfig_fxp0="2001:471:1f11:251:290:27ff:fee0:2093"

要指定 2001:471:1f11:251::1 作为默认路由, 需要在 /etc/rc.conf 中加入:

ipv6_defaultrouter="2001:471:1f11:251::1"

32.12.5.2. IPv6 路由器/网关配置

这将帮助您从隧道提供商那里取得必要的资料, 并将这些资料转化为在重启时能够保持住的设置。 要在启动时恢复您的隧道, 需要在 /etc/rc.conf 中增加:

列出要配置的通用隧道接口, 例如 gif0

gif_interfaces="gif0"

配置该接口使用本地端地址 MY_IPv4_ADDR 和远程端地址 REMOTE_IPv4_ADDR

gifconfig_gif0="MY_IPv4_ADDR REMOTE_IPv4_ADDR"

应用分配给您用于 IPv6 隧道远端的 IPv6 地址, 需要增加:

ipv6_ifconfig_gif0="MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR"

此后十设置 IPv6 的默认路由。 这是 IPv6 隧道的另一端:

ipv6_defaultrouter="MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR"

32.12.5.3. IPv6 隧道配置

如果服务器将您的网络通过 IPv6 路由到世界的其他角落, 您需要在 /etc/rc.conf 中添加下面的配置:

ipv6_gateway_enable="YES"

32.12.6. 路由宣告和主机自动配置

这节将帮助您配置 rtadvd(8) 来宣示默认的 IPv6 路由。

要启用 rtadvd(8) 您需要在 /etc/rc.conf 中添加:

rtadvd_enable="YES"

指定由哪个网络接口来完成 IPv6 路由请求非常重要。 举例来说, 让 rtadvd(8) 使用 fxp0

rtadvd_interfaces="fxp0"

接下来我们需要创建配置文件, /etc/rtadvd.conf。 示例如下:

fxp0:\ :addrs#1:addr="2001:471:1f11:246::":prefixlen#64:tc=ether:

fxp0 改为您打算使用的接口名。

接下来, 将 2001:471:1f11:246:: 改为分配给您的地址前缀。

如果您拥有专用的 /64 子网, 则不需要修改其他设置。 反之, 您需要把 prefixlen# 改为正确的值。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.