> But there can be multiple networks behind the VPC router or not? If there are > multiple networks you need >/64 as you can then allocate /64s from that larger subnet.
Yes, there will be multiple /64s in a VPC, but they are very likely to be non-contiguous, so in general we should treat as completely separate networks. One could in theory dedicate a range to a domain/account and statically route to that, but I'm not sure if that will happen often. Cheers Alex -----Original Message----- From: Wido den Hollander <w...@widodh.nl> Sent: 13 May 2022 11:30 To: dev@cloudstack.apache.org Subject: Re: IPV6 in Isolated/VPC networks Op 12-05-2022 om 16:10 schreef Alex Mattioli: >> ipv6 route fd23:313a:2f53:3cbf::/64 >> fd23:313a:2f53:3000:1c00:baff:fe00:4 > > That's correct Ok. So in that case the subnet would be very welcome to be present in the message on the bus. > >> Or a larger subnet: >> ipv6 route fd23:313a:2f53:3c00::/56 >> fd23:313a:2f53:3000:1c00:baff:fe00:4 > > Not really, the subnets for isolated/VPC networks are always /64. Which > means also no real need to include subnets as well. > But there can be multiple networks behind the VPC router or not? If there are multiple networks you need >/64 as you can then allocate /64s from that larger subnet. Wido > Cheers > Alex > > > > > > -----Original Message----- > From: Wido den Hollander <w...@widodh.nl> > Sent: 12 May 2022 16:04 > To: Abhishek Kumar <abhishek.ku...@shapeblue.com>; > dev@cloudstack.apache.org > Subject: Re: IPV6 in Isolated/VPC networks > > > > On 5/12/22 09:55, Abhishek Kumar wrote: >> Hi Wido, >> >> I do not understand what you mean by WAB address but > > WAB was a type. I meant WAN. > >> fd23:313a:2f53:3000:1c00:baff:fe00:4 is the public IP of the network >> (IPv6 of the public NIC of the network VR) in the sample. >> Yes, route for fd23:313a:2f53:3cbf::/64 need to be added to this IP. >> fd23:313a:2f53:3cbf::/64 is guest IPv6 CIDR of the network here. >> > > So that means that I would need to run this command on my upstream router: > > ipv6 route fd23:313a:2f53:3cbf::/64 > fd23:313a:2f53:3000:1c00:baff:fe00:4 > > Or a larger subnet: > > ipv6 route fd23:313a:2f53:3c00::/56 > fd23:313a:2f53:3000:1c00:baff:fe00:4 > >> Currently, the message on event bus does not include subnet. Should >> that be included? > > Yes, because then you can pickup those messages and inject the route via > ExaBGP into a routing table right away. > >> In case of VPCs, there could be multiple tiers which will need >> multiple routes to be added. Will that be an issue if we include >> current network/tier subnet in the event message? > > No, as long as it points to the same VR you simply have multiple subnets > being routed to the same VR. > > I do wonder what happens if you destroy the VR and create a new one. The WAN > address then changes (due to SLAAC) and thus the routes need to be > re-programmed. > > Wido > >> >> Regards, >> Abhishek >> >> >> >> >> >> >> --------------------------------------------------------------------- >> - >> -- >> *From:* Wido den Hollander <w...@widodh.nl> >> *Sent:* 10 May 2022 19:01 >> *To:* dev@cloudstack.apache.org <dev@cloudstack.apache.org>; Abhishek >> Kumar <abhishek.ku...@shapeblue.com> >> *Subject:* Re: IPV6 in Isolated/VPC networks >> >> Hi, >> >> Op 10-05-2022 om 11:42 schreef Abhishek Kumar: >>> Yes. When a public IPv6 is assigned or released, CloudStack will publish >>> event with type NET.IP6ASSIGN, NET.IP6RELEASE. >>> These event notifications can be tracked. And with improvements in events >>> framework, these event messages will have network uuid as entityuuid and >>> Network as entitytype. Using this network can be queried using to list IPv6 >>> routes that need to be added. >>> >>> Sample event message, >>> >>> {"eventDateTime":"2022-05-10 09:32:12 >>> +0000","entityuuid":"14658b39-9d20-4783-a1bc-12fb58bcbd98","Network": >>> "14658b39-9d20-4783-a1bc-12fb58bcbd98","description":"Assigned >>> public >>> IPv6 address: fd23:313a:2f53:3000:1c00:baff:fe00:4 for network ID: >>> 14658b39-9d20-4783-a1bc-12fb58bcbd98","event":"NET.IP6ASSIGN","user": >>> "bde866ba-c600-11ec-af19-1e00320001f3","account":"bde712c9-c600-11ec >>> - af19-1e00320001f3","entity":"Network","status":"Completed"} >>> >>> >>> ?Sample API call, >>>> list networks id=14658b39-9d20-4783-a1bc-12fb58bcbd98 >>>> filter=id,name,ip6routes >>> { >>> "count": 1, >>> "network": [ >>> { >>> "id": "14658b39-9d20-4783-a1bc-12fb58bcbd98", >>> "ip6routes": [ >>> { >>> "gateway": "fd23:313a:2f53:3000:1c00:baff:fe00:4", >>> "subnet": "fd23:313a:2f53:3cbf::/64" >>> } >> >> Looking at this JSON, does this mean that >> fd23:313a:2f53:3000:1c00:baff:fe00:4 is the WAB address of the VR? >> >> And that I would need to (statically) route fd23:313a:2f53:3cbf::/64 >> to that IP? >> >> The event message does not include the subnet, that makes it a bit >> more difficult as you would then also need to do a API-call to gather >> that information. >> >> Wido >> >> P.S.: Who controls the DNS of qa.cloudstack.cloud? It lacks an >> AAAA-record for IPv6! >> >>> ], >>> "name": "routing_test" >>> } >>> ] >>> } >>> >>> >>> >>> >>> ________________________________ >>> From: Wido den Hollander <w...@widodh.nl> >>> Sent: 10 May 2022 13:59 >>> To: dev@cloudstack.apache.org <dev@cloudstack.apache.org>; Abhishek >>> Kumar <abhishek.ku...@shapeblue.com> >>> Subject: Re: IPV6 in Isolated/VPC networks >>> >>> Op 10-05-2022 om 10:19 schreef Abhishek Kumar: >>>> Hi all, >>>> >>>> IPv6 Support in Isolated Network and VPC with Static Routing based on the >>>> design doc [1] has been implemented and is available in 4.17.0 RC2. I hope >>>> while testing 4.17.0 RC2 you will also try to test it ? >>>> Documentation for it is available at >>>> http://qa.cloudstack.cloud/docs/WIP-PROOFING/pr/262/plugins/ipv6.ht >>>> m >>>> l#isolated-network-and-vpc-tier >> <http://qa.cloudstack.cloud/docs/WIP-PROOFING/pr/262/plugins/ipv6.htm >> l #isolated-network-and-vpc-tier> (will be available in the official >> docs once 4.17.0 version of docs is built). >>>> >>> >>> Great work! >>> >>> I see only static routing is supported. But do we publish something >>> on the message bus once a new VR/VPC is created? >>> >>> This way you could pick up these messages and have the network >>> create a >>> (static) route based on those. >>> >>> ExaBGP for example could be used to inject such routes. >>> >>> Wido >>> >>>> [1] >>>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/IPv6+Support >>>> + >>>> in+Isolated+Network+and+VPC+with+Static+Routing >> <https://cwiki.apache.org/confluence/display/CLOUDSTACK/IPv6+Support+ >> i >> n+Isolated+Network+and+VPC+with+Static+Routing> >>>> >>>> Regards, >>>> Abhishek >>>> >>>> ________________________________ >>>> From: Rohit Yadav <rohit.ya...@shapeblue.com> >>>> Sent: 13 September 2021 14:30 >>>> To: dev@cloudstack.apache.org <dev@cloudstack.apache.org> >>>> Subject: Re: IPV6 in Isolated/VPC networks >>>> >>>> Thanks Alex, Wei. I've updated the docs here: >>>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/IPv6+Support >>>> + >>>> in+Isolated+Network+and+VPC+with+Static+Routing >> <https://cwiki.apache.org/confluence/display/CLOUDSTACK/IPv6+Support+ >> i >> n+Isolated+Network+and+VPC+with+Static+Routing> >>>> >>>> I'll leave the thread open for futher discussion/ideas/feedback. I >>>> think we've completed the phase1 design doc including all feedback >>>> comments for adding IPv6 support in CloudStack and some initial >>>> poc/work can be started. My colleagues and I will keep everyone >>>> posted on this thread and/or on a Github PR as and when we're able >>>> to >> start our work on the same (after 4.16, potentially towards 4.17). >>>> >>>> >>>> Regards. >>>> >>>> ________________________________ >>>> From: Wei ZHOU <ustcweiz...@gmail.com> >>>> Sent: Friday, September 10, 2021 20:22 >>>> To: dev@cloudstack.apache.org <dev@cloudstack.apache.org> >>>> Subject: Re: IPV6 in Isolated/VPC networks >>>> >>>> Agree with Alex. >>>> We only need to know how many /64 are allocated. We do not care how >>>> many >>>> ipv6 addresses are used by VMs. >>>> >>>> -Wei >>>> >>>> On Fri, 10 Sept 2021 at 16:36, Alex Mattioli >>>> <alex.matti...@shapeblue.com> >>>> wrote: >>>> >>>>> Hi Rohit, >>>>> >>>>> I'd go for option 2, don't see a point tracking anything smaller >>>>> than a >>>>> /64 tbh. >>>>> >>>>> Cheers >>>>> Alex >>>>> >>>>> >>>>> >>>>> >>>>> -----Original Message----- >>>>> From: Rohit Yadav <rohit.ya...@shapeblue.com> >>>>> Sent: 09 September 2021 12:44 >>>>> To: dev@cloudstack.apache.org >>>>> Subject: Re: IPV6 in Isolated/VPC networks >>>>> >>>>> Thanks Alex, Kristaps. I've updated the design doc to reflect two >>>>> agreements: >>>>> >>>>> * Allocate /64 for both isolated network and VPC tiers, no >>>>> large allocation of prefixes to VPC (cons: more static routing >>>>> rules for upstream >>>>> router/admins) >>>>> * All systemvms (incl. ssvm, cpvm, VRs) get IPv6 address >>>>> if zone has a dedicated /64 prefix/block for systemvms >>>>> >>>>> The only outstanding question now is: >>>>> >>>>> * How do we manage IPv6 usage? Can anyone advise how we do >>>>> IPv6 usage for shared network (design, implementation and >>>>> use-cases?) >>>>> Option1: We don't do it, all user VMs nics have ipv4 address which >>>>> whose usage we don't track. For public VR/nics/networks, we can >>>>> simply add the >>>>> IPv6 details for a related IPv4 address. >>>>> Option2: Implement a separate, first-class IPv6 address or /64 >>>>> prefix tracking/management and usage for all VMs and systemvms >>>>> nic (this means account/domain level limits and new >>>>> billing/records) >>>>> Option3: other thoughts? >>>>> >>>>> >>>>> Regards. >>>>> >>>>> ________________________________ >>>>> From: Alex Mattioli <alex.matti...@shapeblue.com> >>>>> Sent: Wednesday, September 8, 2021 23:24 >>>>> To: dev@cloudstack.apache.org <dev@cloudstack.apache.org> >>>>> Subject: RE: IPV6 in Isolated/VPC networks >>>>> >>>>> Hi Rohit, Kristaps, >>>>> >>>>> I'd say option 1 as well, it does create a bit more overhead with >>>>> static routes but if that's automated for a VPC it can also be >>>>> easily automated for several tiers of a VPC. We also don't >>>>> constrain the amount of tiers in a VPC. >>>>> It has the added advantage to be closer to the desired behaviour >>>>> with dynamic routing in the future, where a VPC VR can announce >>>>> several subnets upstream. >>>>> >>>>> Cheers >>>>> Alex >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> -----Original Message----- >>>>> From: Rohit Yadav <rohit.ya...@shapeblue.com> >>>>> Sent: 08 September 2021 19:04 >>>>> To: dev@cloudstack.apache.org >>>>> Subject: Re: IPV6 in Isolated/VPC networks >>>>> >>>>> Hi Kristaps, >>>>> >>>>> Thanks for sharing, I suppose that means individual tiers should >>>>> be allocated /64 instead of larger ipv6 blocks to the whole VPC >>>>> which could cause wastage. >>>>> >>>>> Any objection from anybody? >>>>> >>>>> Regards. >>>>> ________________________________ >>>>> From: Kristaps Cudars <kristaps.cud...@gmail.com> >>>>> Sent: Wednesday, September 8, 2021 9:24:01 PM >>>>> To: dev@cloudstack.apache.org <dev@cloudstack.apache.org> >>>>> Subject: Re: IPV6 in Isolated/VPC networks >>>>> >>>>> Hello, >>>>> >>>>> I asked networking team to comment on "How should the IPv6 >>>>> block/allocation work in VPCs?" >>>>> Option1: They haven't seen lately devices with limits on how many >>>>> static routes can be created. >>>>> Option2: With /60 and /62 assignments and big quantity of routers >>>>> IPv6 assignment from RIPE NNC can be drained fast. >>>>> >>>>> /48 contains 64000 /64 >>>>> /60 contains 16 /64 >>>>> 64000 / 16 = 4000 routers >>>>> >>>>> >>>>> On 2021/09/07 11:59:09, Rohit Yadav <rohit.ya...@shapeblue.com> wrote: >>>>>> All, >>>>>> >>>>>> After another iteration with Alex, I've updated the design doc. >>>>>> Kindly >>>>> review: >>>>>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/IPv6+Suppo >>>>>> r >>>>>> t+in >> <https://cwiki.apache.org/confluence/display/CLOUDSTACK/IPv6+Support+ >> i >> n> >>>>>> +Isolated+Network+and+VPC+with+Static+Routing >>>>>> >>>>>> >>>>>> ... and advise on some outstanding questions: >>>>>> >>>>>> * How should the IPv6 block/allocation work in VPCs? >>>>>> Option1: Should this be simply /64 allocation on any new tier, >>>>>> the cons of this option is one static route/rule per VPC tier. >>>>>> (many upstream routers may have limit on no. of static routes?) >>>>>> Option2: Let user ask/specify tier size, say /60 (for 16 tiers) >>>>>> or >>>>>> /62 >>>>> (4 tiers) for the VPC, this can be filtered based on the >>>>> vpc.max.networks global setting (3 is default). The pros of this >>>>> option are less no. of static route/rule and easy programming, but >>>>> potential wastage of multiple >>>>> /64 prefix blocks for unused/uncreated tiers. >>>>>> * How do we manage IPv6 usage? Can anyone advise how we >>>>>> do >>>>>> IPv6 >>>>> usage for shared network (design, implementation and use-cases?) >>>>>> Option1: We don't do it, all user VMs nics have ipv4 address >>>>>> which whose >>>>> usage we don't track. For public VR/nics/networks, we can simply >>>>> add the >>>>> IPv6 details for a related IPv4 address. >>>>>> Option2: Implement a separate, first-class IPv6 address or /64 >>>>>> prefix >>>>> tracking/management and usage for all VMs and systemvms nic (this >>>>> means account/domain level limits and new billing/records) >>>>>> * Enable IPv6 on systemvms (specifically SSVM and CPVM) >>>>>> by default >>>>> if zone has a IPv6 address block allocated/assigned for use for >>>>> systemvms (this was mainly thought for VRs, but why no ssvm and >>>>> cpvms too - any cons of this?) >>>>>> * >>>>>> >>>>>> Regards. >>>>>> >>>>>> ________________________________ >>>>>> From: Rohit Yadav <rohit.ya...@shapeblue.com> >>>>>> Sent: Thursday, August 19, 2021 15:45 >>>>>> To: dev@cloudstack.apache.org <dev@cloudstack.apache.org> >>>>>> Subject: Re: IPV6 in Isolated/VPC networks >>>>>> >>>>>> Hi all, >>>>>> >>>>>> I've taken feedback from this thread and wrote this design doc: >>>>>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/IPv6+Suppo >>>>>> r >>>>>> t+in >> <https://cwiki.apache.org/confluence/display/CLOUDSTACK/IPv6+Support+ >> i >> n> >>>>>> +Isolated+Network+and+VPC+with+Static+Routing >>>>>> >>>>>> Kindly review and advise if I missed anything or anything that >>>>>> needs to >>>>> be changed/updated. You may comment on the wiki directly too. >>>>>> >>>>>> Kindly suggest your views on the following (also in the design >>>>>> doc >>>>> above): >>>>>> >>>>>> Outstanding Questions: >>>>>> >>>>>> * Should admin or user be able to specify how VPC super >>>>>> CIDRs are >>>>> created/needed; for example a user can ask for VPC with /60 super >>>>> CIDR? Or should CloudStack automatically find/allocate a /64 for a >>>>> new VPC tier from the root-admin configured /64-/48 block? >>>>>> * Should we explore FRR and iBGP or other strategies to >>>>>> do dynamic >>>>> routing which may not require advance/complex configuration in the >>>>> VR or for the users/admin? >>>>>> * With SLAAC and no dhcpv6, is there a way to support >>>>>> secondary IPv6 >>>>> addresses (or floating IPv6 addresses for VR/public traffic) for >>>>> guest VM's nics? >>>>>> * Any thoughts on UI/UX for firewall/routing management? >>>>>> * Any other feature/support for isolated network or VPC >>>>>> feature that >>>>> must be explored or supported such as PF, VPN, LB, vpc static >>>>> routes, vpc gateway etc. >>>>>> * For usage - should we have any consideration, or should >>>>>> we assume >>>>> that IPv4 and IPv6 address will go together for every nic; so IPv6 >>>>> usage for a nic is in tandem with Ipv4 address for a nic, i.e. no >>>>> explicit/new biling/usage needed? >>>>>> * For smoketests, local dev-test should we explore ULA? >>>>>> Unique Local >>>>> Address - in the range fc00::/7. Typically only within the 'local' >>>>> half fd00::/8. ULA for IPv6 is analogous to IPv4 private network >>>>> addressing. >>>>> This prefix can be randomly generated at first install by >>>>> CloudStack in a zone using zoneid etc? >>>>>> * Should we expand support for VR diagnostic feature to >>>>>> include >>>>> support for ipv6, traceroute6? >>>>>> * Discuss - expand support/ability to allocate a /60, or >>>>>> /56 etc >>>>> prefix to an individual VM in shared network (Wido's suggestion) >>>>>> >>>>>> >>>>>> Regards. >>>>>> >>>>>> ________________________________ >>>>>> From: Wei ZHOU <ustcweiz...@gmail.com> >>>>>> Sent: Tuesday, August 17, 2021 21:16 >>>>>> To: dev@cloudstack.apache.org <dev@cloudstack.apache.org> >>>>>> Subject: Re: IPV6 in Isolated/VPC networks >>>>>> >>>>>> Thanks Kristaps, Wido, Rohit and Alex for your replies. >>>>>> >>>>>> I am fine with not having stateful dhcpv6 and privacy >>>>>> extension/temporary address in phase 1. If community decides not >>>>>> to do eventually , it is also ok to me. >>>>>> >>>>>> We could explore how to better use secondary ipv6 addresses as >>>>>> Wido advised. It would be great if anyone share some user experience. >>>>>> >>>>>> -Wei >>>>>> >>>>>> >>>>>> On Tuesday, 17 August 2021, Kristaps Cudars >>>>>> <kristaps.cud...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> Hi Wei, >>>>>>> >>>>>>> Published this month's RFC 9099 and explains in different >>>>>>> words/perspective what has been written by Alex, Rohit and Wido. >>>>>>> https://www.rfc-editor.org/rfc/rfc9099.html >> <https://www.rfc-editor.org/rfc/rfc9099.html> >>>>>>> >>>>>>> >>>>>>> On 2021/08/17 09:20:21, Wei ZHOU <ustcweiz...@gmail.com> wrote: >>>>>>>> Hi Wido, >>>>>>>> >>>>>>>> (cc to Rohit and Alex) >>>>>>>> >>>>>>>> It is a good suggestion to use FRR for ipv6. The configuration >>>>>>>> is quite simple and the VMs can get SLAAC, routes, etc. >>>>>>>> >>>>>>>> Privacy extension looks not the same as what you mentioned. see >>>>>>>> https://datatracker.ietf.org/doc/html/rfc4941 >> <https://datatracker.ietf.org/doc/html/rfc4941> >>>>>>>> >>>>>>>> You are right. To use static routing, the admins need to >>>>>>>> configure the routes in the upstream router, and add some ipv6 >>>>>>>> ranges (eg >>>>>>>> /56 for VPCs and /64 for isolated networks) and their next-hop >>>>>>>> (which will be configured in VRs) in CloudStack. CloudStack >>>>>>>> will pick up an IPv6 range >>>>>>> and >>>>>>>> assign it to an isolated network or vpc. @Rohit, correct me if >>>>>>>> I'm >>>>> wrong. >>>>>>>> >>>>>>>> I have a question, it looks stateless dhcpv6 (SLAAC from >>>>>>>> router/VR, router/dns etc via RA messages) will be the only >>>>>>>> option for now (related >>>>>>> to >>>>>>>> your pr https://github.com/apache/cloudstack/pull/3077) >> <https://github.com/apache/cloudstack/pull/3077)> . Would it >>>>>>>> be >>>>>>> good >>>>>>>> to provide stateful dhcpv6 (which can be implemented by >>>>>>>> dnsmasq) as an option in cloudstack ? The advantages are >>>>>>>> (1) support other ipv6 cidr sizes than /64. >>>>>>>> (2) we can assign a specified Ipv6 address to a vm. vm Ipv6 >>>>>>>> addresses can be changed >>>>>>>> (4) an Ipv6 addresses can be re-used by multiple vms. >>>>>>>> The problem is, stateful dhcpv6 does not support >>>>>>>> routers,nameservers, >>>>>>> etc. >>>>>>>> we need to figure it out (probably use radvd/frr and dnsmasq both). >>>>>>>> >>>>>>>> -Wei >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> >>>> >>>> >>>> >>> >>> >>>> On Fri, 13 Aug 2021 at 12:19, Wido den Hollander <w...@widodh.nl> wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> See my inline responses: >>>>>>>>> >>>>>>>>> Op 11-08-2021 om 14:26 schreef Rohit Yadav: >>>>>>>>>> Hi all, >>>>>>>>>> >>>>>>>>>> Thanks for your feedback and ideas, I've gone ahead with >>>>>>>>>> discussing >>>>>>> them >>>>>>>>> with Alex and came up with a PoC/design which can be >>>>>>>>> implemented in the following phases: >>>>>>>>>> >>>>>>>>>> * Phase1: implement ipv6 support in isolated >>>>>>>>>> networks and >>>>> VPC >>>>>>> with >>>>>>>>> static routing >>>>>>>>>> * Phase2: discuss and implement support for dynamic >>>>>>>>>> routing >>>>>>> (TBD) >>>>>>>>>> >>>>>>>>>> For Phase1 here's the high-level proposal: >>>>>>>>>> >>>>>>>>>> * IPv6 address management: >>>>>>>>>> * At the zone level root-admin specifies a /64 >>>>>>>>>> public >>>>> range >>>>>>> that >>>>>>>>> will be used for VRs, then they can add a /48, or /56 IPv6 >>>>>>>>> range for >>>>>>> guest >>>>>>>>> networks (to be used by isolated networks and VPC tiers) >>>>>>>>>> * On creation of any IPv6 enabled isolated >>>>>>>>>> network or VPC >>>>>>> tier, >>>>>>>>> from the /48 or /56 block a /64 network is allocated/used >>>>>>>>>> * We assume SLAAC and autoconfiguration, no >>>>>>>>>> DHCPv6 in the >>>>>>> zone >>>>>>>>> (discuss: is privacy a concern, can privacy extensions rfc4941 >>>>>>>>> of >>>>>>> slaac be >>>>>>>>> explored?) >>>>>>>>> >>>>>>>>> Privacy Extensions are only a concern for client devices which >>>>>>>>> roam between different IPv6 networks. >>>>>>>>> >>>>>>>>> If you IPv6 address of a client keeps the same suffix (MAC >>>>>>>>> based) and switches network then only the prefix (/64) will change. >>>>>>>>> >>>>>>>>> This way a network like Google, Facebook, etc could track your >>>>>>>>> device moving from network to network if they only look at the >>>>>>>>> last 64-bits of the IPv6 address. >>>>>>>>> >>>>>>>>> For servers this is not a problem as you already know in which >>>>>>>>> network they are. >>>>>>>>> >>>>>>>>>> * Network offerings: root-admin can create new >>>>>>>>>> network >>>>> offerings >>>>>>>>> (with VPC too) that specifies a network stack option: >>>>>>>>>> * ipv4 only (default, for backward compatibility >>>>>>>>>> all >>>>>>>>> networks/offerings post-upgrade migrate to this option) >>>>>>>>>> * ipv4-and-ipv6 >>>>>>>>>> * ipv6-only (this can be phase 1.b) >>>>>>>>>> * A new routing option: static (phase1), dynamic >>>>>>>>>> (phase2, >>>>>>> with >>>>>>>>> multiple sub-options such as ospf/bgp etc...) >>>>>>>>> >>>>>>>>> This means that the network admin will need to statically >>>>>>>>> route the >>>>>>> IPv6 >>>>>>>>> subnet to the VR's outside IPv6 address, for example, on a >>>>>>>>> JunOS >>>>>>> router: >>>>>>>>> >>>>>>>>> set routing-options rib inet6.0 static route 2001:db8:500::/48 >>>>>>>>> next-hop >>>>>>>>> 2001:db8:100::50 >>>>>>>>> >>>>>>>>> I'm assuming that 2001:db8:100::50 is the address of the VR on >>>>>>>>> the outside (/64) network. In reality this will probably be a >>>>>>>>> longer address, but this is for just the example. >>>>>>>>> >>>>>>>>>> * VR changes: >>>>>>>>>> * VR gets its guest and public nics set to inet6 >>>>>>>>>> auto >>>>>>>>>> * For each /64 allocated to guest network and VPC >>>>>>>>>> tiers, >>>>>>> radvd >>>>>>>>> is configured to do RA >>>>>>>>> >>>>>>>>> radvd is fine, but looking at phase 2 with dynamic routing you >>>>>>>>> might already want to look into FRRouting. FRR can also >>>>>>>>> advertise RAs while not doing any routing. >>>>>>>>> >>>>>>>>> interface ens4 >>>>>>>>> no ipv6 nd suppress-ra >>>>>>>>> ipv6 nd prefix 2001:db8:500::/64 >>>>>>>>> ipv6 nd rdnss 2001:db8:400::53 2001:db8:200::53 >>>>>>>>> >>>>>>>>> See: http://docs.frrouting.org/en/latest/ipv6.html >> <http://docs.frrouting.org/en/latest/ipv6.html> >>>>>>>>> >>>>>>>>>> * Firewall: a new ipv6 zone/chain is created for >>>>>>>>>> ipv6 >>>>> where >>>>>>> ipv6 >>>>>>>>> firewall rules (ACLs, ingress, egress) are implemented; ACLs >>>>>>>>> between >>>>>>> VPC >>>>>>>>> tiers are managed/implemented by ipv6 firewall on VR >>>>>>>>> >>>>>>>>> Please take a look at the existing security_group.py script >>>>>>>>> which implements RFC4890 >>>>>>>>> >>>>>>>>> https://datatracker.ietf.org/doc/html/rfc4890 >> <https://datatracker.ietf.org/doc/html/rfc4890> >>>>>>>>> >>>>>>>>> ICMPv6 is a vital part of IPv6 and certain packets should >>>>>>>>> always be allowed. >>>>>>>>> >>>>>>>>>> * It is assumed that static routes are created on >>>>>>>>>> the >>>>>>> core/main >>>>>>>>> router by the admin or automated using some scripts/tools; for >>>>>>>>> this CloudStack will announce events with details of /64 >>>>>>>>> networks and VR's public IPv6 address that can be consumed by >>>>>>>>> a rabbitmq/message bus >>>>>>> client >>>>>>>>> (for example), or a custom cron job or script as part of >>>>> orchestration. >>>>>>>>> (this wouldn't be necessary for dynamic routing bgp with >>>>>>>>> phase2)\\ >>>>>>>>> >>>>>>>>> You would only need to announce the /48 or /56 allocated to >>>>>>>>> the VR, that's all. You don't need to inform the upstream >>>>>>>>> router about the /64 subnets created within that larger subnet. >>>>>>>>> >>>>>>>>>> * Guest Networking: With SLAAC, it's easy for >>>>>>>>>> CloudStack to >>>>>>>>> calculate allocate and use a /64 and determine the IPv6 >>>>>>>>> address of VR >>>>>>> nics >>>>>>>>> and guest VM nics >>>>>>>>>> * A user create an isolated network/VPC with an >>>>>>>>>> offering >>>>>>> that is >>>>>>>>> ipv6 enabled >>>>>>>>>> * A user can manage firewall for the IPv6 >>>>>>>>>> address/guest >>>>> nics; >>>>>>>>> there'll be no port forward and LB feature though for IPv6 >>>>>>>>>> * A users can run workloads in the guest VMs that >>>>>>>>>> listen >>>>> on >>>>>>>>> publically routable ipv6 addresses >>>>>>>>>> * Usage/billing etc continue to work, no change >>>>>>>>>> needed >>>>>>>>>> >>>>>>>>>> Network layout: >>>>>>>>>> >>>>>>>>>> [core/ISP router] -> [VR] -> [guest netwokr or VPC tier on a >>>>>>>>>> VLAN] -> >>>>>>>>> [guest VMs/nics] >>>>>>>>>> *core/ISP router needs static routes to be added (manually or >>>>>>>>> automated), assumes a /48 or /56 configured for the zone >>>>>>>>>> >>>>>>>>>> Thoughts, feedback? >>>>>>>>> >>>>>>>>> Looks doable! >>>>>>>>> >>>>>>>>> Side-note: It would be very cool if you could use parts of >>>>>>>>> this implementation to also route /48, /56, or /60 subnets to >>>>>>>>> individual VMs in Shared networks. >>>>>>>>> >>>>>>>>> Why? This allows for running Docker containers with native >>>>>>>>> IPv6 inside the VM or running a (Open)VPN server inside a VM >>>>>>>>> which then assigns public IPv6 addresses to clients connected. >>>>>>>>> >>>>>>>>> Instead of routing the subnet to a VR we route the subnet to a >>>>>>>>> single instance in a shared network. >>>>>>>>> >>>>>>>>> If we could then also move these subnets between Instances >>>>>>>>> easily one can quickly migrate to a different instance while >>>>>>>>> keeping the same IPv6 subnet. >>>>>>>>> >>>>>>>>> Wido >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Proof-of-concept commentary: here's what I did to test the idea: >>>>>>>>>> >>>>>>>>>> * Created an isolated network and deployed a VM in >>>>>>>>>> my home >>>>> lab >>>>>>>>>> The VR running on KVM has following nics >>>>>>>>>> eth0 - guest network >>>>>>>>>> eth1 - link local >>>>>>>>>> eth2 - public network >>>>>>>>>> >>>>>>>>>> * I setup a custom openwrt router on a RPi4 to serve >>>>>>>>>> as a >>>>>>> toy-core >>>>>>>>> router where I create a wan6 IPv6 tunnel using tunnel broker >>>>>>>>> and I got >>>>>>> a >>>>>>>>> /48 allocated. My configuration looks like: >>>>>>>>>> /48 - 2001:470:ed36::/48 (allocated by tunnel broker) >>>>>>>>>> /64 - 2001:470:36:3e2::/64 (default allocated by) >>>>>>>>>> >>>>>>>>>> I create a LAN ipv6 (public network for CloudStack VR): at >>>>>>> subnet/prefix >>>>>>>>> 0: >>>>>>>>>> LAN IPv6 address: 2001:470:ed36:0::1/64 Address mode: >>>>>>>>>> SLAAC+stateless DHCP (no dhcpv6) >>>>>>>>>> * >>>>>>>>>> * >>>>>>>>>> In the isolated VR, I enabled ipv6 as: >>>>>>>>>> net.ipv6.conf.all.disable_ipv6 = 0 >>>>>>>>>> net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.all.accept_ra >>>>>>>>>> = >>>>>>>>>> 1 net.ipv6.conf.all.accept_redirects = 1 >>>>>>>>>> net.ipv6.conf.all.autoconf = 1 >>>>>>>>>> >>>>>>>>>> Set up a IPv6 nameserver/dns in /etc/resolve.conf And >>>>>>>>>> configured the nics: >>>>>>>>>> echo iface eth0 inet6 auto >> /etc/network/interfaces echo >>>>>>>>>> iface eth2 inet6 auto >> /etc/network/interfaces >>>>>>>>>> /etc/init.d/networking restart Next, restart ACS isolated >>>>>>>>>> network without cleanup to have it >>>>>>>>> reconfigure IPv4 nics, firewall, NAT etc >>>>>>>>>> >>>>>>>>>> * >>>>>>>>>> Next, I created a /64 network for the isolated guest network >>>>>>>>>> on eth0 >>>>>>> of >>>>>>>>> VR using radvd: >>>>>>>>>> >>>>>>>>>> # cat /etc/radvd.conf >>>>>>>>>> interface eth0 >>>>>>>>>> { >>>>>>>>>> AdvSendAdvert on; >>>>>>>>>> MinRtrAdvInterval 5; >>>>>>>>>> MaxRtrAdvInterval 15; >>>>>>>>>> prefix 2001:470:ed36:1::/64 >>>>>>>>>> { >>>>>>>>>> AdvOnLink on; >>>>>>>>>> AdvAutonomous on; >>>>>>>>>> }; >>>>>>>>>> }; >>>>>>>>>> systemctl restart radvd >>>>>>>>>> All guest VMs nics and VR's eth0 gets IPv6 address (SLAAC) in >>>>>>>>>> this >>>>>>>>> ...:1::/64 network >>>>>>>>>> * Finally I added a static route in toy core-router >>>>>>>>>> for the >>>>> new >>>>>>> /64 >>>>>>>>> IPv6 range in the isolated network >>>>>>>>>> 2001:470:ed36:1::/64 via <public IPv6 address of the VR on >>>>>>>>>> eth2> dev >>>>>>>>> <local lan nic> >>>>>>>>>> * >>>>>>>>>> ... and I enabled firewall rules to allow any traffic to pass >>>>>>>>>> for the >>>>>>>>> new /64 network >>>>>>>>>> >>>>>>>>>> And voila all done! I create a domain AAAA record that points >>>>>>>>>> to my >>>>>>>>> guest VM IPv6 address a test webserver on >>>>>>>>>> http://ipv6-isolated-ntwk-demo.yadav.cloud/ >> <http://ipv6-isolated-ntwk-demo.yadav.cloud/> >>>>>>>>>> >>>>>>>>>> (Note: I'll get rid of the tunnel and request a new /48 block >>>>>>>>>> after a >>>>>>>>> few days, sharing this solely for testing purposes) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Regards. >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>>>> >>>> >>>