6.1. IPv6 隧道

这是 Linux 隧道功能的另一个应用。它在 IPv6 早期采用者或先驱者中很受欢迎。下面描述的“动手”示例当然不是进行 IPv6 隧道的唯一方法。然而,这通常是在 Linux 和 Cisco IPv6 路由器之间进行隧道传输的方法,经验告诉我们,这正是许多人所追求的。十有八九这也适用于你 ;-)

关于 IPv6 地址的简要介绍

与 IPv4 地址相比,IPv6 地址非常大:128 位对 32 位。这为我们提供了我们所需要的:非常多的 IP 地址:确切地说是 340,282,266,920,938,463,463,374,607,431,768,211,465。除此之外,IPv6(或 IPng,即下一代 IP)应该为互联网骨干路由器提供更小的路由表、更简单的设备配置、更好的 IP 级别安全性以及更好的 QoS 支持。

示例:2002:836b:9820:0000:0000:0000:836b:9886

编写 IPv6 地址可能相当麻烦。因此,为了让生活更轻松,有一些规则

地址 2002:836b:9820:0000:0000:0000:836b:9886 可以写成 2002:836b:9820::836b:9886,这样更友好一些。

另一个例子,地址 3ffe:0000:0000:0000:0000:0020:34A1:F32C 可以写成 3ffe::20:34A1:F32C,这样更短。

IPv6 旨在成为当前 IPv4 的继任者。由于它是一项相对较新的技术,因此目前还没有全球性的原生 IPv6 网络。为了能够快速前进,引入了 6bone。

原生 IPv6 网络通过将 IPv6 协议封装在 IPv4 数据包中,并通过现有的 IPv4 基础设施将它们从一个 IPv6 站点发送到另一个 IPv6 站点来相互连接。

这正是隧道介入的地方。

为了能够使用 IPv6,我们应该有一个支持它的内核。有很多关于如何实现这一目标的优秀文档。但这都归结为几个步骤

如果您一切准备就绪,那么您可以继续编译一个支持 IPv6 的内核

提示:不要选择“模块”选项。通常这不会很好地工作。

换句话说,将 IPv6 编译为内核中的“内置”。然后您可以像往常一样保存您的配置,并继续编译内核。

提示:在执行此操作之前,请考虑编辑 Makefile:EXTRAVERSION = -x ; --> ; EXTRAVERSION = -x-IPv6

有很多关于编译和安装内核的优秀文档,但是本文档是关于其他内容的。如果您在此阶段遇到问题,请查找有关根据您自己的规范编译 Linux 内核的文档。

文件 /usr/src/linux/README 可能是一个好的开始。在您完成所有这些操作并使用全新的内核重新启动后,您可能需要发出“/sbin/ifconfig -a”并注意全新的“sit0-device”。 SIT 代表简单互联网过渡。您可以给自己一个赞扬;您现在离下一代 IP 更近了一步 ;-)

现在进入下一步。您想将您的主机,甚至可能是您的整个 LAN 连接到另一个支持 IPv6 的网络。这可能是专门为此特定目的而设置的 “6bone”。

假设您有以下 IPv6 网络:3ffe:604:6:8::/64,并且您想将其连接到 6bone 或朋友。请注意,/64 子网表示法的工作方式与常规 IP 地址相同。

您的 IPv4 地址是 145.100.24.181,而 6bone 路由器的 IPv4 地址是 145.100.1.5

# ip tunnel add sixbone mode sit remote 145.100.1.5 [local 145.100.24.181 ttl 255]
# ip link set sixbone up
# ip addr add 3FFE:604:6:7::2/126 dev sixbone
# ip route add 3ffe::0/16 dev sixbone

让我们讨论一下。在第一行中,我们创建了一个名为 sixbone 的隧道设备。我们为其设置了模式 sit(即 IPv6 over IPv4 隧道),并告诉它要连接到的远程地址(remote)和本地地址(local)。TTL 设置为最大值 255。

接下来,我们激活了设备(up)。之后,我们添加了自己的网络地址,并为 3ffe::/15(目前是整个 6bone)设置了通过隧道的路由。如果您运行此命令的特定机器是您的 IPv6 网关,请考虑添加以下行

# echo 1 >/proc/sys/net/ipv6/conf/all/forwarding
# /usr/local/sbin/radvd

后者 radvd 就像 zebra 一样,是一个路由器通告守护程序,用于支持 IPv6 的自动配置功能。如果您愿意,请使用您最喜欢的搜索引擎搜索它。您可以检查如下内容

# /sbin/ip -f inet6 addr

如果您碰巧在您的 IPv6 网关上运行了 radvd,并在您本地 LAN 中的机器上启动了支持 IPv6 的 Linux,您将能够享受 IPv6 自动配置的好处

# /sbin/ip -f inet6 addr
1: lo: <LOOPBACK,UP> mtu 3924 qdisc noqueue inet6 ::1/128 scope host

3: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100
inet6 3ffe:604:6:8:5054:4cff:fe01:e3d6/64 scope global dynamic
valid_lft forever preferred_lft 604646sec inet6 fe80::5054:4cff:fe01:e3d6/10 
scope link

您可以继续配置您的 bind 以支持 IPv6 地址。A 类型具有 IPv6 的等效项:AAAA。in-addr.arpa 的等效项是:ip6.int。关于这个主题有很多可用的信息。

越来越多的支持 IPv6 的应用程序可用,包括安全 shell、telnet、inetd、Mozilla 浏览器、Apache Web 服务器以及许多其他应用程序。但这都超出了本路由文档的范围 ;-)

在 Cisco 方面,配置将如下所示
!
interface Tunnel1
description IPv6 tunnel
no ip address
no ip directed-broadcast
ipv6 enable
ipv6 address 3FFE:604:6:7::1/126
tunnel source Serial0
tunnel destination 145.100.24.181
tunnel mode ipv6ip
!
ipv6 route 3FFE:604:6:8::/64 Tunnel1
但是,如果您没有 Cisco 可用,请尝试互联网上提供的许多 IPv6 隧道代理之一。他们愿意为您配置他们的 Cisco 并提供额外的隧道。主要通过友好的 Web 界面。在您最喜欢的搜索引擎上搜索“ipv6 隧道代理”。