Openstack Neutron - VM 作为同一租户内两个网络之间的路由器
Posted
技术标签:
【中文标题】Openstack Neutron - VM 作为同一租户内两个网络之间的路由器【英文标题】:Openstack Neutron - VM as a router between two networks within the same tenant 【发布时间】:2017-04-13 16:50:16 【问题描述】:我有以下设置:
VM1---NET1---VM2---NET2---VM3
VM2 可以 ping 通 VM1 和 VM3。但是,当从 VM1 ping 到 VM3 时,数据包由 VM2 转发,但从未到达 VM3(即,它们被 NET2 丢弃,因为 tcpdump 显示数据包是从 VM2 的 NET2 接口发出的)。
从 VM3 ping 到 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
有没有办法让数据包通过充当路由器的 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: ...
问题是否是允许在 to 网络之间路由(使用 VM2 作为路由器)的正确方法。
【问题讨论】:
【参考方案1】:我认为允许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 state --state 相关,已建立 -j 接受
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
【讨论】:
感谢您的评论,但我的问题不是路由配置,而是 Openstack 默认阻止子网之间的流量...我找到了解决方案,将其作为答案发布。【参考方案2】:所以问题实际上是 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: ...
【讨论】:
以上是关于Openstack Neutron - VM 作为同一租户内两个网络之间的路由器的主要内容,如果未能解决你的问题,请参考以下文章
OpenStack Train:业务组件Neutron装安装
OpenStack neutron 环境云主机使用keepalived vip + 给vip绑定浮动IP 步骤及注意事项