Gentoo Logo

Gentoo IPv6路由指南

内容:

1.  准备工作

基本的内核配置

Gentoo里任何一个2.6系列的内核版本都可以很容易地支持IPv6连接。自从2.6.0版本以来,新版USAGI IPv6协议栈已经被集成到了内核里面。

代码 1.1: 安装内核

# emerge gentoo-sources

现在我们准备进入内核源代码的目录,并且开始我们实际的内核配置

代码 1.2: 配置Linux内核

# cd /usr/src/linux
# make menuconfig

注意: 这里假设 /usr/src/linux 已经指向你将要使用的内核。

代码 1.3: 'make menuconfig' 选项

Device Drivers --->
Networking support --->
Networking options --->
   <*> The IPv6 protocol (EXPERIMENTAL)
(这个选项下面的IPv6子选项对于很多其他的应用程序有用,
但是对于基本的安装来说这不是必要的)

(这个选项只有在你想使用ptrtd来进行6to4转换时才需要)
[*] Network device support
   <*> Universal TUN/TAP device driver support

测试IPv6支持

在开启了推荐的选项之后,重新编译您的内核并且重新启动,进入到您已经开启了IPv6支持的内核中。

如果您还没有安装iproute2,我们建议您现在就安装。 iproute2是一款的网络套件,其中包含了著名的ip,它可以替代ifconfig, route, iptunnel ...

代码 1.4: 安装iproute2

# emerge sys-apps/iproute2

警告: 如果您拥有多个隧道设备,那么使用ifconfig会引发严重的问题。您必须按倒序移除隧道,也就是说最新的隧道首先被移除。您已经被警告。

如果IPv6正在工作,回环设备将会显示一个IPv6的地址:

代码 1.5: 检查回环设备

# ip -6 addr show lo
1: lo: <LOOPBACK,UP> mtu 16436
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
    (上面的这一行表明一切正常)

在进行下一步的操作之前,请确保您已经将ipv6添加到您make.conf的USE变量列表中,这样在将来安装的软件包才会包含IPv6支持。

2.  隧道配置

基本的配置

很多ISP(互联网服务供应商)仍旧不提供任何原生IPv6的连接。为了避开这一限制,全球有几家“隧道代理”提供免费的IPv6隧道。这将允许您在IPv4连接中使用隧道来完成你您所有的IPv6连接。

Broker Location
Hurricane Electric North America, Europe, Asia
Freenet6 US
Sixxs Europe
Singnet Singapore
Aarnet Australia/South Pacific

下面是两个利用Hurricane Electric(也可以从sixxs.net获取隧道)和Freenet6这两个北美的隧道进行设置的例子。

Hurricane Electric

Hurricane Electric(简称HE)提供免费的IPv6隧道,同时为您提供一个/64的地址块。它还允许您设置反向DNS。从HE获取一个隧道是很容易的,只需要到http://www.tunnelbroker.net/填写一页的表格。

注意: 注册包含一系列的信息,比如您的地址和电话号码。

当您的隧道得到批准并且被分配了一个/64的地址块之后,您就能够设置您的Gentoo了。HE提供了基于ifconfig和iproute工具的示例。在接下来的两个例子中,假设您拥有下面的设置:

Local IPv4 Address (eth0) 68.36.91.195
HE IPv4 Address 64.71.128.82
Local IPv6 tunnel Address 2001:470:1F00:FFFF::189
IPv6 Block 2001:470:1F00:296::/64

使用iproute2包和ip命令,您可以按下面那样做:

代码 2.1: 配置一个IPv6隧道

