RFC 6276

DHCPv6 Prefix Delegation for Network Mobility (NEMO)

๐Ÿ“… published July 2011, from ietf

RFC 6276: DHCPv6 Prefix Delegation for Network Mobility (NEMO) ๐ŸŽ€

okay bestie, this one is all about giving mobile routers prefixes using DHCPv6 prefix delegation ๐Ÿงš It's an Internet Standards Track doc from July 2011 (ISSN 2070-1721), and it's written by Droms (Cisco), Thubert (Cisco), Dupont (Internet Systems Consortium), Haddad (Ericsson), and Bernardos (UC3M). The header doesn't list anything it obsoletes or updates, so it stands on its own ๐Ÿ’…

Abstract

okay so the big idea is that network mobility needs a way to hand a prefix (or several) to a mobile router so the links in its mobile network can use them ๐Ÿš— This doc says how DHCPv6 prefix delegation can do that job. The mobile router is the requesting router, and the home agent is the delegating router ๐Ÿ’– When the mobile router is away from home, it also acts as a DHCPv6 relay agent, living right next to its requesting router function ๐Ÿฆ‹

Status of This Memo

This is an Internet Standards Track document.

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc6276.

Copyright (c) 2011 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

Table of Contents

1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  2
2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  3
3.  DHCPv6 Prefix Delegation of Mobile Network Prefixes  . . . . .  4
  3.1.  Exchanging DHCPv6 Messages When the Mobile Router Is
        Not at Home  . . . . . . . . . . . . . . . . . . . . . . .  5
    3.1.1.  Relay Agent Configuration  . . . . . . . . . . . . . .  7
    3.1.2.  Transmission of DHCPv6 Messages  . . . . . . . . . . .  8
    3.1.3.  Receipt of DHCPv6 Messages . . . . . . . . . . . . . .  8
  3.2.  Exchanging DHCPv6 Messages When the Mobile Router Is
        at Home  . . . . . . . . . . . . . . . . . . . . . . . . .  8
  3.3.  Selecting a Home Agent That Provides DHCPv6PD  . . . . . .  9
  3.4.  Minimizing DHCPv6PD Messages . . . . . . . . . . . . . . . 10
  3.5.  Other DHCPv6 Functions . . . . . . . . . . . . . . . . . . 10
4.  Security Considerations  . . . . . . . . . . . . . . . . . . . 10
5.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 12
6.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  6.1.  Normative References . . . . . . . . . . . . . . . . . . . 12
  6.2.  Informative References . . . . . . . . . . . . . . . . . . 13

1. Introduction โœจ

okay so network mobility support needs a prefix (or prefixes) handed to a mobile router for the links in Network Mobility (NEMO) ๐Ÿš— DHCPv6 prefix delegation (DHCPv6PD) [RFC3633] is the tool for that job, and it's giving reliable ๐Ÿ’…

Here's how the DHCPv6PD model works [RFC3633]. A delegating router is given IPv6 prefixes to hand out to requesting routers ๐ŸŽ€ A requesting router asks the delegating router for prefix(es). The delegating router picks the prefix(es) it's going to delegate and replies with them to the requesting router. After that, the requesting router is the one responsible for the delegated prefix(es) ๐Ÿซถ Also, the DHCPv6 options for prefix delegation in [RFC3633] were designed for general use across routers, not just for mobile routers running the NEMO Basic Support protocol [RFC3963] ๐ŸŒˆ

So to use DHCPv6PD as a prefix assignment mechanism in mobile networks: when the mobile router is at home, the home agent is the delegating router and the mobile router is the requesting router โœจ But when the mobile router is away from home, it still has those same roles, and it also takes on the role of a DHCPv6 relay agent that sits right next to its requesting router function ๐Ÿฆ‹

The DHCPv6PD server running at the home agent gets provisioned with prefixes using any of the prefix assignment mechanisms described in the DHCPv6PD specification [RFC3633] ๐Ÿ“

2. Terminology ๐Ÿ’œ

okay the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be read as described in RFC 2119 [RFC2119] ๐Ÿ”ฅ

