32.12. IPv6
上一页 | 第 32 章 高级网络 | 下一页

## 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 的爆炸式发展， 主要的两个担心是：

- 用尽所有的地址。 当然现在这个问题已经不再那样尖锐， 因为 RFC1918 私有地址空间 (`10.0.0.0/8`、 `172.16.0.0/12`， 以及 `192.168.0.0/16`) 和网络地址转换 (NAT) 技术已经被广泛采用。

- 路由表条目变得太大。这点今天仍然是焦点。

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

- 128 位地址空间。换句话，理论上有 340,282,366,920,938,463,463,374,607,431,768,211,456 个地址可以使用。这意味着在我们的星球上每平方米大约有 6.67 * 10^27 个 IPv6 地址。

- 路由器仅在它们的路由表里存放网络地址集， 这就减少路由表的平均空间到 8192 个条目。

IPv6 还有其它许多有用的功能，如：

- 地址自动配置 (RFC2462)

- Anycast (任意播) 地址(“一对多”)

- 强制的多播地址

- IPsec (IP 安全)

- 简单的头结构

- 移动的 (Mobile) IP

- IPv6 到 IPv4 的转换机制

要更多信息，请查看：

- IPv6 概观，在 playground.sun.com

- KAME.net

### 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`
`::1` | 128 bits | 环回地址 | 类似 IPv4 中的 `127.0.0.1`
`::00:xx:xx:xx:xx` | 96 bits | 嵌入的 IPv4 | 低 32 bits 是 IPv4 地址。这也称作 “IPv4 兼容 IPv6 地址”
`::ff:xx:xx:xx:xx` | 96 bits | IPv4 影射的 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#` 改为正确的值。

上一页 | 上一级 | 下一页
32.11. 并口电缆 IP (PLIP) | 起始页 | 32.13. 异步传输模式 (ATM)

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

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.