tcpcopy1.0.0安装使用

在tcpcopy 1.0版本中对整个架构的一个改进,将原本需要运行在测试机上的intercept移除放到一个独立的辅助机上来,使得测试机需要做的操作少到仅仅是添加一条路由而已,对整个测试机的性能损耗可以忽略,排除了intercept运行在测试机上时产生的性能影响,使得测试数据更加接近真实水平。

一、系统环境:

centos6.5 x86_64

线上服务器:172.16.1.23  (tcpcopy安装配置)

辅助服务器:172.16.1.24  (intercept安装配置)

测试服务器:172.16.1.25  (添加路由)

二、线上服务器部署tcpcopy-1.0.0
#git clone git://github.com/session-replay-tools/tcpcopy.git

#cd tcpcopy

#./configure
#make && make install

#/usr/local/tcpcopy/sbin/tcpcopy -v
tcpcopy version:1.0.0

#/usr/local/tcpcopy/sbin/tcpcopy -x 80-172.16.1.25:80 -s 172.16.1.24 -c 172.16.100.x -d -C 4 -l /var/log/tcpcopy.log

# ps -ef|grep tcpcopy
root      6743     1  9 15:08 ?        00:02:24 /usr/local/tcpcopy/sbin/tcpcopy -x 80-172.16.1.25:80 -s 172.16.1.24 -c 172.16.100.x -d -C 4 -l /var/log/tcpcopy.log

原理:将80端口收到的流量复制到测试机ip 172.16.1.25的80端口,并设置辅助机的ip地址为172.16.1.24,且将复制过去的流量中的源地址统一更改为172.16.100.x,这样做的好处是我们在测试机上可以直接针对整个更改后的网段设置一条路由即可。

三、辅助服务器部署intercept-1.0.0

#yum install -y libpcap
#git clone http://github.com/session-replay-tools/intercept.git
#tar xf intercept-1.0.0.tar.gz
#cd intercept
#./configure
#make && make install
#/usr/local/intercept/sbin/intercept -v
intercept version:1.0.0
#/usr/local/intercept/sbin/intercept -i eth0 -l /var/log/intercept.log -F 'tcp and src port 80' -d

#ps -ef|grep intercept

root     31017     1  2 14:59 ?        00:00:59 /usr/local/intercept/sbin/intercept -i eth0 -l /var/log/intercept.log -F tcp and src port 80 -d
#ss -an

原理:辅助机的 intercept 通过-F 参数制定捕获规则,捕获tcp连接中源端口为80的所有数据,也即是测试机的回应数据。其作用是将测试机路由过来的响应数据捕获下来,完成整个请求回应的流程且保证测试机产生的回应数据不会流向线上环境。intercept 会监听 tcp 36524 端口,并和线上机172.16.1.23的 tcpcopy 之间建立通信,我们通过ss命令可以观察到。需要注意的是辅助机和测试机一定要是同一网段。

四、测试服务器部署

//添加路由
#route add -net 172.16.100.0 netmask 255.255.255.0 gw 172.16.1.24
#ss -an

#tail -f /opt/logs/tengine/access_www.51auto.log

原理:线上机tcpcopy复制流量时将源地址改写为172.16.100网段的地址,那么在测试机上看到的流量中源地址全部是来源于这个网段,我们仅仅需要将返回给这个网段的所有客户端的请求全部通过辅助机 172.16.1.24 路由出去,这样在辅助机上就可以对全部的回应包进行截获处理了