these terms are defined in the IPv6 Addressing Architecture document [RFC4291]:

  • Link-Local Unicast address
  • Link-Local Scope Multicast address

these terms are defined in the Mobile IPv6 specification [RFC6275]:

  • Home Agent (HA)
  • Home Link
  • Home Address (HoA)
  • Care-of Address (CoA)
  • Binding Update (BU)
  • Binding Acknowledgement (BA)

these terms are defined in the Mobile Network terminology document [RFC4885]:

  • Mobile Router (MR)
  • Mobile Network (NEMO)
  • Mobile Network Prefix (MNP)

these terms are defined in the DHCPv6 [RFC3315] and DHCPv6 prefix delegation [RFC3633] specifications:

  • Delegating Router (DR; acts as a DHCPv6 server)
  • Requesting Router (RR; acts as a DHCPv6 client)
  • DHCPv6 Relay Agent (DRA)

and this is the one acronym used here:

  • DHCPv6PD: DHCPv6 Prefix Delegation

3. DHCPv6 Prefix Delegation of Mobile Network Prefixes ๐Ÿงš

okay the NEMO Basic Support protocol [RFC3963] extends Mobile IPv6 [RFC6275] to support network mobility ๐ŸŒธ With NEMO Basic Support, a mobile router uses Mobile IPv6 to set up and keep a session with its home agent. It also uses bidirectional tunneling between itself and the home agent, which gives nodes on the mobile network a path to keep talking to nodes outside the NEMO ๐Ÿฆ‹

The Network Mobility requirements [RFC4885] include the mobile router being able to receive delegated prefixes that can then be given to links in the mobile network. DHCPv6PD can meet that requirement for prefix delegation ๐Ÿ‘‘

For mobile networks, when the mobile router is at home, the home agent is the delegating router and the mobile router is the requesting router ๐Ÿ’… When the mobile router is away from home, it keeps those roles and also acts as a DHCPv6 relay agent right alongside its requesting router function โœจ

When the mobile router isn't at home, the home agent and the mobile router swap DHCPv6PD protocol messages as specified in [RFC6275] ๐Ÿซถ That means messages sent by the mobile router MUST include the Home Address destination option, and messages sent by the home agent MUST make use of a Routing Header type 2 ๐Ÿ”ฅ Check out Figure 1 for the deployment topologies, both when the MR is at home and when it's visiting a foreign network ๐Ÿ—บ๏ธ

              ------                ------
              | MR |----------------| HA |
              |(RR)| (home network) |(DR)|
              ------                ------

          -------    /-----------\     ------
          | MR  |----|  Internet |-----| HA |
          |(RR) |    \-----------/     |(DR)|
          |(DRA)|                      ------
          -------
     (visited network)

Figure 1: Deployment topologies of the use of DHCPv6PD for delegation of Mobile Network Prefixes

The DHCPv6PD server gets provisioned with prefixes using any of the prefix assignment mechanisms described in the DHCPv6PD specifications. Any other updates to the home agent's data structures that are needed as a side effect of prefix delegation are specified by the particular network mobility protocol ๐Ÿ’– For example, with NEMO Basic Network Mobility Support [RFC3963], the HA adds an entry to its binding cache that registers the delegated prefix to the mobile router it was delegated to ๐ŸŒˆ

3.1. Exchanging DHCPv6 Messages When the Mobile Router Is Not at Home โœˆ๏ธ

okay so this part is about when the mobile router is away from home ๐Ÿงณ. Section 3.2 covers the other case, when it's chilling on its home link ๐Ÿ›‹๏ธ.

the mobile router MUST register at the home agent first (aka send a Binding Update to the home agent) before it starts any DHCPv6 prefix delegation chat ๐Ÿ’Œ. it MUST use implicit BU signaling, because it might not have requested any prefixes yet ๐Ÿ™ˆ.

