将源弹性网卡的出/入方向TCP流量镜像到其他VPC内的目的弹性网卡
方案架构
- 镜像源是ECS-source的弹性网卡-s,表示需要镜像弹性网卡-s出方向和入方向的TCP流量。
- 镜像目的是ECS-target的弹性网卡-t,表示将弹性网卡-s的TCP流量镜像到弹性网卡-t中。
- 镜像会话的筛选条件mirror-filter-01中,出方向和入方向需要分别添加以下规则:
- 两条出方向规则:规则1不采集ECS-source去往ECS-test-A的TCP流量,规则2采集ECS-source去往ECS-test-B的TCP流量。
- 两条入方向规则:规则1不采集ECS-test-A进入ECS-source的TCP流量,规则2采集ECS-test-B进入ECS-source的TCP流量。
约束与限制
关于流量镜像的使用限制,具体请查看流量镜像的使用限制。
资源规划说明
以下资源规划详情仅为示例,您可以根据需要自行修改。
资源类型 |
资源数量 |
说明 |
---|---|---|
虚拟私有云VPC和子网 |
VPC:2 子网:2 |
本示例中,共需要2个VPC,配置说明如下:
|
弹性云服务器ECS |
4 |
本示例中,共需要4个ECS,配置说明如下:
|
弹性公网IP |
1 |
|
VPC对等连接 |
1 |
|
筛选条件 |
1 |
|
镜像会话 |
1 |
|
方向 |
策略 |
类型 |
协议端口 |
源地址/目的地址 |
描述 |
---|---|---|---|---|---|
入方向 |
允许 |
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地址。
方向 |
优先级 |
协议 |
策略 |
类型 |
源地址 |
源端口范围 |
目的地址 |
目的端口范围 |
---|---|---|---|---|---|---|---|---|
入方向 |
1 |
TCP |
不采集 |
IPv4 |
报文的来源地址,本示例为VPC-A的网段: 192.168.0.0/16 |
全部 |
报文的目的地址,本示例为VPC-A的网段: 192.168.0.0/16 |
全部 |
入方向 |
2 |
TCP |
采集 |
IPv4 |
报文的来源地址,本示例为VPC-B的网段: 10.0.0.0/16 |
全部 |
报文的目的地址,本示例为ECS-source的私有IP地址: 192.168.0.230/32 |
本示例为ECS-source的1234端口: 1234-1234 |
出方向 |
1 |
TCP |
不采集 |
IPv4 |
报文的来源地址,本示例为VPC-A的网段: 192.168.0.0/16 |
全部 |
报文的目的地址,本示例为VPC-A的网段: 192.168.0.0/16 |
全部 |
出方向 |
2 |
TCP |
采集 |
IPv4 |
报文的来源地址,本示例为ECS-source的私有IP地址: 192.168.0.230/32 |
全部 |
报文的目的地址,本示例为VPC-B的网段: 10.0.0.0/16 |
本示例为ECS-test-B的1234端口: 1234-1234 |
步骤一:创建云服务资源
- 创建2个VPC和2个子网。
具体方法请参见创建虚拟私有云和子网。
- 创建4个ECS。
具体方法请参见自定义购买ECS。
- 申请弹性公网IP。
具体方法请参见购买弹性公网IP。
步骤二:创建VPC对等连接
创建VPC对等连接,连通VPC-A和VPC-B之间的网络,具体方法请参见创建相同账户下的对等连接。
对等连接创建完成,需要在VPC-A和VPC-B的路由表分别添加连通去程和回程的路由,两端VPC才可以通信,本示例的路由规划详情请参见表5。
步骤四:安装NC工具模拟数据流量
本文使用NC工具模拟数据流量,NC工具是一个通过TCP/UDP协议在网络中读写数据的工具,常用于网络端口测试等,需要在ECS-source、ECS-test-A和ECS-test-B中安装NC工具。
- 在ECS-source中安装NC工具。
- 下载NC工具需要连接公网,将EIP绑定至ECS-source。
具体方法请参见绑定弹性公网IP。
- 远程登录ECS-source。
ECS有多种登录方法,具体请参见登录弹性云服务器。
- 依次执行以下命令,安装NC工具。
回显类似如下信息:
[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 : "HCE <support@huaweicloud.com>" Fingerprint: C1BA 9CD4 9D03 A206 E241 F176 28DA 5B77 A8DE F926 From : http://repo.huaweicloud.com/hce/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。
具体方法请参见解绑弹性公网IP。
- 下载NC工具需要连接公网,将EIP绑定至ECS-source。
- 参考1.a~1.d,在ECS-test-A中安装NC工具,并解绑EIP。
- 参考1.a~1.d,在ECS-test-B中安装NC工具,并解绑EIP。
- EIP解绑后,删除EIP。
本示例中不再需要使用EIP,因此删除EIP,具体方法请参见解绑弹性公网IP。如果不删除EIP,则EIP会持续计费。
步骤五:验证镜像会话是否对ECS-source和ECS-test-A互访的流量生效
本示例中,将验证镜像会话不采集相同VPC内,ECS-source和ECS-test-A互访的流量。
- 执行以下操作,建立ECS-source和ECS-test-A之间的TCP连接。
本示例在ECS-source向ECS-test-A发送TCP报文,查看ECS-test-A是否可以收到该报文。
- 在ECS-source中,执行以下命令,开启1234端口的监听。
命令示例:
nc -l 1234
此处回显为空,表示监听已正常开启。
- 在ECS-test-A中,执行以下命令,建立ECS-source和ECS-test-A之间的TCP连接。
nc 镜像源ECS-source的私有IP地址 镜像源ECS-source的监听端口
命令示例:
nc 192.168.0.230 1234
此处回显为空,表示TCP连接已建立。
- 在ECS-source中,输入任意信息(比如hello),并按回车,测试TCP连接是否建立成功。
[root@ecs-source ~]# nc -l 1234 hello
- 在ECS-test-A中,查看是否收到来自ECS-source的信息。
- 在ECS-source中,执行以下命令,开启1234端口的监听。
- 执行以下操作,测试ECS-source去往ECS-test-A的出方向TCP报文,是否可以镜像到ECS-target。
当镜像源ECS-source实时向ECS-test-A发送TCP报文时,通过TCPDUMP工具,查看镜像目的ECS-target是否可以获取到该报文的数据包,如果获取不到,则表示出方向的不采集规则配置生效。
- 远程登录ECS-target。
ECS有多种登录方法,具体请参见登录弹性云服务器。
- 在ECS-target中,执行以下命令,查看镜像目的对应的网卡名称。
回显类似如下信息,本示例中镜像目的对应的网卡名称为eth0。
[root@ecs-target ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.1.97 netmask 255.255.255.0 broadcast 10.0.1.255 inet6 fe80::f816:3eff:fea0:a101 prefixlen 64 scopeid 0x20<link> ether fa:16:3e:a0:a1:01 txqueuelen 1000 (Ethernet) RX packets 103445 bytes 119352826 (113.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 34118 bytes 15630293 (14.9 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-source中,输入任意信息(比如to testa),并按回车,向ECS-test-A发送TCP报文。
回显类似如下信息:
[root@ecs-source ~]# nc -l 1234 hello to testa
- 在ECS-test-A中,查看是否收到来自ECS-source的信息。
- 在ECS-target中,查看是否可以获取到报文的数据包。
回显类似如下信息,可以看到TCPDUMP工具启动后,没有获取到ECS-source发送至ECS-test-A的信息to testa对应的数据包,表示出方向的不采集规则设置成功。
[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-target。
- 执行以下操作,测试ECS-test-A进入ECS-source的入方向TCP报文,是否可以镜像到ECS-target。
当ECS-test-A实时向镜像源ECS-source发送TCP报文时,通过TCPDUMP工具,查看镜像目的ECS-target是否可以获取到该报文的数据包,如果获取不到,则表示入方向的不采集规则配置生效。
- 在ECS-test-A中,输入任意信息(比如testa to source),并按回车,向ECS-source发送TCP报文。
回显类似如下信息:
[root@ecs-test-a ~]# nc 192.168.0.230 1234 hello to testa testa to source
- 在ECS-source中,查看是否收到来自ECS-test-A的信息。
- 在ECS-target中,查看是否可以获取到报文的数据包。
回显类似如下信息,可以看到TCPDUMP工具启动后,没有获取到ECS-test-A发送至ECS-source的信息testa to source对应的数据包,表示入方向的不采集规则设置成功。
[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-A中,输入任意信息(比如testa to source),并按回车,向ECS-source发送TCP报文。
步骤六:验证镜像会话是否对ECS-source和ECS-test-B互访的流量生效
本示例中,将验证镜像会话采集不同VPC内,ECS-source和ECS-test-B互访的流量。
- 执行以下操作,建立ECS-source和ECS-test-B之间的TCP连接。
本示例在ECS-test-B向ECS-source发送TCP报文,查看ECS-source是否可以收到该报文。
- 在ECS-test-B中,执行以下命令,开启1234端口的监听。
命令示例:
nc -l 1234
此处回显为空,表示监听已正常开启。
- 在ECS-source中,执行以下命令,建立ECS-source和ECS-test-B之间的TCP连接。
nc ECS-test-B的私有IP地址 ECS-test-B的监听端口
命令示例:
nc 10.0.1.156 1234
此处回显为空,表示TCP连接已建立。
- 在ECS-test-B中,输入任意信息(比如hello),并按回车,测试TCP连接是否建立成功。
[root@ecs-test-b ~]# nc -l 1234 hello
- 在ECS-source中,查看是否收到来自ECS-test-B的信息。
- 在ECS-test-B中,执行以下命令,开启1234端口的监听。
- 执行以下操作,测试ECS-source去往ECS-test-B的出方向TCP报文,是否可以镜像到ECS-target。
当镜像源ECS-source实时向ECS-test-B发送TCP报文时,通过TCPDUMP工具,查看镜像目的ECS-target是否可以获取到该报文的数据包,如果可以获取到,则表示出方向的采集规则配置生效。
- 远程登录ECS-target。
ECS有多种登录方法,具体请参见登录弹性云服务器。
- 在ECS-target中,执行以下命令,查看镜像目的对应的网卡名称。
回显类似如下信息,本示例中镜像目的对应的网卡名称为eth0。
[root@ecs-target ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.1.97 netmask 255.255.255.0 broadcast 10.0.1.255 inet6 fe80::f816:3eff:fea0:a101 prefixlen 64 scopeid 0x20<link> ether fa:16:3e:a0:a1:01 txqueuelen 1000 (Ethernet) RX packets 103445 bytes 119352826 (113.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 34118 bytes 15630293 (14.9 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-source中,输入任意信息(比如to testb),并按回车,向ECS-test-B发送TCP报文。
回显类似如下信息:
[root@ecs-source ~]# nc 10.0.1.156 1234 hello to testb
- 在ECS-test-B中,查看是否收到来自ECS-source的信息。
- 在ECS-target中,查看是否可以获取到报文的数据包。
回显类似如下信息,可以看到TCPDUMP工具启动后,获取到ECS-source发送至ECS-test-B的信息to testb对应的数据包,时间为17:28:48.772658,表示出方向的采集规则设置成功。其中,vni 1为镜像会话mirror-session-01的标识,表示通过mirror-session-01,ECS-target可成功获取到数据包,数据包内容分为两部分,一部分是流量镜像封装的VXLAN报文,一部分是原始报文,详细说明请参见表6。
[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 17:28:48.772658 fa:16:3e:6e:42:80 > fa:16:3e:a0:a1:01, ethertype IPv4 (0x0800), length 125: 192.168.0.230.32821 > 10.0.1.97.4789: VXLAN, flags [I] (0x08), vni 1 fa:16:3e:7e:d6:bc > fa:16:3e:d1:6b:5d, ethertype IPv4 (0x0800), length 75: 192.168.0.230.44906 > 10.0.1.156.1234: Flags [P.], seq 935460393:935460402, ack 4279496885, win 502, options [nop,nop,TS val 1414482596 ecr 3323401462], length 9
- 远程登录ECS-target。
- 执行以下操作,测试ECS-test-B进入ECS-source的入方向TCP报文,是否可以镜像到ECS-target。
当ECS-test-B实时向镜像源ECS-source发送TCP报文时,通过TCPDUMP工具,查看镜像目的ECS-target是否可以获取到该报文的数据包,如果可以获取到,则表示入方向的采集规则配置生效。
- 在ECS-test-B中,输入任意信息(比如testb to source),并按回车,向ECS-source发送TCP报文。
回显类似如下信息:
[root@ecs-test-b ~]# nc -l 1234 hello to testb testb to source
- 在ECS-source中,查看是否收到来自ECS-test-B的信息。
- 在ECS-target中,查看是否可以获取到报文的数据包。
回显类似如下信息,可以看到TCPDUMP工具启动后,获取到ECS-test-B发送至ECS-source的信息testb to source对应的数据包,时间为17:30:26.193420,表示入方向的采集规则设置成功。其中,vni 1为镜像会话mirror-session-01的标识,表示通过mirror-session-01,ECS-target可成功获取到数据包,数据包内容分为两部分,一部分是流量镜像封装的VXLAN报文,一部分是原始报文,详细说明请参见表6。
[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 17:28:48.772658 fa:16:3e:6e:42:80 > fa:16:3e:a0:a1:01, ethertype IPv4 (0x0800), length 125: 192.168.0.230.32821 > 10.0.1.97.4789: VXLAN, flags [I] (0x08), vni 1 fa:16:3e:7e:d6:bc > fa:16:3e:d1:6b:5d, ethertype IPv4 (0x0800), length 75: 192.168.0.230.44906 > 10.0.1.156.1234: Flags [P.], seq 935460393:935460402, ack 4279496885, win 502, options [nop,nop,TS val 1414482596 ecr 3323401462], length 9 17:30:26.193420 fa:16:3e:6e:42:80 > fa:16:3e:a0:a1:01, ethertype IPv4 (0x0800), length 116: 192.168.0.230.32821 > 10.0.1.97.4789: VXLAN, flags [I] (0x08), vni 1 fa:16:3e:7e:d6:bc > fa:16:3e:d1:6b:5d, ethertype IPv4 (0x0800), length 66: 192.168.0.230.44906 > 10.0.1.156.1234: Flags [.], ack 17, win 502, options [nop,nop,TS val 1414580016 ecr 3323563970], length 0
- 在ECS-test-B中,输入任意信息(比如testb to source),并按回车,向ECS-source发送TCP报文。