neutron-meter-agent - makes traffic between internal networks NATed
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mirantis OpenStack |
Fix Released
|
Medium
|
MOS Neutron | ||
6.1.x |
Fix Released
|
High
|
MOS Maintenance | ||
7.0.x |
Won't Fix
|
Medium
|
MOS Maintenance | ||
8.0.x |
Won't Fix
|
Medium
|
MOS Neutron | ||
9.x |
Fix Released
|
High
|
Sergey Belous |
Bug Description
If neutron-meter-agent is installed and enabled, and a meter-label is created, all traffic between internal networks becomes NATed, which is unexpected and potentially causes firewall/routing issues.
Verified on 6.1
Steps to reproduce:
1. create 2 internal non-colliding networks
2. create a router
3. add interfaces for each network in the router
4. add gateway to the router
5. spawn 2 VMs, one in each internal network
6. assign Floating IPs to VMs
7. allow ICMP from the two internal network CIDRs via security group
8. start pinging one VM from another by internal IP
8. install and configure neutron-meter-agent
9. create a meter-label with `neutron meter-label-create --shared testlabel`
10. do `crm resource restart p_neutron-l3-agent` to quickly refresh the namespaces (might be not necessary, not sure)
Expected result: ping will recover after a pause
Observed result: ping does not recover
The following traffic is observed in qrouter:
before creating meter-label:
root@node-5:~# tcpdump -i qr-ac3acd7b-10 -n -l
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on qr-ac3acd7b-10, link-type EN10MB (Ethernet), capture size 65535 bytes
15:32:43.973916 IP 192.168.1.2 > 192.168.0.2: ICMP echo request, id 35329, seq 30, length 64
15:32:43.974536 IP 192.168.0.2 > 192.168.1.2: ICMP echo reply, id 35329, seq 30, length 64
15:32:44.974347 IP 192.168.1.2 > 192.168.0.2: ICMP echo request, id 35329, seq 31, length 64
15:32:44.974940 IP 192.168.0.2 > 192.168.1.2: ICMP echo reply, id 35329, seq 31, length 64
after creating meter-label:
15:46:09.943503 IP 192.168.1.2 > 192.168.0.2: ICMP echo request, id 38657, seq 0, length 64
15:46:09.943529 IP 172.16.22.133 > 192.168.0.2: ICMP echo request, id 38657, seq 0, length 64
15:46:10.945857 IP 192.168.1.2 > 192.168.0.2: ICMP echo request, id 38657, seq 1, length 64
15:46:10.946377 IP 172.16.22.133 > 192.168.0.2: ICMP echo request, id 38657, seq 1, length 64
I will also attach iptables-save output before and after meter rules are injected.
tags: | added: wontfix-low |
tags: | added: on-verification |
tags: | added: wait-for-stable |
The issue is caused by that fact that the order of following rules is reverted:
before: l3-agent- POSTROUTING postrouting- bottom
-A POSTROUTING -j neutron-
-A POSTROUTING -j neutron-
after: postrouting- bottom l3-agent- POSTROUTING
-A POSTROUTING -j neutron-
-A POSTROUTING -j neutron-