if the mobile router has no active delegated prefixes (the ones with unexpired leases) ๐Ÿฅฒ, it MUST start with a DHCPv6 Solicit message, as described in Section 17 of [RFC3315] and Section 11.1 of [RFC3633]. the delegating router at the home agent replies with an Advertise message. then the mobile router MUST request a set of prefixes by sending a Request message. the delegating router puts the delegated prefixes in a Reply message ๐Ÿ“ฌ.

here's the plot twist ๐Ÿ˜ญ: the mobile router already sent its Binding Update without knowing which prefixes it can use as mobile network prefixes. so the home agent, when it gets that implicit Binding Update, MUST pick the prefixes that will be delegated to the mobile router via DHCPv6PD (unless they were already pre-configured) ๐Ÿงš. and once the DHCPv6 signaling is finished, the home agent MUST add an entry to its binding cache that includes the delegated prefixes ๐Ÿ’….

now, if the mobile router already has one or more active delegated prefixes ๐ŸŒธ, like when it reboots or when its mobile network prefix(es) are about to expire, it MUST start a DHCPv6 message exchange with a DHCPv6 Rebind message, as described in Section 18.1.2 of [RFC3315] and Section 12.1 of [RFC3633].

a DHCPv6 relay agent function [RFC3315] MUST be used at the mobile router ๐Ÿซถ. this relay agent is co-located in the mobile router with the DHCPv6 client function (see Figure 2). the DHCPv6 signaling between the mobile router and the home agent goes from the relay agent in the mobile router to the DHCPv6 server on the home agent. DHCPv6 messages from the mobile router to the home agent are unicast packets, sent from the mobile router's unicast home address to the home agent's global unicast address. so the Home Address destination option MUST be used ๐ŸŽ€. DHCPv6 replies from the home agent to the mobile router MUST be sent using the Routing Header type 2, as specified in [RFC6275]. the DHCPv6 client in the mobile router MUST hand any outbound DHCPv6 messages to the co-located relay agent ๐Ÿ“ฎ. replies from the DHCPv6 server come back to the relay agent function in the mobile router, which MUST extract the encapsulated message and deliver it to the DHCPv6 client in the mobile router ๐Ÿ’Œ.

     -----------------------------                  --------
     |            MR             |                  |  HA  |
     | (RR)                (DRA) |                  | (DR) |
     ----------------------------                   --------
         |                   |       Binding Update    |
         |                   |------------------------>|
         |                   |       (HoA, CoA)        |
         |                   |                         |
         |                   |       Binding Ack       |
         |                   |<------------------------|
         |                   |                         |
         | DHCPv6 Solicit    |   DHCPv6 Solicit        |
         |..................>|--=====================->|
         |                   |                         |
         |  DHCPv6 Advertise |       DHCPv6 Advertise  |
         |<..................|<-=====================--|
         |                   |                         |
         | DHCPv6 Request    |       DHCPv6 Request    |
         |..................>|--=====================->|
         |                   |                         |
         |      DHCPv6 Reply |       DHCPv6 Reply      |
         |<..................|<-=====================--|
         |                   | (Mobile Network Prefix) |
         |                   |                         |

Figure 2: Signaling sequence when the mobile router is not at home ๐Ÿ“Š

quick note ๐Ÿค“: a mobile router using DHCPv6PD to get its mobile network prefixes can't derive its home address from one of those prefixes. it doesn't know them until it has registered with the home agent. so the mobile router MUST assign its home address from the prefix on its Home Link ๐Ÿก.

3.1.1. Relay Agent Configuration ๐Ÿ› ๏ธ

the mobile router's relay agent is what lets it unicast DHCPv6 messages to the DHCPv6 server ๐Ÿ“จ. the relay agent MUST be configured with the address of the DHCPv6 server. for this spec, the relay agent assumes the home agent for the mobile router hosts the DHCPv6 server. so the mobile router MUST configure the DHCPv6 relay agent to forward DHCPv6 messages to the home agent ๐Ÿ โœจ.

DHCPv6 does support unicast between client and server in some scenarios ๐Ÿ‘€. but it's kinda messy here, because the client first has to receive a Server Unicast option (Section 22.12 of [RFC3315]) from the server, which means a Solicit/Advertise exchange has to happen first. that exchange would need a relay agent on the mobile router anyway, so there's basically no gain from using the Server Unicast option in this case ๐Ÿ™ƒ.

