在 Linux 平台及 IPv4 环境中构建 IPv6局域网 测试环境
在 Linux 平台及 IPv4 环境中构建 IPv6 测试环境
1 IPv6简介
IPv6(Internet Protocol Version 6)作为 IPv4 的升级版本,它是作为一共软件升级安装在设备和
操作系统中。为什么需要使用 IPv6,一个最直接的答案就是目前广泛应用的 IPv4 已经无法提供足够的 IP 地址来满足迅速增长的网络。IPv4 采用32位地址长度,只有大约43亿个地址,很快就将被分配完毕。而 IPv6 采用128位的地址长度,几乎可以不受限制的提供地址。当然扩大地址空间只是 IPv6 的众多优势中的重要一项,除此之外,IPv6 还能够提高网络的整体吞吐量、改善服务质量(QoS)、安全性有更好的保证、支持即插即用和移动性、更好实现多播功能等等。
2 在 IPv4 环境中模拟 IPv6 网络
正如上节中所述,目前许多与网络应用相关的软件已经加入了对 IPv6 的支持,更有大量的软件正在处于对 IPv6 支持的开发阶段。但是就开发而言,目前许多开发环境并没有对 IPv6 提供很好的支持,尤其当所开发的应用需要经过较老的路由甚至公共网络时。如果希望通过升级网络设备来支持开发环境,将是一笔不小的花费,有时甚至是不现实的(比如短期内升级公共网络支持 IPv6)。
研究如何在现有的 IPv4 网络环境中模拟出 IPv6 环境,使得开发和测试工作能够顺利进行,显得尤为重要。
2.1 IPv6 网络要求及现有的网络环境
图1显示了典型的 HTTP 网络应用,如果需要对这样的网络应用提供 IPv6 的支持,开发和测试人员可能会碰到如下三种情形:
客户端和服务器运行于同一个局域网中,如图1-a
客户端和服务器运行于同一个 Intranet 中,它们之间的网络通路需要经过路由,如图1-b
客户端和服务器分别处于不同的地域,它们之间由 Internet 提供连接,如图1-c。
图 1. 三种典型的 HTTP 网络应用
在这三种不同的情形下,IPv6 的网络环境要求是不同的。对于情形1,只需客户端和服务器所运行的操作系统支持 IPv6 即可通过 IPv6 协议进行通信,若需要提供 Global 地址的通信,则可以通过在局域网内的某台机器上运行一个软件 IPv6 路由来支持,因此其针对 IPv6 的开发和测试相对简单。 对于情形2,由于客户端和服务器之间经过运行于 IP 层的路由,因此要求网络通路上经过的所有路由器均支持 IPv6。 这可能是一个不小的挑战,因为很多 Intranet 环境并没有提供支持 IPv6 的路由。对于情形3,这就要求 Internet 提供 IPv6的支持,就短期看来,Internet 提供全面的 IPv6 支持还不太可能。
因此,在情形2和情形3的环境中,网络硬件支持将成为开发和测试支持 IPv6 的网络应用程序的最大障碍,在2.2节中将给出如何运用现有的 IPv4 网络来进行 IPv6 应用程序的开发和测试,同时又保证其在真实的 IPv6 环境中正常运行。
2.2 利用现有 IPv4 网络模拟 IPv6 环境
2.2.1 模拟环境构建的基本原理
图2 - 图3显示了 IPv6 模拟环境的框图,这里存在两种情形,但具体的配置是类似的。
对于开发客户端 IPv6 应用程序,其框图如 图2;而对于开发服务器端 IPv6 应用程序,其框图如 图 3 。其基本原理就是利用代理技术将原来被 IPv4 网络阻断的客户端或服务器端映射到位于同一局域网内的代理服务器上,这样“客户端”与“服务器端”就可以进行基于 IPv6 的网络通信了。 在 图2 中,我们需要代理服务器与客户端运行于同一局域网中,在客户端看来,此代理服务器是一个具备了 IPv6 支持能力的“服务器”,即使真正的服务器端并没有支持 IPv6 ,也可以进行客户端的开发和测试。在 图3中,我们需要一台机器与服务器端运行于同一局域网中,在服务器端看来,此代理服务器是一个具备了 IPv6 支持能力的“客户端”。
图 2. 利用代理将服务器端映射到与客户端同一局域网内
图 3. 利用代理将客户端映射到与服务器端同一局域网内
下面仅以客户端的IPv6环境为例来讲述整个模拟环境的构建过程。
2.2.2 环境的建立
操作系统平台: Linux(Centos),内核需支持 IPv6,2.6以上版本最佳,
软件: radvd(Router ADVertisement Daemon),
这是一个运行于 Linux 平台之上的提供 IPv6 路由配置信息的软件,可以替代 IPv6 路由来进行无状态的地址自动配置。
2.2.3 启动 radvd
IPv6 的地址获取方式与 IPv4 有所不同。在 IPv4 中,主机 IP 地址的自动配置必须由 DHCP 服务器来支持,这被称为有状态的自动配置(StatefulAutoconfiguration);而在 IPv6 中,除了 DHCP 的 v6版本,还引入了无状态的自动配置( StatelessAutoconfiguration )。这项新技术无需 DHCP 服务器支持,所有支持 IPv6 的路由器都监听各主机发送的自动配置请求包, IPv6 路由器对这类请求包的回复里面包含了一些 IPv6 地址的前缀( prefix )信息,主机在收到这样的包以后,可以根据自己的一些已有信息(比如 MAC 地址),生成自己的 IPv6 地址。
本文是在现有的 IPv4 网络环境中模拟 IPv6 环境,自然不存在物理的 IPv6 路由器,但是通过 Linux 平台上的 radvd 工具也可以模拟无状态自动配置,它同样可以监听局域网内各 IPv6 主机发送的自动配置请求并作出响应,这样,这些主机就可以获得各自的 IPv6 地址,并利用这些地址进行相互间的通信。而图X中的客户端正是使用这种方式与代理服务器通信的。
1. 使用命令yum install radvd 安装radvd
2.配置运行 radvd 的主机的 IPv6 地址信息
# ip a a 2002:9ba:b4e:6::1/64 dev ethX
# ip r a 2002:9ba:b4e:6::/64 dev ethX
这里的 ethX 表示的是此主机监听局域网数据包的网卡设备
3.确保系统启动了对 IPv6 数据包的转发功能
# sysctl -w net.ipv6.conf.all.forwarding=1
或者 永久添加 :在/etc/sysctl.conf 中配置 net.ipv6.conf.all.forwarding = 1
4.radvd 安装后其配置文件位于 /etc/radvd.conf ,在这个文件中加入配置信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
interface eth0 { AdvSendAdvert on; MinRtrAdvInterval 5; MaxRtrAdvInterval 10; AdvDefaultPreference low; prefix 2002:9ba:b4e:6::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr off; }; }; |
同上,这里的 ethX 表示的是此主机监听局域网数据包的网卡设备。prefix 段表明了该局
域网配置 IPv6 地址的前缀。
5.启动 radvd
# /etc/init.d/radvd start
或者:service radvd start
在 radvd 启动成功后,通过 ps -ef | grep radvd 命令可以看到系统中有一个 radvd 的 daemon 进程处于运行状态。若对局域网中的其他主机运行 ifconfig 命令可以看到这些主机已经自动配置了 IPv6 地址,其前缀( prefix )与 radvd 配置文件中的值一致
6.配置优化:
第2步和第3步在系统重启后配置将会丢失,我们可以通过修改配置文件的方法让配置在系统重启后依然生效,具体配置如下:
1、依次执行以下命令
#cd /etc/sysconfig
#vi network
添加以下内容:
NETWORKING_IPv6=yes
IPV6FORWARDING=yes
IPV6INIT=yes
IPV6_DEFAULTGW=2002:db8:1:0::A%eth0
2、修改文件:/etc/sysconfig/network-scripts/ifcfg-eth0
添加以下内容:
IPV6INIT=yes
IPV6to4INIT=yes
IPV6FORDING=yes
IPV6ADDR=2002:db8:1:0::1/64
3、修改文件/etc/sysctl.conf
添加以下内容:
net.ipv6.conf.all.forwarding = 1
在 Linux 平台及 IPv4 环境中构建 IPv6局域网 测试环境的更多相关文章
- 170522、Linux 平台通过 nginx 和 vsftpd 构建图片服务器
Nginx WEB 服务器 Nginx 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第 ...
- 在linux环境下搭建java web测试环境(非常详细!!)
一.项目必备软件及基本思路 项目必备:虚拟机:VMware Workstation (已安装linux的 CentOS6.5版本) 项目:java web项目 (必须在本地部署编译后选择项目的webR ...
- 在linux环境下搭建java web测试环境(非常详细!)
一.项目必备软件及基本思路 项目必备:虚拟机:VMware Workstation (已安装linux的 CentOS6.5版本) 项目:java web项目 (必须在本地部署编译后选择项目的webR ...
- 开发环境无错,部署至测试环境报错“NoSuchMethodError”OR"NoSuchClassError"
背景: 实现一个简单的功能,需要用到jedis的jar包连接Redis.在之前便已经有使用jedis,它的版本比较旧,是2.1的.而新实现的功能,在编码的时候使用的是2.8的.在开发环境完成单元测试后 ...
- linux环境中 对tomcat配置java环境
JAVA_OPTS="$JAVA_OPTS -Xms1024m -Xmx2048m -XX:MaxPermSize=512m" JAVA_HOME="/weblogic1 ...
- 判断H5页面是在小程序的webview环境中,还是在微信环境中,还是不在微信
<script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js" type="text/javascrip ...
- 在centos中安装jenkins master测试环境
在centos中安装jenkins 1)安装目录 pwd (/home/AAA) 2)检查java是否安装 [AAA@Centos_AAA jenkins]$ java -version j ...
- Linux 目录操作和4中文件拷贝效率测试
/*1.用户输入任意目录名称,显示该目录下的文件列表信息,包括文件类型,文件权限,文件大小,文件名称2.拷贝用户输入的文件到当前目录下3.第二点功能,使用4种方式完成,并比较说明效率*/ /* str ...
- 项目版本不同导致Eclipse报错问题——关于在JDK1.7环境中,运行JDK1.8环境下编写的项目
本人电脑环境配置的是JDK1.7,朋友的是JDK1.8 ,我把她编的java文件导入到我电脑里的Eclipse(LUNA版本)的时候,项目出现一个红色叹号,当然运行是肯定出错了.SO我就开始了解决之旅 ...
随机推荐
- Python GIL锁
GIL全局解释器锁:为了解决多线程修改同一块数据. python的线程是调用操作系统的源生线程,启动时就是调用C语言的C源生接口,python调用C语言接口的线程去执行任务时,必须上下文对应关系传给C ...
- 牛客练习赛26—D xor序列 —线性基
这是我第一次写关于线性基的题目.其实这题很好理解,先把给出的数能异或出的值给存在p数组里面,p[i]代表着该异或出的数的最高位为第i位且为1. 求出来后,再把x,y处理下,然后直接一位一位的判断是否为 ...
- 阿里技术专家详解Dubbo实践,演进及未来规划
https://mp.weixin.qq.com/s/9rVGHYfeE8yM2qkSVd2yEQ
- Mac OS X 显示和隐藏文件
参考: mac系统如何显示和隐藏文件 Mac OSX系统 显示和隐藏文件 1.显示隐藏文件: 打开Terminal,并输入以下命令: defaults write com.apple.finder A ...
- Vue常见组件
每一个组件都是一个vue实例 每个组件均具有自身的模板template,根组件的模板就是挂载点 每个组件模板只能拥有一个根标签 子组件的数据具有作用域,以达到组件的复用 根组件 <div id= ...
- 本地构建:Gulp
Gulp中文网:https://www.gulpjs.com.cn/ Gulp英文网:https://gulpjs.com/ Gulp:工作流程自动化+强化 (一)安装初始化 (二)基础API及插件 ...
- js 字符串,new String() 与 String()
function showCase(value) { switch(value) { case 'A': console.log('Case A'); break; case 'B': console ...
- 第 8 章 容器网络 - 064 - Weave 网络结构分析
Weave 网络结构分析 在 host1 中运行容器 bbox1: eval $(weave env) docker run --name bbox1 -itd busybox 首先执行 eval $ ...
- RabbitMQ(3) Spring boot集成RabbitMQ
springboot集成RabbitMQ非常简单,如果只是简单的使用配置非常少,springboot提供了spring-boot-starter-amqp项目对消息各种支持. 资源代码:练习用的代码. ...
- hdu-5009 Paint Pearls DP+双向链表 with Map实现去重优化
http://acm.hdu.edu.cn/showproblem.php?pid=5009 题目要求对空序列染成目标颜色序列,对一段序列染色的成本是不同颜色数的平方. 这题我们显然会首先想到用DP去 ...