我有以下设置:
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 不允许 srcIP 为 NET1 的数据包通过。使用 NET2 的 srcIP 过滤数据包与 NET1 相同。
这就是我们在热模板中创建每个网络的方式。
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 作为路由器)的正确方法。