Openstack Neutron - виртуальная машина как маршрутизатор между двумя сетями одного и того же клиента

У меня есть следующие настройки:

VM1 --- NET1 --- VM2 --- NET2 --- VM3

VM2 может пропинговать как VM1, так и VM3. Однако при эхо-запросе от VM1 до VM3 пакеты пересылаются VM2, но никогда не достигают VM3 (то есть они отбрасываются NET2, поскольку tcpdump показывает, что пакеты отправляются с интерфейса NET2 VM2).

То же самое при пинге от VM3 до VM1. Пакеты достигают VM2, затем VM2 пересылает их в V1, но они никогда не достигают VM1.

Похоже, что NET2 не позволяет пакетам с srcIP NET1 проходить. То же самое с фильтрацией пакетов NET1 с помощью srcIP NET2.

Вот как мы создаем каждую сеть в нашем тепловом шаблоне.

net1:
   type: OS::Neutron::Net
   properties:
      name: net1_name

net1_subnet:
   type: OS::Neutron::Subnet
   properties:
     network_id: { get_resource: net1 }
     cidr: { get_param: net1_cidr }

Есть ли способ заставить пакеты перетекать из NET1 в NET2 через VM2, который действует как маршрутизатор?

Спасибо!

========== Обновление ====

Похоже, я нашел решение: добавление IP-адресов VM1 и VM3 к "allow_address_pairs" портов (Neutron:Port) VM2.

VM2_left_port:
    type: OS::Neutron::Port
    properties:
       allowed_address_pairs: [{"ip_address": { get_param: VM3_IP}}]
       network: ...
       fixed_ips: ...

VM2_right_port:
    type: OS::Neutron::Port
    properties:
       allowed_address_pairs: [{"ip_address": { get_param: VM1_IP }}]
       network: ...
       fixed_ips: ...

Вопрос, является ли это правильным способом разрешить маршрутизацию (используя VM2 в качестве маршрутизатора) между сетями.

2 ответа

Решение

Таким образом, проблема на самом деле заключалась в функции "port_security" Openstack, которая блокирует трафик из одной подсети в другую. Чтобы разрешить поток пакетов между подсетями, в качестве альтернативы подходу, предложенному мною в этом вопросе, можно использовать следующие параметры ("allow_address_pairs").

VM2_left_port:
    type: OS::Neutron::Port
    properties:
       security_groups: []
       port_security_enabled: False
       network: ...
       fixed_ips: ...

VM2_right_port:
    type: OS::Neutron::Port
    properties:
       security_groups: []
       port_security_enabled: False
       network: ...
       fixed_ips: ...

Я думаю, что разрешить взаимодействие между двумя сетевыми интерфейсами в VM2.

echo 1> / proc / sys / net / ipv4 / ip_forward

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

sudo iptables -A FORWARD -i eth0 -o eth1 -m состояние - СОСТОЯНИЕ, СОЗДАНО -j ПРИНЯТЬ

sudo iptables -A ВПЕРЕД -i eth1 -o eth0 -j ПРИНЯТЬ

Другие вопросы по тегам