在网络应用中,客户端一般使用域名来访问服务器端。在测试 IPv6 的环境中,必须使用 IPv6 的地址来访问,这就需要一个支持 IPv6 的 DNS 域名服务器,对于一定的域名返回其 IPv6 的地址。目前可以使用在 Linux 平台的 BIND 9 来搭建这样的 DNS 服务器。但是其配置相对比较复杂,还可以使用一种相对简便的方法。即利用 Linux 和 Windows 平台均支持的 hosts 文件来配对域名与其相应的 IPv6 地址。这需要在客户端的相应 hosts 文件中加入一些 IPv6 地址的配置信息。
在 Linux 平台上,hosts 文件一般位于 /etc/hosts,在此文件中加入如下一行:
2002:9ba:b4e:6::3
这样就指定了 的 IPv6 地址为 2002:9ba:b4e:6::3。而在 Windows 平台上 hosts 文件位于 %WINDIR%\System32\drivers\etc\hosts,其格式与 Linux 平台上相同。
2.3 IPv6 和 IPv4 混合环境兼容性测试
从 IPv4 到 IPv6 的过渡是一个漫长而复杂的过程,不可能在短期内实现完全转换,所以在产品的开发及测试过程中除了考虑 IPv6 网络内的通讯还需要充分考虑现实网络环境中很可能出现的 IPv6 网络和 IPv4 网络的混合环境,这就需要测试应用程序在此环境下的兼容性。 本节将介绍一些需要模拟的情况。
模拟以下3种网络情况首先都需要在现有的 IPv4 局域网环境中选择一台机器作为路由服务器,并按照2.2.3节的描述进行相关配置。这样与该路由连接于同一个 Switch 上的计算机都将会被自动分配一个 IPv6 的地址。如果仍然没有获得 IPv6 的地址,请关闭计算机和路由服务器上的防火墙。然后按照 2.2.4 节中的描述选择一台计算机设置为 ProxyPass。
2.3.1客户端和服务器端均运行于 IPv6 的网络环境
这种情况的验证相对比较简单,只需要在客户端将服务器的地址设为前面配置的 ProxyPass 的 IPv6 的地址便能实现客户端和服务器端 IPv6 到 IPv6 的交互。这就是2.2节介绍的情况。
图 4. 客户端和服务器端均运行于 IPv6 的网络环境
图 4. 客户端和服务器端均运行于 IPv6 的网络环境
2.3.2 客户端运行于 IPv6 网络,服务端运行于 IPv4 网络
对于客户端和服务器端分别处于 IPv6 和 IPv4 环境的情况,需要在局域网环境中增加代理 (proxy) 作为两者之间的桥梁,该代理与上述路由服务器位于同一个网络之中,因而也拥有 IPv6 的地址和 IPv4 的地址。客户端所设置的目的服务器端地址为 IPv4 的地址,设置的代理地址为该代理的 IPv6 的地址,这样客户通过 IPv6 协议与代理直接进行通讯,而代理接受到客户端所设置的 IPv4 格式的服务器地址后则通过 IPv4 协议与服务端交互,这样便模拟实现了客户端位于 IPv6 网络而服务器端位于 IPv4 网络的情况。
图5客户端运行于 IPv6 网络,服务端运行于 IPv4 网络
图 5. 客户端运行于 IPv6 网络,服务端运行于 IPv4 网络
2.3.3 客户端运行于 IPv4 网络,服务端运行于 IPv6 网络
模拟位于 IPv4 网络中的客户端与位于 IPv6 网络中的服务器端进行交互需要使用 Proxy 和 ProxyPass 来进行环境搭建。客户端将 ProxyPass 所在的 IPv6 的地址设置为服务器端的地址,将 Proxy 所在的 IPv4 的地址设置为代理的地址,这样客户端与代理之间通过 IPv4 协议进行通讯。代理在获取到客户端所配置的 IPv6 协议的 ProxyPass 地址后将通过 IPv6 协议与 ProxyPass 进行交互。ProxyPass 收到客户端发送的请求后将通过 IPv4 的协议发送给真正的位于 IPv4 网络中的服务器进行处理。这样在客户端就模拟实现了 IPv4 网络到 IPv6 网络的通讯。
图6客户端运行于 IPv4 网络,服务端运行于 IPv6 网络
图 6. 利用代理将客户端映射到与服务器端同一局域网内
3 总结
在本文中,我们通过使用现有的 IPv4 网络配合 Linux 平台上的 Apache 服务器,达到了模拟 IPv6 的 HTTP/HTTPS 网络环境的目的,从而可以在有限的硬件资源之下开发和测试网络应用软件对 IPv6 的支持。这项技术还可以应用到其他的网络协议之上,只需使用具备类似于 Apache 服务器转发技术的代理服务器。因此这项技术具有一定的通用性