Mirroring Inbound and Outbound TCP Traffic to a Network Interface in a Different VPC
Solution Architecture
- Set the mirror source to network-interface-s of ECS-source, indicating that the inbound and outbound TCP traffic on this network interface will be mirrored.
- Set the mirror target to network-interface-t of ECS-target, indicating that the inbound and outbound TCP traffic on network-interface-s will be mirrored to network-interface-t.
- Create a mirror filter (mirror-filter-01) and add the following rules:
- Two outbound rules: Rule 1 rejects TCP traffic from ECS-source to ECS-test-A. Rule 2 accepts TCP traffic from ECS-source to ECS-test-B.
- Two inbound rules: Rule 1 rejects TCP traffic from ECS-test-A to ECS-source. Rule 2 accepts TCP traffic from ECS-test-B to ECS-source.
Notes and Constraints
Resource Planning
The following resource details are only for your reference. You can modify them if needed.
Resource |
Quantity |
Description |
---|---|---|
VPC and subnet |
VPC: 2 Subnet: 2 |
Configure the VPCs as follows:
|
ECS |
4 |
Configure the ECSs as follows:
|
EIP |
1 |
|
VPC peering connection |
1 |
|
Mirror filter |
1 |
|
Mirror session |
1 |
|
Direction |
Action |
Type |
Protocol & Port |
Source/Destination |
Description |
---|---|---|---|---|---|
Inbound |
Allow |
IPv4 |
TCP: 22 |
Source: 0.0.0.0/0 |
Allows remote logins to Linux ECSs over SSH port 22. |
Inbound |
Allow |
IPv4 |
TCP: 3389 |
Source: 0.0.0.0/0 |
Allows remote logins to Windows ECSs over RDP port 3389. |
Inbound |
Allow |
IPv4 |
All |
Source: current security group (Sg-X) |
Allows the ECSs in this security group to communicate with each other using IPv4 addresses. |
Inbound |
Allow |
IPv6 |
All |
Source: current security group (Sg-X) |
Allows the ECSs in this security group to communicate with each other using IPv6 addresses. |
Outbound |
Allow |
IPv4 |
All |
Destination: 0.0.0.0/0 |
Allows ECSs in this security group to access the Internet using IPv4 addresses. |
Outbound |
Allow |
IPv6 |
All |
Destination: ::/0 |
Allows ECSs in this security group to access the Internet using IPv6 addresses. |
If the source of an inbound rule is set to 0.0.0.0/0, all external IP addresses are allowed to remotely log in to your cloud server. Exposing port 22 or 3389 to the public network will leave your instances vulnerable to network risks. To address this issue, set the source to a known IP address, for example, the IP address of your local PC.
Security Group |
Direction |
Action |
Type |
Protocol & Port |
Source |
Description |
---|---|---|---|---|---|---|
Sg-A |
Inbound |
Allow |
IPv4 |
TCP: 1234 |
The security group with which ECS-test-A is associated: Sg-X |
Allows TCP packets from ECS-test-A to ECS-source over port 1234. |
Sg-X |
Inbound |
Allow |
IPv4 |
TCP: All ports |
The security group with which ECS-source is associated: Sg-A |
Allows TCP packets from ECS-source to ECS-test-A over all ports. |
VPC |
Route Table |
Destination |
Next Hop |
Description |
---|---|---|---|---|
VPC-A |
rtb-VPC-A (default) |
VPC-B CIDR block: 10.0.0.0/16 |
VPC peering connection: Peering-AB |
Route from VPC-A to VPC-B |
VPC-B |
rtb-VPC-B (default) |
VPC-A CIDR block: 192.168.0.0/16 |
VPC peering connection: Peering-AB |
Route from VPC-B to VPC-A |
Direction |
Priority |
Protocol |
Action |
Type |
Source |
Source Port Range |
Destination |
Destination Port Range |
---|---|---|---|---|---|---|---|---|
Inbound |
1 |
TCP |
Reject |
IPv4 |
VPC-A CIDR block: 192.168.0.0/16 |
All |
VPC-A CIDR block: 192.168.0.0/16 |
All |
Inbound |
2 |
TCP |
Accept |
IPv4 |
VPC-B CIDR block: 10.0.0.0/16 |
All |
The private IP address of ECS-source: 192.168.0.230/32 |
Port of ECS-source: 1234-1234 |
Outbound |
1 |
TCP |
Reject |
IPv4 |
VPC-A CIDR block: 192.168.0.0/16 |
All |
VPC-A CIDR block: 192.168.0.0/16 |
All |
Outbound |
2 |
TCP |
Accept |
IPv4 |
The private IP address of ECS-source: 192.168.0.230/32 |
All |
VPC-B CIDR block: 10.0.0.0/16 |
Port of ECS-test-B: 1234-1234 |
Procedure
Figure 2 shows the procedure required to mirror the inbound and outbound TCP traffic between a mirror source (network interface) and a given instance to a mirror target (network interface) in a different VPC from the mirror source.
Step 1: Create Cloud Resources
- Create two VPCs, each with a subnet.
For details, see Creating a VPC and Subnet.
- Create four ECSs.
For details, see Purchasing a Custom ECS.
- Assign an EIP.
For details, see Assigning an EIP.
Step 2: Create a VPC Peering Connection
Create a VPC peering connection to connect VPC-A and VPC-B by referring to Creating a VPC Peering Connection to Connect Two VPCs in the Same Account.
Add forward and return routes to the route tables of VPC-A and VPC-B so that the two VPCs can communicate with each other. For details, see Table 5.
Step 3: Create a Mirror Filter and a Mirror Session
- Create a mirror filter.
For details, see Creating a Mirror Filter.
- Create a mirror session, and associate the mirror filter, mirror source, and mirror target with this mirror session.
For details, see Creating a Mirror Session.
Step 4: Install Netcat (nc) to Simulate Traffic
The nc utility reads and writes data across network connections using TCP or UDP. It is usually used to test ports for accessibility. You need to install nc on ECS-source, ECS-test-A, and ECS-test-B.
- Install nc on ECS-source.
- Bind the EIP to ECS-source to connect to the Internet for downloading the nc utility.
For details, see Binding an EIP to an ECS.
- Remotely log in to ECS-source.
For details, see How Do I Log In to My ECS?
- Run the following commands in sequence to install nc:
Information similar to the following is displayed:
[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
If information similar to the following is displayed, enter y as prompted and press Enter:[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!
- Unbind the EIP from ECS-source after nc is installed.
For details, see Unbinding an EIP.
- Bind the EIP to ECS-source to connect to the Internet for downloading the nc utility.
- Repeat 1.a to 1.d on ECS-test-A.
- Repeat 1.a to 1.d on ECS-test-B.
- Release the EIP.
For details, see Unbinding an EIP. If you do not release the EIP, the EIP will continue to be billed.
Step 5: Check Whether the Mirror Session Rejects the Traffic Between ECS-source and ECS-test-A
Check whether the mirror session rejects the traffic between ECS-source and ECS-test-A.
- Establish a TCP connection between ECS-source and ECS-test-A.
Use ECS-source to send TCP packets to ECS-test-A and check whether ECS-test-A can receive the packets.
- Run the following command on ECS-source to listen to its port 1234:
nc -l <listening-port-of-mirror-source-ECS-source>
Example command:
nc -l 1234
If the command output is empty, the port is opened for listening.
- Run the following command on ECS-test-A to establish a TCP connection between ECS-source and ECS-test-A:
nc <private-IP-address-of-mirror-source-ECS-source> <listening-port-of-mirror-source-ECS-source>
Example command:
nc 192.168.0.230 1234
If the command output is empty, the TCP connection has been established.
- Enter any information (for example, hello) on ECS-source and press Enter to check whether requests can be sent over the TCP connection.
[root@ecs-source ~]# nc -l 1234 hello
- Check whether ECS-test-A can receive hello from ECS-source.
If information similar to the following is displayed, ECS-test-A receives hello from ECS-source.
[root@ecs-test-a ~]# nc 192.168.0.230 1234 hello
- Run the following command on ECS-source to listen to its port 1234:
- Check whether the outbound TCP packets from ECS-source to ECS-test-A can be mirrored to ECS-target.
When ECS-source sends a TCP packet to ECS-test-A, run tcpdump to check whether ECS-target can receive the packet. If ECS-target does not receive the packet, the mirror session rejects the outbound TCP traffic.
- Remotely log in to ECS-target.
For details, see How Do I Log In to My ECS?
- Run the following command on ECS-target to view its network interface name:
ifconfig
Information similar to the following is displayed. In this example, the network interface of the mirror target is 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 ...
- Run the following command on ECS-target to check whether it can receive packets:
tcpdump -i <network-interface-name-of-the-mirror-target> udp port 4789 -nne
Example command:
tcpdump -i eth0 udp port 4789 -nne
Information similar to the following is displayed:[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
- Enter any information (for example, to testa) on ECS-source and press Enter to send TCP packets to ECS-test-A.
Information similar to the following is displayed:
[root@ecs-source ~]# nc -l 1234 hello to testa
- Check whether ECS-test-A can receive to testa from ECS-source.
If information similar to the following is displayed, ECS-test-A can receive to testa from ECS-source.
[root@ecs-test-a ~]# nc 192.168.0.230 1234 hello to testa
- Check whether ECS-target can receive packets.
Information similar to the following is displayed. You cannot view the packet of to testa from ECS-source to ECS-test-A after running tcpdump. This means the reject rule works and packet to testa is not mirrored to 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
- Remotely log in to ECS-target.
- Check whether the inbound TCP packets from ECS-test-A to ECS-source can be mirrored to ECS-target.
When ECS-test-A sends a TCP packet to ECS-source, run tcpdump to check whether ECS-target can receive the packet. If ECS-target does not receive the packet, the mirror session rejects the inbound TCP traffic.
- Enter any information (for example, testa to source) on ECS-test-A and press Enter to send TCP packets to ECS-source.
Information similar to the following is displayed:
[root@ecs-test-a ~]# nc 192.168.0.230 1234 hello to testa testa to source
- Check whether ECS-source can receive information from ECS-test-A.
If information similar to the following is displayed, ECS-source can receive testa to source from ECS-test-A.
[root@ecs-source ~]# nc -l 1234 hello to testa testa to source
- Check whether ECS-target can receive TCP packets.
Information similar to the following is displayed. You cannot view the packet of testa to source from ECS-test-A to ECS-source after running tcpdump. This means the reject rule works and packet testa to source is not mirrored to 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
- Enter any information (for example, testa to source) on ECS-test-A and press Enter to send TCP packets to ECS-source.
Step 6: Check Whether the Mirror Session Accepts the Traffic Between ECS-source and ECS-test-B
Check whether the mirror session accepts the traffic between ECS-source and ECS-test-B.
- Establish a TCP connection between ECS-source and ECS-test-B.
Use ECS-test-B to send TCP packets to ECS-source and check whether ECS-source can receive the packets.
- Run the following command on ECS-test-B to listen to its port 1234:
nc -l <listening-port-of-ECS-test-B>
Example command:
nc -l 1234
If the command output is empty, the port is opened for listening.
- Run the following command on ECS-source to establish a TCP connection between ECS-source and ECS-test-B:
nc <private-IP-address-of-ECS-test-B> <listening-port-of-ECS-test-B>
Example command:
nc 10.0.1.156 1234
If the command output is empty, the TCP connection has been established.
- Enter any information (for example, hello) on ECS-test-B and press Enter to check whether requests can be sent over the TCP connection.
[root@ecs-test-b ~]# nc -l 1234 hello
- Check whether ECS-source can receive hello from ECS-test-B.
If information similar to the following is displayed, ECS-source can receive hello from ECS-test-B.
[root@ecs-source ~]# nc 10.0.1.156 1234 hello
- Run the following command on ECS-test-B to listen to its port 1234:
- Check whether the outbound TCP packets from ECS-source to ECS-test-B can be mirrored to ECS-target.
When ECS-source sends a TCP packet to ECS-test-B, run tcpdump to check whether ECS-target can receive the packet. If ECS-target receives the packet, the mirror session accepts the outbound TCP traffic.
- Remotely log in to ECS-target.
For details, see How Do I Log In to My ECS?
- Run the following command on ECS-target to view its network interface name:
ifconfig
Information similar to the following is displayed. In this example, the network interface of the mirror target is 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 ...
- Run the following command on ECS-target to check whether it can receive packets:
tcpdump -i <network-interface-name-of-the-mirror-target> udp port 4789 -nne
Example command:
tcpdump -i eth0 udp port 4789 -nne
Information similar to the following is displayed:[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
- Enter any information (for example, to testb) on ECS-source and press Enter to send TCP packets to ECS-test-B.
Information similar to the following is displayed:
[root@ecs-source ~]# nc 10.0.1.156 1234 hello to testb
- Check whether ECS-test-B can receive to testb from ECS-source.
If information similar to the following is displayed, ECS-test-B can receive to testb from ECS-source.
[root@ecs-test-b ~]# nc -l 1234 hello to testb
- Check whether ECS-target can receive TCP packets.
Information similar to the following is displayed. You can view the packet of to testb (time: 17:28:48.772658) from ECS-source to ECS-test-B after running tcpdump. This means the accept rule works and packet to testb is mirrored to ECS-target. In this packet, vni 1 is the identifier of mirror-session-01, indicating that ECS-target can receive the packet through this mirror session. The packet content has two parts: a VXLAN packet encapsulated by traffic mirroring and the original packet. For details, see Table 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
- Remotely log in to ECS-target.
- Check whether the inbound TCP packets from ECS-test-B to ECS-source can be mirrored to ECS-target.
When ECS-test-B sends a TCP packet to ECS-source, run tcpdump to check whether ECS-target can receive the packet. If ECS-target receives the packet, the mirror session accepts the inbound TCP traffic.
- Enter any information (for example, testb to source) on ECS-test-B and press Enter to send TCP packets to ECS-source.
Information similar to the following is displayed:
[root@ecs-test-b ~]# nc -l 1234 hello to testb testb to source
- Check whether ECS-source can receive testb to source from ECS-test-B.
If information similar to the following is displayed, ECS-source can receive testb to source from ECS-test-B.
[root@ecs-source ~]# nc 10.0.1.156 1234 hello to testb testb to source
- Check whether ECS-target can receive TCP packets.
Information similar to the following is displayed. You can view the packet of testb to source (time: 17:30:26.193420) from ECS-test-B to ECS-source after running tcpdump. This means the accept rule works and packet testb to source is mirrored to ECS-target. In this packet, vni 1 is the identifier of mirror-session-01, indicating that ECS-target can receive the packet through this mirror session. The packet content has two parts: a VXLAN packet encapsulated by traffic mirroring and the original packet. For details, see Table 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
- Enter any information (for example, testb to source) on ECS-test-B and press Enter to send TCP packets to ECS-source.
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot