Как я могу настроить свой экземпляр EC2 с запущенным DPDK для фильтрации трафика между эластичным IP-адресом и другим экземпляром ec2? - PullRequest
1 голос
/ 10 июля 2019

У меня есть аппаратная настройка, которую мне нужно смоделировать в AWS. В аппаратном обеспечении у меня есть компьютер клиента, подключенный к Интернету через кабельный модем. Между кабельным модемом и компьютером клиента я вставляю свой компьютер с DPDK и приложением фильтра пакетов. Все пакеты от кабельного модема входят в мой компьютер / dpdk в Int-1, обрабатываются, и оставляют мой компьютер в Int-2, чтобы перейти к системе клиента. Тот же путь данных проходит в обратном порядке для пакетов, исходящих из системы клиента. Пакеты просто следуют по кабелю Ethernet туда, куда они должны идти.

Мне нужно повторить это в облаке AWS, но у меня нет Ethernet-кабелей для принудительной маршрутизации пакетов. Мне нужно вставить свой экземпляр EC2, на котором запущен DPDK, между Elastic IP и экземпляром EC2 клиента с частным IP. Настройка выглядит следующим образом:

                  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 мне нужен NAT пользовательского пространства, который работает на моем ec2, или мне нужен какой-то другой способ для маршрутизации пакетов из EIP на мой интерфейс Int-1, а затем из интерфейса Int-2 к клиенту ec2 и обратно. .

Существует много предполагаемых стеков DPDK tcp / ip, но ни один из них не работает по той или иной причине. Мне бы хотелось, чтобы это работало только с маршрутизацией AWS и без NAT, но я не знаю, возможно ли это.

Помощь!

1 Ответ

1 голос
/ 11 июля 2019

Для реализации базового NAT вам не нужен стек TCP / IP.Просто проанализируйте каждый кадр до заголовка IP и замените любой IP 1.2.3.4 на 10.0.1.101 и наоборот.Затем просто установите mbuf.ol_flags для пересчета контрольных сумм в NIC или сделайте это в программном обеспечении, и все готово.

Пожалуйста, посмотрите библиотеку Mbuf и rte_ipv4_udptcp_cksum () для получения более подробной информации о контрольных суммах.

Другая проблема заключается в том, что ваше приложение фильтрации DPDK работает как устройство L3 (то есть маршрутизатор), хотя это может быть намного проще, если оно работает какпрозрачное устройство L2 (т.е. прозрачный мост).Это избавит от необходимости дополнительного маршрута на шлюзе.

...