如何配置我的 EC2 实例 运行 DPDK 以过滤弹性 IP 和另一个 ec2 实例之间的流量?
How can I configure my EC2 instance running DPDK to filter traffic between elastic IP and another ec2 instance?
我有一个硬件设置需要在 AWS 上模拟。在硬件方面,我有一个客户的计算机通过电缆调制解调器连接到互联网。在电缆调制解调器和客户计算机之间,我插入了我的计算机 运行 DPDK 和一个数据包过滤器应用程序。来自电缆调制解调器的所有数据包都在 Int-1 进入我的 computer/dpdk,进行处理,然后将我的计算机留在 Int-2 上以转到客户的系统。对于来自客户系统的数据包,反向遍历相同的数据路径。数据包只需沿着以太网电缆到达它们应该去的地方。
我需要在 AWS 云中复制它,但没有以太网电缆来强制路由数据包。我需要在弹性 IP 和具有私有 IP 的客户 EC2 实例之间插入我的 EC2 实例 运行 DPDK。设置如下所示:
VPC
+------------------------------------------------+
| |
| c5.2xlarge EC2 t2.micro EC2 |
| +--------------------+ +----------------+ |
| | My ec2 with DPDK | | Customer ec2 | |
EIP 1.2.3.4 <---> Int-1 10.0.1.101 | | | |
| | ^ | | | |
| | | | | | |
| | v | | | |
| | <processing> | | | |
| | ^ | | | |
| | | | | | |
| | v | | | |
| | 10.0.2.101 Int-2 <---> 10.0.1.89 eth0 | |
| | | | | |
| +--------------------+ +----------------+ |
+------------------------------------------------+
这是 centos7 上的 运行。
当DPDK为运行时,ens6变为Int-1,ens7变为Int-2。
EIP 1.2.3.4 曾经附加到客户的私有 IP 10.0.1.89,因此互联网用户可以访问客户的 ec2,客户的 ec2 用户可以访问互联网。
在我的 ec2 实例添加到 VPC 后,EIP 从客户的 ec2 分离并重新连接到我的 ec2,现在我想过滤进出客户的 ec2 的双向流量。
如果我的 ec2 不是 运行 DPDK,我可以简单地使用 iptables 来双向 NAT 流量。但是对于 DPDK,我需要一个在我的 ec2 上运行的 user-space NAT,或者我需要一些其他方法将数据包从 EIP 路由到我的 Int-1 接口,然后从 Int-2 接口发送到客户ec2,然后返回。
那里有许多声称的 DPDK tcp/ip 堆栈,但 none 似乎确实出于某种原因起作用。我很乐意单独使用 AWS 路由而不使用 NAT,但不知道这是否可行。
求助!
要实现基本 NAT,您不需要 TCP/IP 堆栈。只需将每个帧解析为 IP header,并将任何 IP 1.2.3.4
替换为 10.0.1.101
和 vice-versa。然后只需设置 mbuf.ol_flags
以重新计算 NIC 中的校验和或在软件中执行即可。
有关校验和的更多详细信息,请参阅 Mbuf library and rte_ipv4_udptcp_cksum()。
另一个问题是您的 DPDK 过滤应用程序作为 L3 设备(即路由器)工作,而如果它作为透明 L2 设备(即透明网桥)工作可能会简单得多。这将消除网关上额外路由的需要。
我有一个硬件设置需要在 AWS 上模拟。在硬件方面,我有一个客户的计算机通过电缆调制解调器连接到互联网。在电缆调制解调器和客户计算机之间,我插入了我的计算机 运行 DPDK 和一个数据包过滤器应用程序。来自电缆调制解调器的所有数据包都在 Int-1 进入我的 computer/dpdk,进行处理,然后将我的计算机留在 Int-2 上以转到客户的系统。对于来自客户系统的数据包,反向遍历相同的数据路径。数据包只需沿着以太网电缆到达它们应该去的地方。
我需要在 AWS 云中复制它,但没有以太网电缆来强制路由数据包。我需要在弹性 IP 和具有私有 IP 的客户 EC2 实例之间插入我的 EC2 实例 运行 DPDK。设置如下所示:
VPC
+------------------------------------------------+
| |
| c5.2xlarge EC2 t2.micro EC2 |
| +--------------------+ +----------------+ |
| | My ec2 with DPDK | | Customer ec2 | |
EIP 1.2.3.4 <---> Int-1 10.0.1.101 | | | |
| | ^ | | | |
| | | | | | |
| | v | | | |
| | <processing> | | | |
| | ^ | | | |
| | | | | | |
| | v | | | |
| | 10.0.2.101 Int-2 <---> 10.0.1.89 eth0 | |
| | | | | |
| +--------------------+ +----------------+ |
+------------------------------------------------+
这是 centos7 上的 运行。 当DPDK为运行时,ens6变为Int-1,ens7变为Int-2。
EIP 1.2.3.4 曾经附加到客户的私有 IP 10.0.1.89,因此互联网用户可以访问客户的 ec2,客户的 ec2 用户可以访问互联网。
在我的 ec2 实例添加到 VPC 后,EIP 从客户的 ec2 分离并重新连接到我的 ec2,现在我想过滤进出客户的 ec2 的双向流量。
如果我的 ec2 不是 运行 DPDK,我可以简单地使用 iptables 来双向 NAT 流量。但是对于 DPDK,我需要一个在我的 ec2 上运行的 user-space NAT,或者我需要一些其他方法将数据包从 EIP 路由到我的 Int-1 接口,然后从 Int-2 接口发送到客户ec2,然后返回。
那里有许多声称的 DPDK tcp/ip 堆栈,但 none 似乎确实出于某种原因起作用。我很乐意单独使用 AWS 路由而不使用 NAT,但不知道这是否可行。
求助!
要实现基本 NAT,您不需要 TCP/IP 堆栈。只需将每个帧解析为 IP header,并将任何 IP 1.2.3.4
替换为 10.0.1.101
和 vice-versa。然后只需设置 mbuf.ol_flags
以重新计算 NIC 中的校验和或在软件中执行即可。
有关校验和的更多详细信息,请参阅 Mbuf library and rte_ipv4_udptcp_cksum()。
另一个问题是您的 DPDK 过滤应用程序作为 L3 设备(即路由器)工作,而如果它作为透明 L2 设备(即透明网桥)工作可能会简单得多。这将消除网关上额外路由的需要。