分享
 
 
 

FreeBSD实现基于KAME计划对IPv6的支持

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

自从 FreeBSD 4.0之后,系统就已经内置对IPv6的支持了,FreeBSD的IPv6实现都基于KAME计划。需要注意的是,并不是KAME计划中的所有内容和最新更改都加入FreeBSD系统中,一些特性并没有成为FreeBSD系统的一部分,但KAME可以完整的运行在FreeBSD系统中,事实上,他们的开发工作都是基于BSD Unix的,因此也可以下载他们的最新发布的代码,得到更完整、但处于试验目的的IPv6支持。

1) IPv6 支持

如果没有因为定制系统取消 IPv6支持,FreeBSD已经支持IPv6,由于IPv6的自动配置特征,就为网络界面设置了一个缺省地址。

$ ifconfig sis0 inet6

sis0: flags=8843 mtu 1500

inet6 fe80::2d0:9ff:fea3:49fa%sis0 prefixlen 64 scopeid 0x1

命令行中的 inet6就是表示IPv6地址,而地址形式为fe80::2d0:9ff:fea3:49fa%sis0,其中前缀fe80就是根据本地网络界面设置的IPv6地址类型,而最后八个字节为根据本地网卡的有关参数生成的数据,对于以太网卡,这就是MAC地址,而%sis0定义了地址所在的网络界面名字,这主要用于组播环境。后面的prefixlen定义了前缀长度,缺省情况下这种Ipv6地址使用64位前缀来区分网络地址和节点地址。而使用MAC地址作为节点地址,就极大的减轻了网络中地址分配的难题,简化了管理工作。而scopeid是一个索引,对于这种基于网络界面的地址用于表示网络界面的序号。

上面的地址是最基本的 IPv6地址,它的前缀都是fe80,主要用于内部网络之间的相互通信,如果需要和外部网络进行通信,就比较困难了,因为这难以设置路由。更标准的办法是为网络界面手工设置IPv6地址,由于IPv6的特性,通常仍然保留原有的fe80地址用于本地网络通信,而设置多个alias地址。

# ifconfig sis0 inet6 3ffe::12 prefixlen 48

如果网络中有 IPv6路由器存在的话,就不需要手工配置IPv6地址,系统会自动从路由器中获取网络地址(网络前缀),然后使用本地MAC地址填充,成为一个有效的、可路由的IPv6地址,这就是IPv6的自动配置功能,类似于IPv4网络中的DHCP协议。

# ifconfig sis0 inet6

sis0: flags=8843 mtu 1500

inet6 fe80::2d0:9ff:fea3:49fa%sis0 prefixlen 64 scopeid 0x1

inet6 3ffe:501:ffff:1000:2d0:9ff:fea3:49fa prefixlen 64 autoconf

上例中,第二个地址就是自动配置的地址,前面的前缀为 IPv6路由器中设置的,而autoconf就标示了这种类型的地址,这个地址与前面地址的区别就是它的路由已知,因而没有 ” %sis0 ” 这样的后缀。

为了支持 IPv6,除了地址设置之外,还需要设置诸如网关、一些系统sysctl变量以控制网络行为等等,以设置一个基本的IPv6环境。如果这些设置通过手工的方法来进行的话,通常比较麻烦,幸运的是,通过设置rc.conf变量,FreeBSD能自动配置IPv6基本环境。最基本的变量是 ” ipv6_enable ” ,它就包括了执行自动地址配置、添加组播路由等设置,而 ” ipv6_defaultrouter ” 就用于设置 IPv6的缺省路由地址等等。

有些应用程序, IPv4和IPv6差异比较大,系统提供了它们的IPv6对应版本,例如ping的IPv6版本ping6、ipfw的对应版本ip6fw等等,它们的用法通常是类似的。

# ping6 ::1

而另一些程序对于 IPv6和IPv4没有太大的差别,就可以直接使用IPv6地址,或者使用参数表示是IPv6。例如:

# route add -inet6 ::ffff:0.0.0.0 -prefixlen 96 ::1 -reject

# route add -inet6 ::0.0.0.0 -prefixlen 96 ::1 -reject

上述两个指令来源于系统的 rc.network6,用于屏蔽内部地址的数据包。而rc.network6就是系统IPv6初始设置脚本,通过这个脚本可以学习到更多的IPv6设置细节。

需要注意的,为了正常利用网络功能,需要对 IPv6地址进行域名解析,除了正确设置DNS服务器之外,还需要将一些缺省的地址,例如本地地址 ” ::1 ” , ” fe80::1%lo0 ” 等放入 /etc/hosts文件,事实上这都包括在系统缺省安装的hosts文件中了。

2) IPv6 网关支持

与 IPv4不同,IPv6的主机和网关差异比较大,在IPv4中,任何主机都可以打开路由功能,但它是被动的,等待其他系统认可才可以。而在IPv6中,路由器需要主动广播自身,以便告诉网络内的系统进行自动网络配置,告诉上游的路由器设置正确路由。因此,这需要执行两步操作,首先要打开针对IPv6的包转发功能,然后还要运行rtadvd守护进程,进行路由器广播。

