在 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局域网 测试环境的更多相关文章

  1. 170522、Linux 平台通过 nginx 和 vsftpd 构建图片服务器

    Nginx WEB 服务器 Nginx 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第 ...

  2. 在linux环境下搭建java web测试环境(非常详细!!)

    一.项目必备软件及基本思路 项目必备:虚拟机:VMware Workstation (已安装linux的 CentOS6.5版本) 项目:java web项目 (必须在本地部署编译后选择项目的webR ...

  3. 在linux环境下搭建java web测试环境(非常详细!)

    一.项目必备软件及基本思路 项目必备:虚拟机:VMware Workstation (已安装linux的 CentOS6.5版本) 项目:java web项目 (必须在本地部署编译后选择项目的webR ...

  4. 开发环境无错,部署至测试环境报错“NoSuchMethodError”OR"NoSuchClassError"

    背景: 实现一个简单的功能,需要用到jedis的jar包连接Redis.在之前便已经有使用jedis,它的版本比较旧,是2.1的.而新实现的功能,在编码的时候使用的是2.8的.在开发环境完成单元测试后 ...

  5. linux环境中 对tomcat配置java环境

    JAVA_OPTS="$JAVA_OPTS -Xms1024m -Xmx2048m -XX:MaxPermSize=512m" JAVA_HOME="/weblogic1 ...

  6. 判断H5页面是在小程序的webview环境中,还是在微信环境中,还是不在微信

    <script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js" type="text/javascrip ...

  7. 在centos中安装jenkins master测试环境

    在centos中安装jenkins   1)安装目录 pwd (/home/AAA)   2)检查java是否安装 [AAA@Centos_AAA jenkins]$ java -version  j ...

  8. Linux 目录操作和4中文件拷贝效率测试

    /*1.用户输入任意目录名称,显示该目录下的文件列表信息,包括文件类型,文件权限,文件大小,文件名称2.拷贝用户输入的文件到当前目录下3.第二点功能,使用4种方式完成,并比较说明效率*/ /* str ...

  9. 项目版本不同导致Eclipse报错问题——关于在JDK1.7环境中,运行JDK1.8环境下编写的项目

    本人电脑环境配置的是JDK1.7,朋友的是JDK1.8 ,我把她编的java文件导入到我电脑里的Eclipse(LUNA版本)的时候,项目出现一个红色叹号,当然运行是肯定出错了.SO我就开始了解决之旅 ...

随机推荐

  1. 自制操作系统Antz(3)——进入保护模式 (中) 直接操作显存

    Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...

  2. sql语句修改字段约束为不为空 并为其设置主键

    alter table Drc_Project_Review alter column ReviewID uniqueidentifier not nullalter table Drc_Projec ...

  3. WDTP注册破解

    简介 WDTP 不止是一款开源免费的 GUI 桌面单机版静态网站生成器和简单方便的前端开发工具,更是一款跨平台的集笔记.个人知识管理.写作/创作.博客/网站内容与样式管理等功能于一体的多合一内容处理/ ...

  4. Pandas 基础(8) - 用 concat 组合 dataframe

    以各个城市的天气为例, 先准备下面的数据: 印度天气的相关信息: import pandas as pd india_weather = pd.DataFrame({ 'city': ['mumbai ...

  5. Android外包团队——Jquery乱码解决方案

    最近使用jQuery遇到中文乱码问题,其实他的中文乱码就是因为contentType没有指定编码,只需在jQuery.js中搜索’contentType’ 然后在application/x-www-f ...

  6. ES6标准之基础

    let和const命令 ES6新增let命令,用于声明变量,是块级作用域. let声明的变量不会像var声明的变量发生“变量提升”现象,所以,变量一定要在声明后使用,不然就会报错. 暂时性死区:只要块 ...

  7. springCloud全家桶

    Spring Cloud 入门教程(一): 服务注册 eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳,在默认情况下erureka server也是一个eure ...

  8. Angular 学习笔记 (久久没有写 angular 常会忘记的小细节)

    由于经常跑去写后端, 而且一些就几个月...很多 ng 的东西就忘掉了. 写在这里方便复习呗. 1. async pipe 没有 resolve 前返回的值是 null 2 view componen ...

  9. [数据结构]P1.2 队列

    * 注: 本文/本系列谢绝转载,如有转载,本人有权利追究相应责任. 2019年4月8日 Stan Zhang 2019年4月8日  格物致知,经世致用. 队列是一种先进先出FIFO的模型,常见操作有: ...

  10. jTimer

      很多时候我们需要按时间间隔执行一个任务,当满足一定条件时停止执行.此插件旨在解决这一经常遇到的问题. jTimer: (function ($) { $.extend({ timer: funct ...