3.1.2. Transmission of DHCPv6 Messages ๐Ÿ“ค

when the DHCPv6 client in the mobile router sends a message, it MUST hand it to the DHCPv6 relay agent in the mobile router ๐ŸŽ. how that handoff happens is out of scope for this document. the relay agent wraps the client's message in a Relay-forward message according to [RFC3315] and sends it to the home agent. the relay agent fills in the Relay-forward message like this:

msg-type       RELAY-FORW

hop-count      1

link-address   The home address of the mobile router

peer-address   The home address of the mobile router

options        MUST include a "Relay Message option" [RFC3315]; MAY
               include other options added by the relay agent.

3.1.3. Receipt of DHCPv6 Messages ๐Ÿ“ฅ

messages from the DHCPv6 server come back to the DHCPv6 relay agent ๐Ÿ’ซ. the message meant for the DHCPv6 client is wrapped in the Relay Message option [RFC3315] inside a Relay-reply message. the relay agent function MUST pull the client's message out of the Relay Message option and hand it to the DHCPv6 client in the mobile router ๐Ÿงšโ€โ™€๏ธ. how it gets passed to the client is also out of scope here.

3.2. Exchanging DHCPv6 Messages When the Mobile Router Is at Home ๐Ÿก

when the mobile router is on its home link, the home agent MUST use that home link to swap DHCPv6PD messages with the mobile router (Figure 3) ๐Ÿซง. in this case, the DHCPv6 co-located relay function MUST be disabled. figuring out when the mobile router is on its home link is up to the implementation ๐Ÿคทโ€โ™€๏ธ. the Home Link Detection mechanism is described in Section 11.5.2 of [RFC6275].

              --------                   --------
              |  MR  |                   |  HA  |
              | (RR) |                   | (DR) |
              --------                   --------
                  |                         |
                  |       DHCPv6 Solicit    |
                  |------------------------>|
                  |                         |
                  |       DHCPv6 Advertise  |
                  |<------------------------|
                  |                         |
                  |       DHCPv6 Request    |
                  |------------------------>|
                  |                         |
                  |       DHCPv6 Reply      |
                  |<------------------------|
                  | (Mobile Network Prefix) |
                  |                         |

Figure 3: Signaling sequence for the case the home agent is at home ๐ŸŽ€

3.3. Selecting a Home Agent That Provides DHCPv6PD ๐Ÿ”

not every node that's willing to be a home agent is required to provide DHCPv6PD ๐Ÿฅบ. so when a mobile router picks a home agent, a mobile router that needs DHCPv6PD service MUST find a home agent that will provide it ๐ŸŽฏ. the mobile router can check if a home agent provides DHCPv6PD by starting a DHCPv6 message exchange (basically sending a Solicit message) where it asks for delegated prefix(es) ๐Ÿ“. if the home agent doesn't respond, or responds but doesn't delegate any prefix(es), the mobile router assumes that home agent doesn't provide DHCPv6PD service ๐Ÿ™…โ€โ™€๏ธ. the mobile router keeps querying every candidate home agent until it finds one that does. also, if the mobile router is away from home in this case, it has to have already done a Mobile IPv6 registration with the home agent it's querying ๐Ÿ’Œ.

querying a home agent to see if it provides DHCPv6PD needs different operational variables than the DHCPv6 spec recommends ๐Ÿง. [RFC3315] says that under normal circumstances a host keeps sending DHCPv6 Solicit messages until it gets a response (see Section 17 of [RFC3315]). that means the Maximum Retransmission Duration (MRD) and Maximum Retransmission Count (MRC) are both set to zero. but a home agent might never respond to the mobile router's Solicit messages, because it doesn't support DHCPv6 prefix delegation ๐Ÿ’€. so when querying a home agent to see if it provides DHCPv6PD service, it is RECOMMENDED that MRD and MRC be set to non-zero values. that way the mobile router stops sending Solicit messages to that home agent after sending 6 of them, and concludes the home agent won't provide DHCPv6PD service ๐Ÿ›‘. sending 6 queries gives enough reliability for when the wireless connection drops for a short time after the first Binding Update message ๐Ÿ“ถ.

