<div dir="ltr">Hi all,<div><br></div><div>When using neutron on CentOS 7 with OVSHybridIptablesFirewallDriver, create a vm with IPv4/IPv6 dual stack port,</div><div>then remove all security group, we can get response with ping dhcp or router using IPv6 address in vm, while IPv4 can't.</div><div>IPv6 works different with IPv4 in some cases and some useful function must work with ICMPv6 like NDP, NS, NA.<br></div><div><br></div><div>Checking these two links below, neutron only drop IPv6 RA from vm, and allow all ICMPv6</div><div>ICMPv6 Type 128 Echo Request and Type 129 Echo Reply are allowed by default.</div><div>Should we try to restrict ICMPv6 some types or there are some considerations and just follow ITEF 4890?</div><div><br></div><div>IETF 4890 [section <span style="color:rgb(0,0,0);white-space:pre-wrap">4.3.2.  Traffic That Normally Should Not Be Dropped] mentioned that:</span></div><div><pre class="gmail-newpage" style="font-size:13.3333px;margin-top:0px;margin-bottom:0px;break-before:page;color:rgb(0,0,0)">As discussed in
   <a href="https://tools.ietf.org/html/rfc4890#section-3.2">Section 3.2</a>, the risks from port scanning in an IPv6 network are much
   less severe, and it is not necessary to filter IPv6 Echo Request
   messages.</pre>[section 3.2. Probing]<pre class="gmail-newpage" style="font-size:13.3333px;margin-top:0px;margin-bottom:0px;break-before:page;color:rgb(0,0,0)"><pre class="gmail-newpage" style="font-size:13.3333px;margin-top:0px;margin-bottom:0px;break-before:page">However, the very large address space of IPv6 makes probing a less
   effective weapon as compared with IPv4 provided that addresses are
   not allocated in an easily guessable fashion.</pre></pre></div><div><br></div><div><p style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:"Helvetica Neue";color:rgb(17,142,255)"><a href="https://github.com/openstack/neutron/commit/a8a9d225d8496c044db7057552394afd6c950a8e" target="_blank">https://github.com/openstack/neutron/commit/a8a9d225d8496c044db7057552394afd6c950a8e</a></p><br><p style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:"Helvetica Neue";color:rgb(17,142,255)">





