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 ПРИНЯТЬ