第一步,在 online server 192.168.8.142上安装并运行 tcpcopy daemon :
我们从github上下载1.0版本的源码包;
wget -O tcpcopy-1.0.0.tar.gz
安装依赖包;
yum -y install libpcap-devel
解压编译和安装;
tar xf tcpcopy-1.0.0.tar.gz
cd tcpcopu-1.0.0
make && make install
最后运行 tcpcopy;
tcpcopy -x 80-192.168.8.132:80 -s 192.168.8.130 -c 192.168.100.x -d -C 4 -l tcpcopy.log -P /var/run/tcpcopy.pid
/usr/local/tcpcopy/sbin/tcpcopy -x 80-192.168.240.145:21080 -s 192.168.240.150 -c 192.168.99.x -d -C 4 -l tcpcopy.log -P /var/run/tcpcopy.pid
/usr/local/tcpcopy/sbin/tcpcopy -x 80-192.168.240.145:21080 -s 192.168.240.150 -c 192.168.99.x -d -C 4 -l tcpcopy.log -P /var/run/tcpcopy.pid (此外为80---》21080结果无法进行复制)
改成:
/usr/local/tcpcopy/sbin/tcpcopy -x 80-192.168.240.145:80 -s 192.168.240.150 -c 192.168.99.x -d -C 4 -l tcpcopy.log -P /var/run/tcpcopy.pid (80--》80 复制OK)
第二步,在 auxiliary server 192.168.8.130上安装并运行 intercept daemon :
从github上下载1.0版本的源码包;
wget -O intercept-1.0.0.tar.gz
安装依赖包;
yum -y install libpcap-devel
解压编译和安装;
tar xf intercept-1.0.0.tar.gz
cd intercept-1.0.0
./configure
make && make install
最后运行 intercept;
intercept -i eth0 -l intercept.log -P /var/run/intercept.pid -F 'tcp and src port 80' -d
/usr/local/intercept/sbin/intercept -i em1 -l intercept.log -P /var/run/intercept.pid -F 'tcp and src port 80' -d
成功运行后可以观察到的网路连接状态:
# ss -an
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 *:36524 *:*
ESTAB 0 0 192.168.8.130:36524 192.168.8.142:46195
ESTAB 0 0 192.168.8.130:36524 192.168.8.142:46193
第三步,在 test server 192.168.8.132上设置一条路由 :
route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.8.130
route add -net 192.168.99.0 netmask 255.255.255.0 gw 192.168.240.150
##删除路由
route del -net 192.168.99.0 netmask 255.255.255.0
成功运行测试时可以观察到的网络连接状态:
# ss -an
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
ESTAB 0 0 192.168.8.132:80 192.168.100.194:22147
ESTAB 0 0 192.168.8.132:80 192.168.100.223:50265
ESTAB 0 0 192.168.8.132:80 192.168.100.139:28300
ESTAB 0 0 192.168.8.132:80 192.168.100.155:56994
说明
从整个操作过程可以看出,基本的 tcpcopy 使用方法只需简单的三步:在线上机器运行 tcpcopy 复制流量,在辅助机上运行 intercept 捕获响应数据,最后仅需要在测试机上设置一条路由即可。
其中在线上机进行流量复制很容易理解:
tcpcopy -x 80-192.168.8.132:80 -s 192.168.8.130 -c 192.168.100.x -d -C 4 -l tcpcopy.log -P /var/run/tcpcopy.pid
即是将80端口收到的流量复制到测试机ip 192.168.8.132的80端口,并设置辅助机的ip地址为192.168.8.130,且将复制过去的流量中的源地址统一更改为192.168.100.x,这样做的好处是我们在测试机上可以直接针对整个更改后的网段设置一条路由即可。
其次是辅助机:
intercept -i eth0 -l intercept.log -P /var/run/intercept.pid -F 'tcp and src port 80' -d
辅助机的 intercept 通过-F 参数制定捕获规则,捕获tcp连接中源端口为80的所有数据,也即是测试机的回应数据。其作用是将测试机路由过来的响应数据捕获下来,完成整个请求回应的流程且保证测试机产生的回应数据不会流向线上环境。intercept 会监听 tcp 36524 端口,并和线上机192.168.8.142的 tcpcopy 之间建立通信,我们通过ss命令可以观察到。需要注意的是辅助机和测试机一定要是同一网段。
最后,在测试机上需要进行的操作仅仅是添加一条路由这个简单:
route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.8.130
线上机tcpcopy复制流量时将源地址改写为192.168.100网段的地址,那么在测试机上看到的流量中源地址全部是来源于这个网段,我们仅仅需要将返回给这个网段的所有客户端的请求全部通过辅助机 192.168.8.130 路由出去,这样在辅助机上就可以对全部的回应包进行截获处理了。值得一提的是这种模式是在tcpcopy 1.0版本中对整个架构的一个改进,将原本需要运行在测试机上的intercept移除放到一个独立的辅助机上来,使得测试机需要做的操作少到仅仅是添加一条路由而已,对整个测试机的性能损耗可以忽略,排除了intercept运行在测试机上时产生的性能影响,使得测试数据更加接近真实水平。
通过以上几个简单的步骤,我们就已经具备了把线上流量复制到测试环境的能力,帮助我们对测试环境进行更加准确的评估,通常这种实时流量复制的测试方式所产生的效果是其他方式很难达到的
阅读(1910) | 评论(0) | 转发(0) |