(在本地(eth0)IPv4和HE的远程IPv4地址(HE's remote IPv4 address)之间创建一个隧道)
# ip tunnel add sixbone mode sit remote 64.71.128.82 local 68.36.91.195 ttl 64 dev eth0
(从MTU中抽取使用隧道的开销)
# ip link set sixbone mtu 1280
(启动隧道)
# ip link set sixbone up
(为它分配IPv6地址)
# ip addr add 2001:470:1F00:FFFF::189 dev sixbone
(让所有的全球单播IPv6地址都通过我们的‘sixbone’隧道设备路由)
# ip route add 2000::/3 dev sixbone

Freenet6

Freenet6是另一个免费的隧道代理。可选注册只需要一个用户名和一个合法的电子邮件地址。他们已经选择将隧道的管理变成了客户/服务器模式,并且已经开发出了一款叫做gateway6的客户端软件。这个客户端在Portage中是可用的。安装它需要做:

代码 2.2: 安装Freenet6客户端

# emerge gateway6

现在如果您选择带认证的连接,你需要配置gateway6 通过编辑/etc/gateway6/gw6c.conf。您只需修改useridpasswd部分成为Freenet6分配给您的那些,并且改变网关服务器。下面是一个配置文件的例子。

代码 2.3: gw6c.conf例子

auth_method=any
userid=anonymous
passwd=foobar
template=linux
server=broker.freenet6.net

测试您的连接

既然您的隧道已经配置好了,那么您就可以测试您的连接了。最简单的方法就是使用 ping6软件包并试着ping 一个IPv6主机。

代码 2.4: 测试连接

# emerge iputils
# ping6 www.kame.net
PING www.kame.net(orange.kame.net) 56 data bytes
64 bytes from orange.kame.net: icmp_seq=1 ttl=52 time=290 ms
64 bytes from orange.kame.net: icmp_seq=2 ttl=52 time=277 ms
64 bytes from orange.kame.net: icmp_seq=3 ttl=52 time=280 ms
64 bytes from orange.kame.net: icmp_seq=4 ttl=52 time=279 ms
64 bytes from orange.kame.net: icmp_seq=5 ttl=52 time=277 ms

--- www.kame.net ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4038ms
rtt min/avg/max/mdev = 277.040/281.041/290.046/4.699 ms

正在进行的下一步工作是将更好的IPv6支持添加到网络初始化脚本中。如果您像了解这项工作的进展,并且(或者)想要帮忙,那么发邮件到latexer@gentoo.org.

3.  应用程序里的IPv6支持

Re-emerging软件包

除非您以前已经将USE="ipv6"添加到您的/etc/make.conf 中去了,否则您可能需要re-emerge(重新安装)一堆软家包并把IPv6支持编译进去。要像知道所有已经安装的软家包中有哪些因为USE标记的改变而受到影响,可以使用Portage的--newuse (-N)选项

代码 3.1: 需要re-emerging的候选软件包

# emerge -uDNav world

如果您已经改变了很多的USE标记,那么列表将会很长。我们建议将您的系统保持最新,如果您重新编译所有受影响的软件包的话,系统将不会受到损坏。

注意: 一些软件包会自动检测IPv6支持,因此没有IPv6的USE标记。因此,并不是所有应该支持IPv6的软件包都会支持IPv6,如果您编译它的时候并没有一个支持IPv6的内核。

IPv6具体软件包

有几个软件包解决具体的IPv6问题,它们中的大部分都在/usr/portage/net-misc中。

软件包 描述
net-misc/ipv6calc 将一个IPv6地址转换成压缩格式
net-misc/netcat6 支持IPv6和IPv4的netcat版本
dev-perl/Socket6 C socket.h的定义和机构操作中与IPv6相关的部分

4.  DNS设置

IPv6和DNS

正如IPv4的DNS使用A记录那样,IPv6的DNS使用AAAA记录。(这是因为IPv4是一个2^32的地址空间,而IPv6是一个2^128的地址空间)对于反向DNS,INT已经过时,但是仍旧被广泛支持。ARPA 是最新的标准。这里将描述支持ARPA的格式。

BIND配置

最新的BIND版本包含优秀的IPv6支持。这一部分将假设您至少已经有了配置和使用BIND的最基本知识。我们将假设您并不是在chroot中运行bind。如果您使用了chroot,那么只需简单地追加chroot前缀到接下来那一部分的大多数路径中。

首先您需要向/etc/bind/named.conf区域文件中的添加转发和反向的DNS条目。

代码 4.1: named.conf条目

(我们允许bind在IPv6地址上监听。
对于bind-9.3之前的版本,使用'any'是实现它的唯一方法)
options {
    [...]
    listen-on-v6 { any; }
    [...]
};
(这将会为域名'ipv6-rules.com'提供DNS转发:)
zone "ipv6-rules.com" IN {
    type master;
    file "pri/ipv6-rules.com";
};
(对反向DNS来说,这样的格式是“按位”进行的。它将通过使用IPv6前缀,
反转数字的顺序,并且在数字之间放一个段)
zone "6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa" {
        type master;
        file "pri/rev-ipv6-rules.com.arpa";
};

现在我们必须创建区域文件并为我们所有的主机添加相应的条目:

代码 4.2: pri/ipv6-rules.com

$TTL    2h
@       IN      SOA     ipv6-rules.com. webmaster.ipv6-rules.com.  (
                                2003052501 ; Serial
                                28800      ; Refresh
                                14400      ; Retry
                                3600000    ; Expire
                                86400 )    ; Minimum
                NS      ns1.ipv6-rules.com

        IN      AAAA    2001:470:1f00:296::1 ; address for ipv6-rules.com
host1   IN      AAAA    2001:470:1f00:296::2 ; address for host1.ipv6-rules.com
host2   IN      AAAA    2001:470:1f00:296::3:3 ; address for host2.ipv6-rules.com

代码 4.3: pri/rev-ipv6-rules.com.arpa

$TTL 3d ; Default TTL (bind 8 needs this, bind 9 ignores it)
@       IN SOA ipv6-rules.com. webmaster.ipv6-rules.com. (
                        2003052501      ; Serial number (YYYYMMdd)
                        24h             ; Refresh time
                        30m             ; Retry time
                        2d              ; Expire time
                        3d )            ; Default TTL
        IN      NS     ns1.ipv6-rules.com.
; IPv6 PTR entries
$ORIGIN 6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa.

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN      PTR     ipv6-rules.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN      PTR     host1.ipv6-rules.com.
3.0.0.0.3.0.0.0.0.0.0.0.0.0.0.0 IN      PTR     host2.ipv6-rules.com.

DJBDNS配置

目前,存在一些可用于DJBDNS的第三方补丁,可以在http://www.fefe.de/dns/上面找到,这些补丁可以让DJBDNS进行IPv6名字服务。设置ipv6的USE标记来安装(emerge)DJBDNS会自动安装这些补丁。

警告: 这些补丁并不支持所有的记录类型。特别是NS和MX记录不被支持。

代码 4.4: 安装djbdns

# emerge djbdns

在安装djbdns之后,可以通过运行tinydns-setup并回答一些问题来进行设置,这些问题是关于哪些IP地址将被绑定,在哪里安装tinydns,等等。

代码 4.5: 设置tinydns

# tinydns-setup

假设我们已经将tinydns安装到了/var/tinydns里, 现在我们可以编辑/var/tinydns/root/data。这个文件将包含让tinydns为您的IPv6委托处理DNS所需要的所有数据。

代码 4.6: 数据文件例子

(192.168.0.1将权威地处理*.ipv6-rules.com)
.ipv6-rules.com:192.168.0.1:a:259200
(2001:470:1f00:296::/64的权威反向DNS)
.6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa:192.168.0.1:a
(为host1和host2指定IP)
6host1.ipv6-rules.com:200104701f0002960000000000000001:86400
6host2.ipv6-rules.com:200104701f0002960000000000000002:86400
(将www指向host1)
3www.ipv6-rules.com:200104701f0002960000000000000002:86400

前缀有一个6的那些行将同时创建一个AAAA和一个PTR记录。那些前缀有一个3的行将只创建一个AAAA记录。除了手动编辑data文件之外,您可以使用add-host6脚本和add-alias6脚本来添加新的条目。 在修改data文件之后,您需要简单地从/var/tinydns/root运行make。这将会创建/var/tinydns/root/data.cfb,tinydns将会使用这个文件作为它的信息源来处理DNS请求。

5.  IPv6路由

设置路由

如果我们想要让我们的系统成为一个路由以便其他客户端能够通过IPv6连接外部的世界的话,那么需要进一步的设置。我们需要开启IPv6的包转发功能。我们可以通过下面两种方式中的一种做到这一点。

代码 5.1: 开启转发功能

# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
or
# sysctl -w net.ipv6.conf.all.forwarding=1

警告: 在下一章中将会解释的radvd初始化脚本能够开启(和关闭)转发功能, 这将使下一步骤成为不必要的步骤。

为了在开机的时候开启转发,您将需要编辑/etc/sysctl.conf并且添加下面这一行。

代码 5.2: sysctl.conf附加部分

(如果你将要使用radvd,这一步不是必要的)
net.ipv6.conf.default.forwarding=1

数据流量现在将会从这台机子被转发出去,转发的道路就是利用我们的代理所建立的隧道。

要给客户端分配IPv6地址,IPv6规范允许无状态和有状态两种IP分配方式。无状态分配使用一个叫做路由广告的进程,并且可以让客户端做到,只要简单地把设备接口(interface)启动就可以获得一个IP和一个默认路由。这种方式被称为“无状态”,这是因为没有记录分配的IP和主机。有状态分配是通过DHCPv6进行处理的。这种方式之所以被称为”有状态“,是由于服务器保存了请求和获取IP的客户端的状态。

无状态设置

通过路由广告守护进程或者radvd,无状态设置将会很容易完成。

代码 5.3: 配置radvd

# emerge radvd

在安装了radvd之后,我们需要创建/etc/radvd/radvd.conf,这个文件包含了我们应该从哪个地址块分配IP这样的信息。这是一个radvd.conf文件的例子,这里面使用了我们的隧道代理分配给我们的前缀。

代码 5.4: radvd.conf例子

interface eth1
{
        (将广告信息发送到其他的主机)
        AdvSendAdvert on;
        (分片大小并不好(tm))
        AdvLinkMTU 1280;
        MaxRtrAdvInterval 300;
        (我们的PoP分配给我们的子网前缀)
        prefix 2001:470:1F00:296::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
        };
};

警告: 请确保第一行中的设备接口是正确的,这样您就可以将路由广告广播到您的内部网而不是您的ISP那里!

通过man radvd.conf可以得到更多的信息。我们现在能够启动radvd并将它设置为开机时启动。

代码 5.5: 开启radvd

# /etc/init.d/radvd start
# rc-update add radvd default

有状态设置

如果您想要使用有状态设置,您将需要安装并且配置dhcpv6。

代码 5.6: 安装dhcpv6

# emerge dhcpv6

接下来我们必须编辑/etc/dhcp6s.conf来配置DHCPv6服务器。

代码 5.7: dhcp6s.conf例子

prefer-life-time 10000;
valid-life-time 20000;
renew-time 5000;
rebind-time 8000;
interface eth1 {
    link AAA {
        allow unicast;
        send unicast;
        allow rapid-commit;
        send server-preference 5;
        renew-time 1000;
        rebind-time 2400;
        prefer-life-time 2000;
        valid-life-time 3000;
        pool{
            range 2001:470:1f00:296::10 to 2001:470:1f00:296::110/64;
            prefix 2001:470:1f00:296::/64;
        };
    };
};

我们现在可以开启dhcp6s,并且将它设置为在开机时启动。

代码 5.8: 开启dhcp6s

# /etc/init.d/dhcp6s start
# rc-update add dhcp6s default

6.  IPv6客户端

使用radvd

在这个路由之后的客户端现在应该能够通过IPv6连接其余的网络了。如果使用radvd,设置主机应该就像将设备启动一样简单。(您的net.ethX初始化脚本可能已经帮您做好了这项工作)。

代码 6.1: 通过IPv6连接

# ip link set eth0 up
# ip addr show eth0
1: eth0: <BROADCAST,MULTICAST,UP> mtu 1400 qdisc pfifo_fast qlen 1000
    link/ether 00:01:03:2f:27:89 brd ff:ff:ff:ff:ff:ff
    inet6 2001:470:1f00:296:209:6bff:fe06:b7b4/128 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::209:6bff:fe06:b7b4/64 scope link
       valid_lft forever preferred_lft forever
    inet6 ff02::1/128 scope global
       valid_lft forever preferred_lft forever

使用DHCPv6

如果您的路由被设置成使用DHCPv6,那么您的客户端将同样需要安装net-misc/dhcpv6 软件包。在做完这些之后,您需要编辑/etc/dhcp6c.conf来配置您的客户端。

代码 6.2: dhcp6c.conf例子

interface eth0 {
        send rapid-commit;
        request domain-name-servers;
        iaid 11111;
        renew-time 11000;
};

7.  其他资源

这里有很多关于IPv6的在线资源。

网站 资源
www.ipv6.org General IPv6 Information
www.linux-ipv6.org/ USAGI Project
www.deepspace6.net Linux/IPv6 site
www.kame.net *BSD implementation

在IRC上,您可以试试Freenode上的 #ipv6。您可以使用一个支持IPv6的客户端来连接irc.ipv6.freenode.net以便连接到Freenode服务器。



打印

更新于2011年 3月 2日

本翻译的原始版本已经不再被维护

总结: 这篇文章将指导你在Gentoo系统上安装配置IPv6。内容包括使用隧道代理来建立隧道, 一些基本的DNS设置以及配置客户端使得系统能够连接IPv6的地址。

Peter Johanson
开发者

Jorge Paulo
编辑

Sven Vermeulen
编辑, 校对

Camille Huot
编辑

Pasi Valminen
编辑

Joshua Saddler
编辑

杨扬
译者

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.