it is RECOMMENDED that the mobile router probes the home agents for DHCPv6PD service sequentially ๐Ÿชœ.

3.4. Minimizing DHCPv6PD Messages โšก

DHCPv6PD in a mobile network can be combined with the Rapid Commit option [RFC3315] to do prefix delegation with a two-message exchange between the mobile router and the DHCPv6PD delegating router. fewer messages, more slay ๐Ÿ’…โœจ.

3.5. Other DHCPv6 Functions ๐ŸŒˆ

the DHCPv6 messages exchanged between the mobile router and the home agent MAY also be used for other DHCPv6 functions, not just DHCPv6PD ๐Ÿงฉ. for example, the home agent MAY assign global addresses to the mobile router, and MAY pass other configuration info, like a list of available DNS recursive name servers [RFC3646], using the same DHCPv6 messages it uses for DHCPv6PD ๐ŸŒ.

the home agent MAY also act as a DHCPv6 relay agent for mobile nodes while it's acting as a delegating router for mobile routers ๐Ÿ‘‘.

4. Security Considerations ๐Ÿ”

okay so security is literally the main character here, bestie ๐Ÿ˜ญ This doc is about using DHCPv6 for prefix delegation in mobile networks. On top of the security stuff in the DHCPv6 base spec [RFC3315] and the DHCPv6 Prefix Delegation spec [RFC3633], there are two aspects we need to think about ๐Ÿ’…

First up, NEMO Basic Support says the home agent has to stop a mobile router from claiming mobile network prefixes that belong to another mobile router ๐Ÿ™…โ€โ™€๏ธ So when the home agent gets an implicit Binding Update from a mobile router, it MUST only add prefixes into that router's Binding Cache Entry if the router has a valid DHCPv6 Prefix Delegation lease for those prefixes. If the mobile router doesn't have a valid DHCPv6 Prefix Delegation lease, the home agent MUST NOT add any prefixes into the mobile router's Binding Cache Entry. Once the mobile router gets a valid DHCPv6 Prefix Delegation lease for a given set of prefixes, the home agent MUST add those prefixes to the mobile router's Binding Cache Entry. This way the home agent doesn't end up forwarding traffic to prefixes that haven't been delegated to the mobile router yet ๐ŸŽ€

The DHCPv6 stuff in this doc needs message integrity protection and source authentication, no cap ๐Ÿ”’ When the mobile router is at home, normal DHCPv6 operation is used between the mobile router and the home agent, so this spec doesn't add any new security issue โœจ But while the mobile router is away from home, the IPsec security mechanism mandated by Mobile IPv6 [RFC3776] MUST be used to secure the DHCPv6 signaling ๐Ÿ›ก๏ธ Next we go over the Security Policy Database (SPD) and Security Association Database (SAD) entries you need to protect the DHCPv6 signaling. We use the same format as [RFC4877]. The SPD and SAD entries are only example configurations, so a mobile router implementation and a home agent implementation could configure different SPD and SAD entries, as long as they still provide the required security of the DHCPv6 signaling messages ๐ŸŒธ

