×

Linux的高级路由和流量控制:用Cisco和6bone实现IPv6

hqy hqy 发表于2019-03-26 11:08:54 浏览2582 评论0

抢沙发发表评论

1. IPv6隧道

这是Linux隧道能力的另一个应用。这在IPv6的早期实现中非常流行。下面动手试验的例子当然不是实现IPv6隧道的唯一方法。然而,它却是在Linux与支持IPv6的CISCO路由器之间搭建隧道的常用方法,经验证明多数人都是照这样做的。八成也适合于你?。

简单谈谈IPv6地址:

相对于IPv4地址而言, IPv6地址非常大,有128bit而不是32bit。这让我们得到了我们需要的东西——非常非常多的IP地址。确切地说,有340,282,266,920,938,463,463,374,607,431,768,211,465个。同时,IPv6(或者叫Ipng,下一代IP)还能让Internet上的骨干路由器的路由表变得更小、设备的配置更简单、IP层的安全性更好以及更好地支持QoS。

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

写下一个IPv6地址确实是件麻烦事。所以我们可以使用如下规则来进行简化 :

? 数字打头的零不要写,就像IPv4一样。
? 每16bit或者两个字节之间使用冒号分隔。
? 当出现很多连续的零时可简写成“::”。在一个地址中只能使用一次。

例如:地址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网络中的站点通过现有的IPv4体系互联,把IPv6数据包封装在IPv4数据包中进行传输。

这就是为什么引入隧道机制的原因。

为了能够使用IPv6,我们需要一个能够支持它的内核。现在有很多文档都很好地说明了这个问题。不外乎以下几步:

? 找到一个新版的Linux发行版,要有合适的glibc库。
? 找到一份最新的内核源代码。

都准备好了以后,就可以继续编译一个带IPv6支持的内核了:

? cd /usr/src/linux
? make menuconfig
? 选择“Networking Options”
? 选择“The IPv6 protocol”、“IPv6: enable EUI-64 token format”, “IPv6: disable provider based addresses”

提示:不要编译成内核模块,那样经常会出问题。换句话说,就是把IPv6内置入内核。

然后你就可以象往常一样保存配置并编译内核了。

提示:在编译之前,可以修改一下Makefile,把EXTRAVERSION = -x变成EXTRAVERSION = -x-IPv6

有很多文档都很好地说明了如何编译并安装一个内核,我们这篇文档不是讨论这个问题的。如果你在这个过程中出现了问题,请参阅合适的资料。你可以先看看/usr/src/linux/README。

当你完成之后,用新的内核重启系统,你可以输入“/sbin/ifconfig -a”看看有没有新的“sit0-device”设备。SIT的意思是“简单Internet过渡”(Simple Internet Transition)。如果到这里没有问题,你就可以奖励自己了,你已经向着下一代IP网络迈进了一大步。

现在继续下一步。你需要把你的主机,或甚至整个局域网连接到另外一个IPv6网络上。这个网络很可能是“6bone”,它就是为了这个特定的目的而专门设立的。

让我们假定你有如下IPv6网络: 3ffe:604:6:8::/64,并且希望连接到6bone,或者其他地方。请注意,/64这个子网声明的意义与IPv4相同。

你的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

让我们讨论一下。第1行,我们创建了一个叫做sixbone的隧道。设置为sit (让IPv4隧道承载IPv6数据包)模式,并设置对端与本端IP。TTL设为最大——255。

下一步,我们激活(up)了这个设备。然后添加我们自己的网络地址,并设置利用隧道通往3ffe::/15 (which is currently all of 6bone) 的路由。如果你运行这个的这台机器是你的IPv6网关,就得考虑运行下面的命令:

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

下面的一行,radvd是一个类似于zebra的路由公告守护程序,用来支持IPv6的自动配置特性。如果感兴趣的话就用你最喜欢的搜索引擎找一找。你可以检查一下:

# /sbin/ip -f inet6 addr

如果你的Linux网关支持IPv6且运行了radvd,在局域网上启动后,你就可以享受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

你可以继续进行了,为IPv6配置你的bind。与A记录等价的,支持IPv6的记录类型是“AAAA”。与in-addr.arpa等价的是“ip6.int”。这方面可以找到很多信息。

支持IPv6的应用系统曾在增加,包括ssh、telnet、inetd、Mozilla浏览器、Apache WEB浏览器??。但那些都不是这个路由文档所应该涉及的。

作为Cisco系统,应该这样配置:

!
interface Tunnel1
description IPv6 tunnel
no ip address
no ip directed-broadcast
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作为disposal,试试Internet上的众多IPv6隧道提供者之一。 他们愿意在他们的Cisco设备上为你额外创建一个隧道。大部分是友好的WEB界面。用你常用的搜索引擎搜索一下“ipv6 tunnel broker”。


打赏

本文链接:https://www.kinber.cn/post/428.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客