繁体   English   中英

Openstack Neutron-VM作为同一租户中两个网络之间的路由器

[英]Openstack Neutron - VM as a router between two networks within the same tenant

我有以下设置:

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

VM2可以ping通VM1和VM3。 但是,从VM1 ping到VM3时,数据包由VM2转发,但从未到达VM3(即,由于tcpdump显示数据包是从VM2的NET2接口发出的,因此它们被NET2丢弃)。

从VM3 ping通到VM1时相同。 数据包到达VM2,然后VM2将它们转发到V1,但它们从未到达VM1。

看起来NET2不允许带有NET1的srcIP的数据包通过。 NET1使用NET2的srcIP过滤数据包也是如此。

这就是我们在热量模板中创建每个网络的方式。

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 }

有没有办法使数据包通过充当路由器的VM2从NET1流到NET2?

谢谢!

==========更新====

看来我找到了解决方案:将VM1和VM3的IP添加到VM2的端口(Neutron:Port)的“ allowed_address_pairs”中。

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作为路由器)的正确方法。

我认为允许在VM2中的两个网络接口之间进行互通。

回声1> / proc / sys / net / ipv4 / ip_forward

sudo iptables -t nat-输出-o eth0 -j伪装

sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state相关,已确定-j ACCEPT

sudo iptables -A转发-i eth1 -o eth0 -j接受

因此,问题实际上是Openstack的“ port_security”功能,该功能阻止了从一个子网到另一个子网的流量。 为了允许数据包在子网之间流动,可以使用以下选项替代我在问题中提出的方法(“ allowed_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: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM