这是 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 地址可能相当麻烦。因此,为了让生活更轻松,有一些规则
不要使用前导零。与 IPv4 相同。
使用冒号分隔每 16 位或两个字节。
当您有大量连续的零时,您可以将其写为 ::。但是,在一个地址中您只能执行一次此操作,并且仅适用于 16 位的数量。
地址 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,我们应该有一个支持它的内核。有很多关于如何实现这一目标的优秀文档。但这都归结为几个步骤
获取一个最新的 Linux 发行版,并带有合适的 glibc。
然后获取一个最新的内核源代码。
转到 /usr/src/linux 并输入
make menuconfig
选择 “网络选项”
选择 “IPv6 协议”、“IPv6:启用 EUI-64 令牌格式”、“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 |