VPC ACL list default_allow allows no IPv6 traffic on a dual-stack tier

オープン
#14,627 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
java, linux, python, sql

調査の方向性

Read schema-410to420.sql and configure.py, especially CsAcl.__process_ip6(), to trace how the built-in ACL rules reach the IPv6 chains. First clarify with the community whether default_allow is intended to permit IPv6, since the issue describes a potentially breaking upgrade change and an alternative documentation path. Done means the chosen behavior is implemented or documented and verified on a dual-stack tier.

索引モデルが issue の本文から書いたものです。

説明

component:ipv6 ipv6
problem

The built-in default_allow network ACL list ("Default Network ACL Allow All") allows all IPv4 traffic but no IPv6 traffic. A dual-stack VPC tier that uses it gets no IPv6 ingress and no IPv6 egress through the VPC router.

Why:

  • The list is seeded in schema-410to420.sql with two items, all Ingress Allow and all Egress Allow, each with the single CIDR 0.0.0.0/0. No later upgrade adds ::/0 to them.
  • On the VPC router, CsAcl.__process_ip6() in configure.py removes the IPv4 CIDRs from each rule (removeUndesiredCidrs(cidr, 4)) and skips a rule that has none left. Both default_allow items are skipped. The tier's ip6 ip6_acl chains (<dev>_ingress_policy and <dev>_egress_policy) are left with only their closing drop rule.
  • The IPv4 side renders as expected: -j ACCEPT for all protocols in both directions.

default_deny is not affected in practice: its items also carry only 0.0.0.0/0 and are skipped on IPv6, and the chain still ends in drop.

This looks inconsistent with the rest of the ACL code, which treats "all addresses" as both families:

  • createNetworkACL without cidrlist creates the rule with 0.0.0.0/0 and ::/0 (since IPv6 VPC tiers were added in 4.17).
  • SetNetworkACLCommand sends 0.0.0.0/0,::/0 to the router for a rule that has no CIDR.

I'm not sure if this is meant to be this way. Opening up IPv6 on default_allow would change existing deployments on upgrade. A dual-stack tier's IPv6 addresses are reachable from outside without NAT, so every VM on a default_allow tier would become reachable over IPv6 on all ports. Whether that is what "Allow All" should mean for IPv6, or whether IPv6 should stay closed and the behaviour be documented, needs a decision from the community.

versions

4.17 and later (since IPv6 support for VPC tiers). Seen on 4.22 and main, with system VM template 4.22.0.

The steps to reproduce the bug
  1. Create a zone IPv6 guest prefix and a dual-stack VPC offering and dual-stack VPC tier network offering.
  2. Create a VPC and a tier on it with aclid set to default_allow. Deploy a VM on the tier.
  3. On the VPC router: nft list table ip6 ip6_acl. The tier's ingress and egress policy chains contain only the final drop rule. iptables -S shows the default_allow rules as ACCEPT for IPv4.
  4. From the VM, an IPv6 connection to an external address fails. An IPv6 connection to the VM from outside the VPC also fails. The same over IPv4 (with a static NAT or port forwarding for ingress) works.
What to do about it?

Two options, and I don't know which one is intended:

  1. Make default_allow allow IPv6 too. This needs an upgrade SQL that adds ::/0 to the two default_allow items (seed data, so main only). It opens IPv6 on every existing tier on that list at the next ACL apply, so it would need a release note.
  2. Keep IPv6 closed on default_allow, and document that a dual-stack tier needs its own ACL list with ::/0 rules. The list's description could say "IPv4" so it isn't mistaken for both families.
主要言語
Java
スター
3.1k
フォーク
1.4k
平均マージ
7日 16時間
マージ済み PR(30日)
15

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

apache/cloudstack のほかの issue

apache/cloudstack の issue をすべて見る

似ている issue

Java の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。