For the examples in this doc, we're assuming a mobile router with home address "home_address_1" and a home agent with address "home_agent_1" ๐Ÿงš If the home address of the mobile router changes, the SPD and SAD entries need to be re-created or updated for the new home address. Be careful with this one, it's giving "easy to forget" ๐Ÿ’€

      mobile router SPD-S:
        - IF local_address = home_address_1 &
             remote_address = home_agent_1 & proto = UDP &
             local_port = any & remote_port = DHCP
          Then use SA1 (OUT) and SA2 (IN)

      mobile router SAD:
        - SA1(OUT, spi_a, home_agent_1, ESP, TRANSPORT):
              local_address = home_address_1 &
              remote_address = home_agent_1 &
              proto = UDP & remote_port = DHCP
        - SA2(IN, spi_b, home_address_1, ESP, TRANSPORT):
              local_address = home_agent_1 &
              remote_address = home_address_1 &
              proto = UDP & local_port = DHCP

      home agent SPD-S:
        - IF local_address = home_agent_1 &
             remote_address = homa_address_1 & proto = UDP &
             local_port = DHCP & remote_port = any
          Then use SA2 (OUT) and SA1 (IN)

      home agent SAD:
        - SA2(OUT, spi_b, home_address_1, ESP, TRANSPORT):
              local_address = home_agent_1 &
              remote_address = home_address_1 &
              proto = UDP & local_port = DHCP
        - SA1(IN, spi_a, home_agent_1, ESP, TRANSPORT):
              local_address = home_address_1 &
              remote_address = home_agent_1 &
              proto = UDP & remote_port = DHCP

5. Acknowledgments ๐Ÿซถ

The authors want to thank everyone who left valuable comments on the mailing list ๐Ÿ’Œ Specific suggestions from Ryuji Wakikawa, George Tsirtsis, Alexandru Petrescu, Vijay Devarapalli, and Marcelo Bagnulo got baked into this document ๐ŸŒŸ

The authors also want to thank Julien Laganier, Michaela Vanderveen, and Jean-Michel Combes for reviewing previous versions of this document ๐Ÿ‘‘

6. References ๐Ÿ“š

6.1. Normative References

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC3315] Droms, R., Bound, J., Volz, B., Lemon, T., Perkins, C., and M. Carney, "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", RFC 3315, July 2003.

[RFC3633] Troan, O. and R. Droms, "IPv6 Prefix Options for Dynamic Host Configuration Protocol (DHCP) version 6", RFC 3633, December 2003.

[RFC3646] Droms, R., "DNS Configuration options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", RFC 3646, December 2003.

[RFC3776] Arkko, J., Devarapalli, V., and F. Dupont, "Using IPsec to Protect Mobile IPv6 Signaling Between Mobile Nodes and Home Agents", RFC 3776, June 2004.

[RFC3963] Devarapalli, V., Wakikawa, R., Petrescu, A., and P. Thubert, "Network Mobility (NEMO) Basic Support Protocol", RFC 3963, January 2005.

[RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing Architecture", RFC 4291, February 2006.

[RFC4877] Devarapalli, V. and F. Dupont, "Mobile IPv6 Operation with IKEv2 and the Revised IPsec Architecture", RFC 4877, April 2007.

[RFC6275] Perkins, C., Johnson, D., and J. Arkko, "Mobility Support in IPv6", RFC 6275, July 2011.

6.2. Informative References

[RFC4885] Ernst, T. and H-Y. Lach, "Network Mobility Support Terminology", RFC 4885, July 2007.

Authors' Addresses ๐Ÿ–Š๏ธ

   Ralph Droms
   Cisco
   1414 Massachusetts Avenue
   Boxborough, MA  01719
   USA

   Phone: +1 978.936.1674
   EMail: rdroms@cisco.com


   Pascal Thubert
   Cisco
   Village d'Entreprises Green Side
   400, Avenue Roumanille
   Biot - Sophia Antipolis  06410
   FRANCE

   EMail: pthubert@cisco.com


   Francis Dupont
   Internet Systems Consortium

   EMail: fdupont@isc.org


   Wassim Haddad
   Ericsson
   6210 Spine Road
   Boulder, CO  80301
   USA

   Phone: +1 303.473.6963
   EMail: Wassim.Haddad@ericsson.com


   Carlos J. Bernardos
   Universidad Carlos III de Madrid
   Av. Universidad, 30
   Leganes, Madrid  28911
   Spain

   Phone: +34 91624 6236
   EMail: cjbc@it.uc3m.es
   URI:   http://www.it.uc3m.es/cjbc/

That's the whole spec, bestie! ๐ŸŒˆ Literally iconic ๐Ÿ’–

๐Ÿ“ฆ where this page comes from