TCPCopy используется для воспроизведения TCP. Распространенным сценарием является копирование онлайн-трафика в тестовую среду для устранения проблем, которые нелегко воспроизвести в автономном режиме, или для выполнения нагрузочного тестирования в тестовой среде. (HTTPS не может быть подвергнут стресс-тестированию из-за шифрования данных)
Изначально планировалось напрямую перенаправлять трафик nginx, а потому на сайте используется https-шифрование. Дренаж не увенчался успехом. Трафик может быть направлен только на HTTP одного приложения.
приложение Исходный сервер в настоящий момент Тестовый сервисустройствоdemo-app 10.1.3.74:7001 192.168.54.62:82
онлайн-сервер 10.1.3.74:7001
Тестовый сервисустройство 192.168.54.62:82
перехват (вторичный сервер) 10.1.2.40
online--->транзитная службаустройство1 10.1.2.41 ---》Транзитный сервер 2 192.168.77.84 -->Тестовый сервисустройство
нуждаться:online--->транзитная службаустройство1 10.1.2.41 ---》Транзитный сервер 2 192.168.77.84 -->Тестовый сервисустройство.
Поскольку онлайн-среда несовместима с тестовой средой, для достижения тестового сервера необходимо пройти сетевую переадресацию уровня 2. Здесь для сетевой пересылки используется rinetd.
[root@vm-phx-k8s-master-0241 ~]# cat /etc/rinetd.conf
10.1.2.41 7001 192.168.77.84 7001
10.1.2.41 7002 192.168.77.84 7002
10.1.2.41 7003 192.168.77.84 7003
10.1.2.41 7004 192.168.77.84 7004
10.1.2.41 7005 192.168.77.84 7005
10.1.2.41 7006 192.168.77.84 7006
10.1.2.41 7007 192.168.77.84 7007
[root@vm-l2f-umicen-app-7784 ~]# cat /etc/rinetd.conf
192.168.77.84 7001 192.168.54.62 82
192.168.77.84 7002 192.168.47.136 8080
192.168.77.84 7003 192.168.42.169 8080
192.168.77.84 7004 192.168.47.202 8080
192.168.77.84 7005 192.168.47.37 8080
192.168.77.84 7006 192.168.42.148 8080
192.168.77.84 7007 192.168.43.41 8080
*3 сценарий перезапуска rinetd
#!/bin/bash
source /etc/profile
kill -9 $(ps -ef |grep "/root/rinetd/rinetd" |grep -v "grep" |grep -v bash|awk '{print $2}')
ps aux |grep "/root/rinetd/rinetd"
sleep 1
/root/rinetd/rinetd -c /etc/rinetd.conf
#!/bin/bash
source /etc/profile
yum -y install haproxy
cd /etc/haproxy
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
cat >> /etc/haproxy/harpoxy.cfg << EOF
global
ulimit-n 51200
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
option dontlognull
timeout connect 600
timeout client 5m
timeout server 5m
frontend tcp-7001
bind *:7001
default_backend tcp-port-7001
backend tcp-port-7001
server server1 192.168.77.84:7001 maxconn 20480
listen admin_stat
bind 0.0.0.0:1080
mode http
stats refresh 30s
stats uri /haproxy_stats_url
stats realm Haproxy \Statistics
stats auth admin:123456
stats hide-version
stats admin if TRUE
EOF
systemctl enable haproxy.service
systemctl start haproxy.service
wget https://github.com/session-replay-tools/intercept/archive/1.0.0.tar.gz
tar -xvf 1.0.0.tar.gz
cd intercept-1.0.0/
./configure
yum install libpcap* -y
make && make install
/usr/local/intercept/sbin/intercept -i ens33 -l /var/log/intercept.log -F tcp and src port 7001 -d
-i, intercept будет прослушивать порт и связываться с tcpcopy -i указывает, какой порт прослушивать. Когда tcpcopy запустится, он подключится к этому порту. Если он не сможет подключиться, он не запустится. (erh0 — имя сетевой карты)
-F, Правила и синтаксис фильтрации такие же, как и у pcap.
-d, Запуск в режиме демона
[root@vm-phx-k8s-master-0240 scripts]# cat /root/scripts/intercept.sh
#!/bin/bash
souce /etc/profile
/usr/local/intercept/sbin/intercept -i ens33 -l /var/log/intercept.log -F tcp -d
Измените /etc/sysctl.conf.
net.ipv4.ip_forward=0
выполнить sysctl -p
wget https://github.com/session-replay-tools/tcpcopy/archive/1.0.0.tar.gz
tar zxvf 1.0.0.tar.gz
cd tcpcopy-1.0.0
./configure && make && make install
[root@online ~]# cat /root/tcpcopy/tcpcopy.sh
#!/bin/bash
source /etc/profile
/usr/local/tcpcopy/sbin/tcpcopy -x 7001-10.1.2.41:7001 -s 10.1.2.40 -c 10.1.5.x -l /var/log/tcpcopy.log -d
Тестовая команда: /usr/local/tcpcopy/sbin/tcpcopy. -x исходный порт — тестовая машина: тестовый порт -s перехватить адрес машины -c Имитировать IP-сегмент -l /var/log/tcpcopy.log
/usr/local/tcpcopy/sbin/tcpcopy -x 7001-10.1.2.41:7001 -s 10.1.2.40 -c 10.1.5.x -l /var/log/tcpcopy.log -d
-x, Это означает, что трафик локального порта 8000 копируется в порт 6001 192.168.2.30.
-s, Укажите адрес перехватывающей машины. Tcpcopy необходимо установить соединение с перехватом.
-c Замаскируйте адрес и перенаправьте трафик на Тестовый. При использовании сервера измените адрес источника пакета данных на 10.1.5.2, чтобы упростить указание маршрута. Его также можно записать как 10.1.5.x, чтобы адресом источника был адрес в указанном сегменте сети.
-n Коэффициент усиления потока не требуется для испытаний под давлением, указывать этот параметр нет необходимости.
-d Запустить в режиме демона
Выполнить команду маршрутизации для службы 10.1.2.41.
route add -net 10.1.5.0 netmask 255.255.255.0 gw 10.1.2.40
[root@online en]# pwd
/home/app/log/
[root@online en]# tail -n 10 en.log
2020-10-30 10:34:10,755 [http-0.0.0.0:7001-1$2125991095] WARN com.ActionServlet [01] /eHome.do?xcase=index,908,661768202,39.88.110.24,00,TguNTYuMTUwLjE0MjAyMDEwMjIxMDE1MTI3NzE4NTQ5NTAzOAN,TExNDAwMjM0NzA3NDg4MjQ6MzkuODguMTEwLjI0OjY2MTc2ODIwMjowMAM,jAyMDEwMzAxMDM0MDIzNDkwMDA6MTk0MTk3MDMwODE4MTUyNjU3NDQM
2020-10-30 10:34:10,996 [http-0.0.0.0:7001-16$580927107] WARN com.ActionServlet [01] /ajaxfunction.do?xcase=ajaxlogonconnection&t=1604025241961&_=1604025241962,23,616549844,103.116.47.92,7403105,TAzLjExNi40Ny45MjIwMjAxMDIzMTA0NzQwODI5OTkyMjU2NzgM,TExMzk1MzY1MzcxMzA3Nzc6MTAzLjExNi40Ny45Mjo2MTY1NDk4NDQ6NzQwMzEwNQM,jAyMDEwMzAxMDMzMjA1NTIwMDA6MDExNTkzOTQ3MDAzNjA3NzM0MDkM
2020-10-30 10:34:23,375 [http-0.0.0.0:7001-4$1345458085] WARN com.ActionServlet [01] /iar.do?catId=5&xcase=index,66,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,621 [http-0.0.0.0:7001-3$1863279517] WARN com.ActionServlet [01] /eHomeHotActivity.do?xcase=index,191,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,691 [http-0.0.0.0:7001-1$2125991095] WARN com.ActionServlet [01] /eHomeExcellentService.do?xcase=index,24,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,752 [http-0.0.0.0:7001-16$580927107] WARN com.ActionServlet [01] /eHomeOnlineCourse.do?xcase=index,17,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,815 [http-0.0.0.0:7001-13$1113166511] WARN com.ActionServlet [01] /eHomeOnlineCourse.do?demandTypeName=vod&pageNumber=1&xcase=list,19,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:38,866 [http-0.0.0.0:7001-15$38163862] WARN com.ActionServlet [01] /eHome.do?xcase=sucStoryDetail&pasId=heKnNEDdHxlA,4896,616274054,112.232.32.190,3991982,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
2020-10-30 10:34:40,557 [http-0.0.0.0:7001-14$82426960] WARN com.ActionServlet [01] /ajaxfunction.do?xcase=ajaxlogonconnection&time=1604025279782,22,616274054,112.232.32.190,3991982,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
2020-10-30 10:34:43,619 [http-0.0.0.0:7001-2$405165860] WARN com.ActionServlet [01] /ajaxfunction.do?xcase=ajaxlogonconnection&t=1604025282858&_=1604025282859,9,616274054,112.232.32.190,3991982,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
[root@515f0f3d2b8f log]# tail -n 10 appen_visiting.log
2020-10-30 10:34:10,999 [http-0.0.0.0:82-24$967804219] WARN appen_visiting /ajaxfunction.do?xcase=ajaxlogonconnection&t=1604025241961&_=1604025241962,9,0,103.116.47.92,00,TAzLjExNi40Ny45MjIwMjAxMDIzMTA0NzQwODI5OTkyMjU2NzgM,TExMzk1MzY1MzcxMzA3Nzc6MTAzLjExNi40Ny45Mjo2MTY1NDk4NDQ6NzQwMzEwNQM,jAyMDEwMzAxMDMzMjA1NTIwMDA6MDExNTkzOTQ3MDAzNjA3NzM0MDkM
2020-10-30 10:34:23,414 [http-0.0.0.0:82-22$1268241439] WARN appen_visiting /iar.do?catId=5&xcase=index,85,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,499 [http-0.0.0.0:82-22$1268241439] WARN appen_visiting /eHomeHotActivity.do?xcase=index,48,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,731 [http-0.0.0.0:82-27$1931835655] WARN appen_visiting /eHomeExcellentService.do?xcase=index,46,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,792 [http-0.0.0.0:82-24$1046816159] WARN appen_visiting /eHomeOnlineCourse.do?xcase=index,37,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,853 [http-0.0.0.0:82-25$1258927498] WARN appen_visiting /eHomeOnlineCourse.do?demandTypeName=vod&pageNumber=1&xcase=list,36,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:34,005 [http-0.0.0.0:82-25$1268241439] WARN appen_visiting /eHome.do?xcase=sucStoryDetail&pasId=heKnNEDdHxlA,12,0,112.232.32.190,00,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
2020-10-30 10:34:40,561 [http-0.0.0.0:82-17$1585363137] WARN appen_visiting /ajaxfunction.do?xcase=ajaxlogonconnection&time=1604025279782,9,0,112.232.32.190,00,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
2020-10-30 10:34:43,636 [http-0.0.0.0:82-21$1258927498] WARN appen_visiting /ajaxfunction.do?xcase=ajaxlogonconnection&t=1604025282858&_=1604025282859,8,0,112.232.32.190,00,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
2020-10-30 10:34:44,518 [http-0.0.0.0:82-20$1908430742] WARN appen_visiting /eHome.do?xcase=index,121,0,168.70.105.82,00,jIxLjE3Ni4xNTQuMTY2MjAyMDA5MjYwODU4MTg4MDU4Mzk4NTY3MwM,TExMzY0NjMwOTM1NTY5NTk6MTQuMS4yOC40NDo2MTU0MDgyNDQ6MzQ5ODQ3MgM,jAyMDEwMzAwOTQwMzcxNTAwMDA6MDUwNjk4MDU0NDEzMzQyMTM1MTEM
[root@app1 ansible]# cat hosts_temp
[tcpcopy]
10.1.3.74 ansible_python_interpreter=/usr/bin/python26
10.1.6.233
10.1.6.197
10.1.6.185
10.1.6.215
10.1.6.184
10.1.6.133
10.1.5.4
10.1.5.144
10.1.6.193
10.1.6.157
10.1.3.115 ansible_python_interpreter=/usr/bin/python26
10.1.6.190
10.1.6.208
10.1.6.211
10.1.6.214
192.168.70.232
192.168.3.78
10.1.6.172
192.168.70.148
192.168.77.211
10.1.6.126
10.1.6.162
[root@app5 ~]# cat /root/tcpcopy/tcpcopy.sh
#!/bin/bash
source /etc/profile
/usr/local/tcpcopy/sbin/tcpcopy -x 7001-10.1.2.41:7001 -s 10.1.2.40 -c 10.1.5.x -l /var/log/tcpcopy.log -d
ansible -i hosts_temp tcpcopy -m shell -a 'pkill tcpcopy'
ansible -i hosts_temp tcpcopy -m shell -a 'sh -x /root/tcpcopy/tcpcopy.sh'