方案架构
当您需要将镜像源(弹性网卡)的入方向TCP流量,镜像到单个镜像目的(弹性网卡)时,您可以参考本文的配置示例。如下图所示,在VPC-A中,ECS-test访问ECS-source,需要将ECS-source入方向TCP流量镜像到ECS-target中,则您创建一个镜像会话可以实现需求,详细设置如下:
镜像源是ECS-source的弹性网卡-s,表示需要镜像弹性网卡-s入方向的TCP流量。
镜像目的是ECS-target的弹性网卡-t,表示将弹性网卡-s入方向的TCP流量镜像到弹性网卡-t中。
镜像会话的筛选条件中需要添加采集入方向TCP流量的规则。
图-镜像入方向TCP流量
资源规划说明
本示例中,虚拟私有云VPC和子网、弹性公网IP以及ECS等资源只要位于同一个区域内即可,可用区可以任意选择,无需保持一致。
说明
以下资源规划详情仅为示例,您可以根据需要自行修改。
表-镜像入方向TCP流量资源规划总体说明
资源类型 | 资源数量 | 说明 |
|---|---|---|
虚拟私有云VPC和子网 | VPC:1 子网:1 |
|
弹性云服务器ECS | 3 | 本示例中,共需要三个ECS,配置说明如下:
|
弹性公网IP | 1 |
|
筛选条件 | 1 |
|
镜像会话 | 1 |
|
表-安全组Sg-X规则说明
方向 | 策略 | 类型 | 协议端口 | 源地址/目的地址 | 描述 |
|---|---|---|---|---|---|
入方向 | 允许 | IPv4 | TCP: 22 | 源地址:0.0.0.0/0 | 放通安全组内ECS的SSH(22)端口,用于远程登录Linux ECS。 |
入方向 | 允许 | IPv4 | TCP: 3389 | 源地址:0.0.0.0/0 | 放通安全组内ECS的RDP(3389)端口,用于远程登录Windows ECS。 |
入方向 | 允许 | IPv4 | 全部 | 源地址:当前安全组Sg-X | 针对IPv4,用于安全组内ECS之间网络互通。 |
入方向 | 允许 | IPv6 | 全部 | 源地址:当前安全组Sg-X | 针对IPv6,用于安全组内ECS之间网络互通。 |
出方向 | 允许 | IPv4 | 全部 | 目的地址:0.0.0.0/0 | 针对IPv4,用于安全组内ECS访问外部,允许流量从安全组内ECS流出。 |
出方向 | 允许 | IPv6 | 全部 | 目的地址:::/0 | 针对IPv6,用于安全组内ECS访问外部,允许流量从安全组内ECS流出。 |
注意
- 本示例中,入方向源地址设置为0.0.0.0/0表示允许所有外部IP远程登录云服务器,如果将22或3389端口暴露到公网,可能存在网络安全风险,建议您将源IP设置为已知的IP地址,比如设置为您的本地PC地址。
表-安全组Sg-A规则说明
方向 | 策略 | 类型 | 协议端口 | 源地址 | 描述 |
|---|---|---|---|---|---|
入方向 | 允许 | IPv4 | TCP: 1234 | 访问镜像源的测试ECS的地址,本示例为ECS-test的私有IP地址: 192.168.0.161/32 | 针对IPv4,允许来自ECS-test的TCP协议报文访问镜像源ECS-source的1234端口。 |
表-安全组Sg-B规则说明
方向 | 策略 | 类型 | 协议端口 | 源地址 | 描述 |
|---|---|---|---|---|---|
入方向 | 允许 | IPv4 | UDP: 4789 | 镜像源的地址,本示例为ECS-source的私有IP地址: 192.168.0.230/32 | 针对IPv4,允许来自镜像源ECS-source封装的UDP协议报文访问镜像目的ECS-target的4789端口。 |
表-筛选条件的入方向规则
方向 | 优先级 | 协议 | 策略 | 类型 | 源地址 | 源端口范围 | 目的地址 | 目的端口范围 |
|---|---|---|---|---|---|---|---|---|
入方向 | 1 | TCP | 采集 | IPv4 | 报文的来源地址,本示例为ECS-test的私有IP地址: 192.168.0.161/32 | 全部 | 报文的目的地址,本示例为ECS-source的私有IP地址: 192.168.0.230/32 | 本示例为ECS-source的1234端口: 1234-1234 |
操作流程
将源弹性网卡的入方向TCP流量镜像到单个目的弹性网卡,流程如下图所示。
安装NC工具模拟数据流量
本文使用NC工具模拟数据流量,NC工具是一个通过TCP/UDP协议在网络中读写数据的工具,常用于网络端口测试等,需要在ECS-source和ECS-test中安装NC工具。
在ECS-source中安装NC工具。
下载NC工具需要连接公网,将EIP绑定至ECS-source。
远程登录ECS-source。
依次执行以下命令,安装NC工具。
sudo yum update
回显类似如下信息:
[root@ecs-source ~]# sudo yum update HCE 2.0 base 55 MB/s | 6.1 MB 00:00 HCE 2.0 updates 98 MB/s | 14 MB 00:00 Last metadata expiration check: 0:00:01 ago on Tue 10 Sep 2024 05:54:28 PM CST. Dependencies resolved. Nothing to do. Complete!sudo yum install nc
回显类似如下信息,请根据回显提示输入y,并按回车。
[root@ecs-source ~]# sudo yum install nc Last metadata expiration check: 0:00:12 ago on Tue 10 Sep 2024 05:54:28 PM CST. Dependencies resolved. ... Install 2 Packages Total download size: 6.1 M Installed size: 25 M Is this ok [y/N]: y Downloading Packages: ... Importing GPG key 0xA8DEF926: Userid : "XXX" Fingerprint: C1BA 9CD4 9D03 A206 E241 F176 28DA 5B77 A8DE F926 From : http://.../XX/2.0/updates/RPM-GPG-KEY-HCE-2 Is this ok [y/N]: y ... Installed: libssh2-1.10.0-2.r10.hce2.x86_64 nmap-2:7.92-2.r4.hce2.x86_64 Complete!ECS-source的NC工具安装完成后,解绑EIP。
参考1.a~1.d,在ECS-test中安装NC工具,并解绑EIP。
EIP解绑后,删除EIP。
本示例中不再需要使用EIP,因此删除EIP。如果不删除EIP,则EIP会持续计费。
验证镜像会话是否生效
执行以下操作,建立ECS-source和ECS-test之间的TCP连接。
本文在ECS-test向ECS-source发送TCP报文,查看ECS-source是否可以收到该报文。
在ECS-source中,执行以下命令,开启1234端口的监听。
nc -l 镜像源ECS-source的监听端口
命令示例:
nc -l 1234
此处回显为空,表示监听已正常开启。
在ECS-test中,执行以下命令,建立ECS-source和ECS-test之间的TCP连接。
nc 镜像源ECS-source的私有IP地址 镜像源ECS-source的监听端口
命令示例:
nc 192.168.0.230 1234
此处回显为空,在ECS-test中,输入任意信息(比如hello),并按回车,测试TCP连接是否建立成功。
[root@ecs-test ~]# nc 192.168.0.230 1234 hello在ECS-source中,查看是否收到来自ECS-test的信息。
回显类似如下信息,可正常收到信息,表示TCP连接建立成功。
[root@ecs-source ~]# nc -l 1234 hello
执行以下操作,测试ECS-source入方向的报文是否可以镜像到ECS-target。
当ECS-test实时向镜像源ECS-source发送TCP报文时,通过TCPDUMP工具,查看镜像目的ECS-target是否可以获取到该报文的数据包,如果获取成功,则表示镜像会话配置生效。
远程登录ECS-target。
在ECS-target中,执行以下命令,查看镜像目的对应的网卡名称。
ifconfig
回显类似如下信息,本示例中镜像目的对应的网卡名称为eth0。
[root@ecs-target ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.164 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::f816:3eff:fe7e:d67a prefixlen 64 scopeid 0x20<link> ether fa:16:3e:7e:d6:7a txqueuelen 1000 (Ethernet) RX packets 29043 bytes 32268398 (30.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 13811 bytes 3961116 (3.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ...在ECS-target中,执行以下命令,通过TCPDUMP工具观察数据包获取情况。
tcpdump -i 镜像目的对应的网卡名称 udp port 4789 -nne
命令示例:
tcpdump -i eth0 udp port 4789 -nne
回显类似如下信息:
[root@ecs-target ~]# tcpdump -i eth0 udp port 4789 -nne dropped privs to tcpdump tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes在ECS-test中,输入任意信息(比如12345),并按回车,向ECS-source发送TCP报文。
回显类似如下信息:
[root@ecs-test ~]# nc 192.168.0.230 1234 hello 12345在ECS-source中,查看是否收到来自ECS-test的信息。
回显类似如下信息,可正常收到信息。
[root@ecs-source ~]# nc -l 1234 hello 12345在ECS-target中,查看是否可以获取到报文的数据包。
回显类似如下信息,可以看到TCPDUMP工具启动后,ECS-test发送的信息12345对应的数据包。其中,vni 1为镜像会话的标识,表示通过镜像会话,ECS-target可成功获取到数据包,数据包内容分为两部分,详细说明请参见下表。
[root@ecs-target ~]# tcpdump -i eth0 udp port 4789 -nne dropped privs to tcpdump tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 19:12:25.839624 fa:16:3e:d1:6b:5d > fa:16:3e:7e:d6:7a, ethertype IPv4 (0x0800), length 122: 192.168.0.230.32838 > 192.168.0.164.4789: VXLAN, flags [I] (0x08), vni 1 fa:16:3e:7e:d6:77 > fa:16:3e:7e:d6:bc, ethertype IPv4 (0x0800), length 72: 192.168.0.161.38944 > 192.168.0.230.1234: Flags [P.], seq 2063075043:2063075049, ack 1116663338, win 502, options [nop,nop,TS val 969673134 ecr 605179348], length 6表-数据包说明
数据包示例
数据包说明
19:12:25.839624 fa:16:3e:d1:6b:5d > fa:16:3e:7e:d6:7a, ethertype IPv4 (0x0800), length 122: 192.168.0.230.32838 > 192.168.0.164.4789: VXLAN, flags [I] (0x08), vni 1流量镜像封装的VXLAN报文。报文格式如下:
<Timestamp><SMacAddr><DMacAddr><EthernetType><Length><Sip><Sport><Dip><Dport><VXLAN Flags><VNI>
封装报文的字段说明如下:
Timestamp:由TCPDUMP工具生成,表示获取报文的时间
SMacAddr:VXLAN报文来源实例的MAC地址,此处为网关实例的MAC地址
DMacAddr:VXLAN报文目的实例的MAC地址,此处为镜像目的实例的MAC地址
EthernetType:报文的以太网类型,0x0800表示协议是IPv4
Length:报文的长度
Sip:镜像源地址
Sport:镜像源端口
Dip:镜像目的地址
Dport:镜像目的端口,通常为接收VXLAN报文的端口4789
VXLAN Flags:通常为0x08,表示为VXLAN报文
VNI:镜像会话的VXLAN网络标识
fa:16:3e:7e:d6:77 > fa:16:3e:7e:d6:bc, ethertype IPv4 (0x0800), length 72: 192.168.0.161.38944 > 192.168.0.230.1234: Flags [P.], seq 2063075043:2063075049, ack 1116663338, win 502, options [nop,nop,TS val 969673134 ecr 605179348], length 6原始报文。
原始报文字段属于通用网络知识,此处不做详细说明。