使用tcpcopy复制线上流量进行测试
-
online server
-
线上服务所在机器 10.136.11.4
-
部署tcpcopy
- cd tcpcopy-xxx
- sudo yum install libpcap
- sudo yum install libpcap-devel
- ./configure --prefix=/usr/local/tcpcopy --pcap-capture
- make
- make install
- XXXXX/tcpcopy -x S_PORT@S_ETH_ADDR-D_IP:D_PORT@D_ETH_ADDR -s INTER_IP -c 10.136.100.x -d -l ./tcpcopy.log
-
sudo /usr/local/tcpcopy/sbin/tcpcopy -x ONLINE_PORT@ONLINE_SERVER_MAC_ADDR-10.136.11.5:TEST_PORT@TEST_SERVER_MAC_ADDR -s 10.136.11.3 -o eth4 -i eth4 -c 10.136.100.x -d -l ./tcpcopy.log
- -s 表示辅助服务器地址
- -c 表示伪装的地址,即要把tcpcopy的包的源地址改为这个伪装地址
-
-
target server
- 目标服务器,测试服务所在机器 10.136.11.5
- 设置路由
route add -net 10.136.100.0 netmask 255.255.255.0 gw 10.136.11.3
- 计算结果要回复给ip源地址,即回复给伪装地址,这里需要做转发,即把结果转发到辅助机器上(辅助机器不能开启路由转发)
-
assistant server - AS
- 辅助服务器 10.136.11.3
- 部署intercept
cat /proc/sys/net/ipv4/ip_forward
- 结果为0表示禁止路由转发,辅助服务器充当“黑洞”
- 关闭IP转发
sudo sysctl -w net.ipv4.ip_forward=0
sudo /usr/local/intercept/sbin/intercept -i eth4 -F 'tcp and src port TEST_PORT' -d -l ./inter.log
-
单机部署多个tcpcopy
- tcpcopy 与 intercept 使用 -p 设置的端口需要一致
-
TS上设置路由
- 如11.12.13.X为TS,则AS需要在11.12.13.Y,即同一网段上,否则网络不可达
-
target server与assistant server部署在同一台机器上
- 见参考链接,注意tcpcopy命令中需要将-c参数改写为不存在或无法访问的地址
-
todo
- 了解tcpcopy的设计与原理
参考
https://github.com/session-replay-tools/tcpcopy
https://blog.csdn.net/wangbin579/article/details/10148247
https://blog.csdn.net/fengfengdiandia/article/details/77776026
https://www.jianshu.com/p/8df317dbf653
tcpcopy简单用法
linux ip 转发设置 ip_forward
linux下route命令
简化配置及操作方法