通常情况下,这需要设置 ” ipv6_gateway_enable ” 和 ” rtadvd_enable ” 两个变量为 ” Yes ” 。

然而,如果为了正确启动 rtadvd,还需要设置其配置文件,缺省位置为/etc/rtadvd.conf。

default::chlim#64:raflags#0:rltime#1800:rtime#0:retrans#0::pinfoflags#192:vltime#2592000:pltime#604800:mtu#0:

sis0::addrs#1:addr="3ffe:501:ffff:1000::":prefixlen#64:tc=default:

上面是一个简单的例子,但为了提高性能,必然需要对其中的参数进行更细的调整,以适合网络情况。

进一步,可以在系统中运行 route6d等路由交换协议,支持RIP6等动态路由数据交换协议。对于这些涉及比较复杂的路由设置、网络规划内容,由于不是本书主要关心的内容,因此对此感兴趣的FreeBSD用户可以阅读RFC以及有关资料,进一步深入研究IPv6。

3) 升级与迁移

虽然 IPv6肯定是未来网络协议的发展方向,但真正要全面升级到IPv6也是极不现实的,因为有太多的问题存在。因而,将网络移植到IPv6是一个逐步的过程,这个时候也不能脱离现有的网络,依靠现有的IPv4互联网能带来很多便利。因此,就需要一些额外的技术,例如虚拟通道和协议转换等,以便将新网络架构在旧有网络之上。

FreeBSD就对此提供了足够的支持,系统支持gif、stf和faith逻辑网络界面,以便能配置各种虚拟通道,进行协议转换。

u gif通道

人们可以在自己的局域网中非常简单的构建 IPv6网络,但一旦需要将多个IPv6的网络相互连接起来,就遇到种种问题。问题的关键在于,人们已经能够通过IPv4相互连接,因此就没有必要重新购置一套完整的IPv6连接设备。但如果直接在原有的IPv4网络设备上配置IPv6,一方面这些网络设备,是否全部支持IPv6仍然存在问题,另一方面这些网络设备也不一定属于同一个组织,网络设备繁多也对配置工作量提出了很多要求。

因此,直接修改网络设备的配置支持 IPv6是不现实的,而虚拟通道显然是一种有效的解决方法。就是说,将IPv6的数据包,重新使用IPv4包装一次,将这个包通过现有的IPv4网络传输到对方,就不必介意这个网络是否支持IPv6了。当对方接收到数据,再重新解开数据包,获得真实数据。这个过程就相当于一个虚拟的点对点连接的通道,可以将这个通道的端点映射为一个虚拟的网络界面,那么可以直接在这个网络界面上执行IPv6网络配置,而不需要考虑中间的具体传输过程了。

根据这个原则,就可以创建 gif虚拟通道,显然这需要涉及本地的IPv4地址、远端的IPv4地址,这样虚拟通道才能确定两个端点。

首先,创建虚拟通道需要创建虚拟通道设备,通常是 gif0、gif1等等,应该选用一个没有被使用的gif通道设备,或者重新创建它。注意,在FreeBSD 4.1之前,gif通道设备不能随意创建,而是在系统定制的时候确定的,就无法使用下面的创建命令。

# ifconfig gif create

gif0

# ifconfig gif0

gif0: flags=8010 mtu 1280

# ifconfig gif0 destroy

# ifconfig gif0 create

上面的过程展示了使用 create建立通道,使用destroy撤消通道,以及再次创建通道的过程,注意,第一次创建使用的是网络界面的类型,因此ifconfig将创建的设备名自动显示出来,具体的设备序号由系统按顺序确定。而第二次就直接使用一个不存在的虚拟设备名字,ifconfig将直接创建它。

然后就可以为通道指定两端的地址,这需要使用 gifconfig命令,其中第一个地址为本地地址,而第二个地址为对方地址。

# gifconfig gif0 inet 192.168.100.1 192.168.1.1

也可以将创建 gif虚拟界面指令和配置指令放在一起:

# ifconfig gif2 create tunnel 192.168.100.1 192.168.1.1

然后,就可以使用 ifconfig为gif0网络界面设置地址了。

# ifconfig gif0 inet6 3ffe::2 prefixlen 64

当然,真正要使用上面的通道进行通信,还必须在两端同时进行这样的配置,仅仅是一端是不够的。

为了在启动时自动设置 gif通道,首先需要设置gif_interfaces变量,包括具体需要设置的gif通道设备名,然后再对每个通道设备设置其端点地址。下面为设置范例:

gif_interfaces= ” gif0 gif1 ”

gifconfig_gif0= ” 192.168.100.1 192.168.1.1 ”

gifconfig_gif1= ” 192.168.10.1 192.168.111.1 ”

u stf通道

使用 gif通道可以将两个分离的IPv6网络通过IPv4网络连接起来,但是需要注意的是,这个设置需要两端同时手工进行,特别是需要配置特别多的连接的时候,那么

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有