</p><p style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:"Helvetica Neue";color:rgb(17,142,255)"><a href="https://www.ietf.org/rfc/rfc4890.txt" target="_blank">https://www.ietf.org/rfc/rfc4890.txt</a></p></div><div><br></div><div><div><br></div><div>Commands are:</div><div>neutron port-update --no-security-groups 0307f016-0cc8-468b-bf3e-36ebe50e13ac</div><div><br></div><div>ping6 from vm to dhcp</div><div><br></div><div>ip6tables rules in compute node:</div><div>PS: seems rules for type 131/135/143 are included in the rule</div><div><br></div><div># ip6tables-save | grep 08a0812a</div><div>-A neutron-openvswi-o08a0812a-9 -s ::/128 -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 131 -m comment --comment "Allow IPv6 ICMP traffic." -j RETURN<br>-A neutron-openvswi-o08a0812a-9 -s ::/128 -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -m comment --comment "Allow IPv6 ICMP traffic." -j RETURN<br>-A neutron-openvswi-o08a0812a-9 -s ::/128 -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 143 -m comment --comment "Allow IPv6 ICMP traffic." -j RETURN<br></div><div>-A neutron-openvswi-o08a0812a-9 -p ipv6-icmp -m icmp6 --icmpv6-type 134 -m comment --comment "Drop IPv6 Router Advts from VM Instance." -j DROP<br><font color="#ff0000">-A neutron-openvswi-o08a0812a-9 -p ipv6-icmp -m comment --comment "Allow IPv6 ICMP traffic." -j RETURN</font><br></div><div>-A neutron-openvswi-o08a0812a-9 -m comment --comment "Send unmatched traffic to the fallback chain." -j neutron-openvswi-sg-fallback<br></div><div><br></div><div>full rules are at Ref #3</div><div><br></div><div><br><div><br></div></div><div><br></div><div>REF #1</div><div><div>ml2_config.ini</div><div>[securitygroup]<br>firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver</div></div><div><br></div><div>Ref #2</div><div>Chain neutron-openvswi-o08a0812a-9 (2 references)<br> pkts bytes target     prot opt in     out     source               destination<br>    0     0 RETURN     icmpv6    *      *       ::                   ff02::/16            ipv6-icmptype 131 /* Allow IPv6 ICMP traffic. */<br>    1    72 RETURN     icmpv6    *      *       ::                   ff02::/16            ipv6-icmptype 135 /* Allow IPv6 ICMP traffic. */<br>    2   152 RETURN     icmpv6    *      *       ::                   ff02::/16            ipv6-icmptype 143 /* Allow IPv6 ICMP traffic. */<br>    5   344 neutron-openvswi-s08a0812a-9  all      *      *       ::/0                 ::/0<br>    0     0 DROP       icmpv6    *      *       ::/0                 ::/0                 ipv6-icmptype 134 /* Drop IPv6 Router Advts from VM Instance. */<br>    5   344 RETURN     icmpv6    *      *       ::/0                 ::/0                 /* Allow IPv6 ICMP traffic. */<br>    0     0 RETURN     udp      *      *       ::/0                 ::/0                 udp spt:546 dpt:547 /* Allow DHCP client traffic. */<br>    0     0 DROP       udp      *      *       ::/0                 ::/0                 udp spt:547 dpt:546 /* Prevent DHCP Spoofing by VM. */<br>    0     0 RETURN     all      *      *       ::/0                 ::/0                 state RELATED,ESTABLISHED /* Direct packets associated with a known session to the RETURN chain. */<br>    0     0 DROP       all      *      *       ::/0                 ::/0                 state INVALID /* Drop packets that appear related to an existing connection (e.g. TCP ACK/FIN) but do not have an entry in conntrack. */<br>    0     0 neutron-openvswi-sg-fallback  all      *      *       ::/0                 ::/0                 /* Send unmatched traffic to the fallback chain. */<br></div><div><br></div><div>Ref #3</div><div># ip6tables-save | grep 08a0812a</div><div><br>-A neutron-openvswi-PREROUTING -m physdev --physdev-in qvb08a0812a-9e -m comment --comment "Set zone for 812a-9ef7-45e3-9d81-9463dd80e63e" -j CT --zone 4104<br>-A neutron-openvswi-PREROUTING -i qvb08a0812a-9e -m comment --comment "Set zone for 812a-9ef7-45e3-9d81-9463dd80e63e" -j CT --zone 4104<br>-A neutron-openvswi-PREROUTING -m physdev --physdev-in tap08a0812a-9e -m comment --comment "Set zone for 812a-9ef7-45e3-9d81-9463dd80e63e" -j CT --zone 4104<br>:neutron-openvswi-i08a0812a-9 - [0:0]<br>:neutron-openvswi-o08a0812a-9 - [0:0]<br>:neutron-openvswi-s08a0812a-9 - [0:0]<br>-A neutron-openvswi-FORWARD -m physdev --physdev-out tap08a0812a-9e --physdev-is-bridged -m comment --comment "Direct traffic from the VM interface to the security group chain." -j neutron-openvswi-sg-chain<br>-A neutron-openvswi-FORWARD -m physdev --physdev-in tap08a0812a-9e --physdev-is-bridged -m comment --comment "Direct traffic from the VM interface to the security group chain." -j neutron-openvswi-sg-chain<br>-A neutron-openvswi-INPUT -m physdev --physdev-in tap08a0812a-9e --physdev-is-bridged -m comment --comment "Direct incoming traffic from VM to the security group chain." -j neutron-openvswi-o08a0812a-9<br>-A neutron-openvswi-i08a0812a-9 -p ipv6-icmp -m icmp6 --icmpv6-type 130 -j RETURN<br>-A neutron-openvswi-i08a0812a-9 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j RETURN<br>-A neutron-openvswi-i08a0812a-9 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j RETURN<br>-A neutron-openvswi-i08a0812a-9 -m state --state RELATED,ESTABLISHED -m comment --comment "Direct packets associated with a known session to the RETURN chain." -j RETURN<br>-A neutron-openvswi-i08a0812a-9 -p ipv6-icmp -m icmp6 --icmpv6-type 134 -j RETURN<br>-A neutron-openvswi-i08a0812a-9 -d 20ff::c/128 -p udp -m udp --sport 547 --dport 546 -j RETURN<br>-A neutron-openvswi-i08a0812a-9 -d fe80::/64 -p udp -m udp --sport 547 --dport 546 -j RETURN<br>-A neutron-openvswi-i08a0812a-9 -m state --state INVALID -m comment --comment "Drop packets that appear related to an existing connection (e.g. TCP ACK/FIN) but do not have an entry in conntrack." -j DROP<br>-A neutron-openvswi-i08a0812a-9 -m comment --comment "Send unmatched traffic to the fallback chain." -j neutron-openvswi-sg-fallback<br><font color="#ff0000">-A neutron-openvswi-o08a0812a-9 -s ::/128 -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 131 -m comment --comment "Allow IPv6 ICMP traffic." -j RETURN<br>-A neutron-openvswi-o08a0812a-9 -s ::/128 -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -m comment --comment "Allow IPv6 ICMP traffic." -j RETURN<br>-A neutron-openvswi-o08a0812a-9 -s ::/128 -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 143 -m comment --comment "Allow IPv6 ICMP traffic." -j RETURN</font><br>-A neutron-openvswi-o08a0812a-9 -j neutron-openvswi-s08a0812a-9<br><font color="#ff0000">-A neutron-openvswi-o08a0812a-9 -p ipv6-icmp -m icmp6 --icmpv6-type 134 -m comment --comment "Drop IPv6 Router Advts from VM Instance." -j DROP<br>-A neutron-openvswi-o08a0812a-9 -p ipv6-icmp -m comment --comment "Allow IPv6 ICMP traffic." -j RETURN</font><br>-A neutron-openvswi-o08a0812a-9 -p udp -m udp --sport 546 --dport 547 -m comment --comment "Allow DHCP client traffic." -j RETURN<br>-A neutron-openvswi-o08a0812a-9 -p udp -m udp --sport 547 --dport 546 -m comment --comment "Prevent DHCP Spoofing by VM." -j DROP<br>-A neutron-openvswi-o08a0812a-9 -m state --state RELATED,ESTABLISHED -m comment --comment "Direct packets associated with a known session to the RETURN chain." -j RETURN<br>-A neutron-openvswi-o08a0812a-9 -m state --state INVALID -m comment --comment "Drop packets that appear related to an existing connection (e.g. TCP ACK/FIN) but do not have an entry in conntrack." -j DROP<br><font color="#ff0000">-A neutron-openvswi-o08a0812a-9 -m comment --comment "Send unmatched traffic to the fallback chain." -j neutron-openvswi-sg-fallback</font><br>-A neutron-openvswi-s08a0812a-9 -s 20ff::c/128 -m mac --mac-source FA:16:3E:7C:D8:C0 -m comment --comment "Allow traffic from defined IP/MAC pairs." -j RETURN<br>-A neutron-openvswi-s08a0812a-9 -s fe80::f816:3eff:fe7c:d8c0/128 -m mac --mac-source FA:16:3E:7C:D8:C0 -m comment --comment "Allow traffic from defined IP/MAC pairs." -j RETURN<br>-A neutron-openvswi-s08a0812a-9 -m comment --comment "Drop traffic without an IP/MAC allow rule." -j DROP<br>-A neutron-openvswi-sg-chain -m physdev --physdev-out tap08a0812a-9e --physdev-is-bridged -m comment --comment "Jump to the VM specific chain." -j neutron-openvswi-i08a0812a-9<br>-A neutron-openvswi-sg-chain -m physdev --physdev-in tap08a0812a-9e --physdev-is-bridged -m comment --comment "Jump to the VM specific chain." -j neutron-openvswi-o08a0812a-9<br></div></div></div>