我有一个硬件设置,需要在AWS上进行仿真。在硬件方面,我有一个通过电缆调制解调器连接到互联网的客户计算机。在电缆调制解调器和客户计算机之间,插入运行DPDK和数据包筛选器应用程序的计算机。来自电缆调制解调器的所有数据包都在Int-1进入我的计算机/ dpdk,经过处理,然后将我的计算机保留在Int-2上,以转到客户的系统。对于来自客户系统的数据包,反向遍历相同的数据路径。数据包只是沿着以太网电缆到达它们应该去的地方。
我需要在AWS云中复制该副本,但是没有以太网电缆来强制路由数据包。我需要在弹性IP和具有私有IP的客户的EC2实例之间插入运行DPDK的EC2实例。设置如下:
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流量进行NAT。但是,使用DPDK时,我需要在ec2上运行的用户空间NAT,或者需要其他方式将数据包从EIP路由到我的Int-1接口,然后再从Int-2接口路由到客户ec2,然后再返回
据称有许多DPDK tcp / ip堆栈,但是似乎没有一个因某种原因而工作。我很想单独使用AWS路由而不使用NAT来完成这项工作,但是不知道是否可行。
帮助!
答案 0 :(得分:1)
要实现基本的NAT,您不需要TCP / IP堆栈。只需将每个帧解析为IP标头,然后将任何IP 1.2.3.4
替换为10.0.1.101
,反之亦然。然后只需设置mbuf.ol_flags
即可在NIC中重新计算校验和,或者在软件中进行校验就可以了。
有关校验和的更多详细信息,请参见Mbuf library和rte_ipv4_udptcp_cksum()。
另一个问题是您的DPDK过滤应用程序可以用作L3设备(即路由器),而如果它用作透明L2设备(即透明网桥)则可能会更简单。这将消除网关上额外路由的需要。