RA6(1)

πŸ“¦
version 2.2 Β· 2 versions
, in epel 10, epel 9, fedora 43, fedora 44

πŸ’– RA6(1) β€” General Commands Manual πŸ’–

okay bestie, pull up a chair, because we're about to get deep into ra6, and honestly? it's giving security-assessment-icon. this is the manual page for the ra6 tool. no cap.


✨ NAME ✨

ra6 β€” a security assessment tool for attack vectors based on ICMPv6 Router Advertisement messages πŸ¦‹


πŸŽ€ SYNOPSIS πŸŽ€

ra6 [-i INTERFACE] [-s SRC_ADDR[/LEN]] [-d DST_ADDR] [-y FRAG_SIZE] [-u
DST_OPT_HDR_SIZE] [-U DST_OPT_U_HDR_SIZE] [-H HBH_OPT_HDR_SIZE] [-S
LINK_SRC_ADDR] [-D LINK_DST_ADDR] [-c CUR_HOP] [-t ROUTER_LIFETIME] [-r
REACHABLE_TIME] [-x RETRANS_TIMER] [-m] [-o] [-a] [-q] [-p PREFERENCE]
[-E LINK_ADDR] [-e] [-P PREFIX/LEN[#FLAGS[#VALID[#PREFERRED]]]] [-M MTU]
[-N [LIFETIME[#DNS_ADDR]]] [-R PREFIX/LEN[#PREF[#LIFETIME]]] [-f
N_PREFIXES] [-F N_SOURCES] [-w N_ROUTES] [-W N_ADDRS[#ADDRSPEROPT]] [-j
PREFIX[/LEN]] [-k PREFIX[/LEN]] [-J LINK_ADDR] [-K LINK_ADDR] [-b
PREFIX[/LEN]] [-g PREFIX[/LEN]] [-B LINK_ADDR] [-G LINK_ADDR] [-L] [-v]
[-h]

like, that's a lot of brackets, and every single one of them matters. slay πŸ’…


🌸 DESCRIPTION 🌸

so ra6 lets you do security assessment of IPv6 implementations against a whole buffet of attacks that are based on ICMPv6 Router Advertisement messages. it's part of the SI6 Networks' IPv6 Toolkit, which is a security assessment suite for the IPv6 protocols. iconic behavior, honestly.

this tool has two modes of operation: active and passive.

  • in active mode, the tool attacks a specific target 🎯
  • in passive mode, the tool listens to traffic on the local network, and launches an attack in response to such traffic πŸ‘‚

active mode is what you get when an Ethernet destination address and/or an IPv6 destination address are specified. passive mode is what you get when the -L option (or its long variant --listen) is specified. in passive mode, the ra6 tool listens for incoming Router Solicitation messages and responds with the Router Advertisement attack messages. and if you specify both a destination address and the -L option? the tool firstly employs active mode to attack the specified target, and then enters passive mode to respond to Router Solicitation messages with Router Advertisement attack packets. it's doing both. it contains multitudes. πŸ’–


⭐ OPTIONS ⭐

ra6 takes its parameters as command-line options. each of the options can be specified with a short name (one character preceded with the hyphen character, as e.g. -i) or with a long name (a string preceded with two hyphen characters, as e.g. --interface). pick your fighter, both are valid. 🫢

depending on the amount of information (i.e., options and option data) to be conveyed into the Router Advertisements, it may be necessary for ra6 to split that information into more than one Router Advertisement message. this may be particularly the case when the "flood-prefixes", "--flood-routes", or "--flood-dns" options are used. also, when the ra6 tool is instructed to flood the victim with Router Advertisements from different sources ("--flood-sources" option), multiple packets may need to be generated. ra6 supports IPv6 fragmentation, which may be of use if a large amount of information needs to be conveyed within a single Router Advertisement message. IPv6 fragmentation is not enabled by default, and must be explicitly enabled with the -y option. so don't come crying to me when your packet doesn't fragment itself, bestie 😭

the tool supports filtering of incoming Router Solicitation messages based on the Ethernet Source Address, the Ethernet Destination Address, the IPv6 Source Address, and the IPv6 Destination Address. there are two types of filters: "block filters" and "accept filters".

  • if any "block filter" is specified, and the incoming Router Solicitation message matches any of those filters, the message is discarded (and thus no Router Advertisements are sent in response) 🚫
  • if any "accept filter" is specified, incoming Router Solicitation messages must match the specified filters in order for the ra6 tool to respond with Router Advertisement messages βœ…

  • -i INTERFACE, --interface INTERFACE β€” this option specifies the network interface that the tool will use. if the destination address (-d option) is a link-local address, or the "listening" (-L) mode is selected, the interface must be explicitly specified. the interface may also be specified along with a destination address, with the -d option. so like, don't forget it, it's not optional in those cases fr fr 🌈
  • -s SRC_ADDR, --src-address SRC_ADDR β€” this option specifies the IPv6 Source Address (or IPv6 prefix) to be used for the Router Advertisement messages. if left unspecified, a randomized link-local unicast (fe80::/64) address is selected. surprise! it randomizes itself ✨
  • -d DST_ADDR, --dst-address DST_ADDR β€” this specifies the IPv6 Destination Address of the Router Advertisement messages. if this option is left unspecified, but the Ethernet Destination Address is specified, the "all-nodes link-local multicast" address (ff02::1) is selected as the IPv6 Destination Address.

when operating in passive mode (-L option), the IPv6 Destination Address is selected according to the IPv6 Source Address of the Router Solicitation message. if the IPv6 Source Address of the Router Solicitation is the unspecified address (::), the "all-nodes link-local multicast" address (ff02::1) is used as the IPv6 Destination Address. otherwise, the IPv6 Source Address of the incoming Router Solicitation message is used as the IPv6 Destination Address of the outgoing Router Advertisement messages. it's literally mirroring them back at themselves πŸ’…

  • --hop-limit, -A β€” this option specifies the Hop Limit of the Router Advertisement messages. it defaults to 255. note that IPv6 nodes are required to check that the Hop Limit of incoming Router Advertisement messages is 255. therefore, this option is only useful to assess whether an IPv6 implementation fails to enforce the aforementioned check. iykyk β€” you're basically vibe-checking their validation logic πŸ”₯
  • -y SIZE, --frag-hdr SIZE β€” this option specifies that the resulting packet must be fragmented. the fragment size must be specified as an argument to this option.
  • -u HDR_SIZE, --dst-opt-hdr HDR_SIZE β€” this option specifies that a Destination Options header is to be included in the resulting packet. the extension header size must be specified as an argument to this option (the header is filled with padding options). multiple Destination Options headers may be specified by means of multiple -u options. stack 'em up πŸŽ€
  • -U HDR_SIZE, --dst-opt-u-hdr HDR_SIZE β€” this option specifies a Destination Options header to be included in the "unfragmentable part" of the resulting packet. the header size must be specified as an argument to this option (the header is filled with padding options). multiple Destination Options headers may be specified by means of multiple -U options. this option is only valid if the -y option is specified (as the concept of "unfragmentable part" only makes sense when fragmentation is employed). no -y, no -U, periodt ⚠️
  • -H HDR_SIZE, --hbh-opt-hdr HDR_SIZE β€” this option specifies that a Hop-by-Hop Options header is to be included in the resulting packet. the header size must be specified as an argument to this option (the header is filled with padding options). multiple Hop-by-Hop Options headers may be specified by means of multiple -H options.
  • --curhop, -c β€” this option specifies the CurHop value that is included in Router Advertisement messages. this is the value that nodes should use for the "Hop Limit" field of the IPv6 packets they send. if this option is not specified, the CurHop value defaults to 255.
  • --lifetime, -t β€” this option specifies the Router Lifetime value that is included in Router Advertisement messages. the Router Lifetime is the amount of time (in seconds) that the router can be used as a "default router". if this option is left unspecified, a Router Lifetime value of 9000 seconds is selected. that's your router's whole lease on life, bestie πŸ•°οΈ
  • --reachable, -r β€” this option specifies the Reachable Time value that is included in Router Advertisement messages. the Reachable Time is the amount of time in milliseconds that a neighbor is considered "reachable" after a reachability confirmation. if this option is left unspecified, a Reachable Time of 0xffffffff ("infinity") is selected. infinity!! main character energy fr πŸ‘‘
  • --retrans, -x β€” this option specifies the Retrans Timer value that is included in Router Advertisement messages. the Retrans Timer specifies the amount of time in milliseconds between retransmitted Neighbor Solicitation messages (with β€˜0’ meaning "unspecified by this router"). if this option is left unspecified, a Retrans Timer of 4000 milliseconds is selected.
  • --managed, -m β€” this option causes the ra6 tool to set the β€˜M’ (Managed) bit in the Router Advertisement messages that it sends. the β€˜M’ bit indicates that network configuration is "managed" (e.g., DHCPv6 should be used instead). if left unspecified, the β€˜M’ bit is not set.
  • --other, -o β€” this option causes the ra6 tool to set the β€˜O’ ("Other") bit in the Router Advertisement messages that it sends. the β€˜O’ bit indicates that additional configuration information is available through other means (e.g., DHCPv6). if left unspecified, the β€˜O’ bit is not set.
  • --home-agent, -a β€” this option causes the ra6 tool to set the β€˜H’ ("Home Agent") bit in the Router Advertisement messages that it sends (the β€˜H’ bit is specified in RFC 3775). if this option is left unspecified, the β€˜H’ bit is not set.
  • --nd-proxy, -q β€” this option causes the ra6 tool to set the β€˜P’ ("ND Proxy") bit in the Router Advertisement messages that it sends (the "P" bit is specified in RFC4389). if this option is left unspecified, the β€˜P’ bit is not set.
  • --preference, -p β€” this option specifies the Preference field of the Router Advertisement messages, with "high" (equivalent to "1"), "medium" (equivalent to "0"), "low" (equivalent to "-1"), and "resvd" (equivalent to "-2"). if left unspecified, a Preference value of "1" (High) is selected. default is high, because obviously πŸ’…
  • -S SRC_LINK_ADDR, --src-link-address SRC_LINK_ADDR β€” this option specifies the link-layer Source Address of the Router Advertisement messages (this option is only valid for Ethernet interfaces). if left unspecified, the link-layer Source Address is randomized. mystery address era πŸ¦‹

okay that's part 1 done, and there is so much more coming β€” don't go anywhere, bestie πŸ’œ

okay so when we're in passive mode 🌸, the link-layer Source Address gets picked based on the IPv6 Destination Address of the incoming Router Solicitation messages. Like, if that IPv6 Destination Address on the incoming Router Solicitation is a multicast address (usually the "all-routers link-local multicast" address ff02::02), then the link-layer Source Address is set to whatever address the -S option says β€” or, if you never specified -S, it just goes with a random address 🎲. But if that IPv6 Destination Address is not a multicast address (meaning it's a unicast address, bestie), then the link-layer Source Address gets set to the Ethernet Destination Address of the incoming Router Solicitation message. periodt.

  • -D DST_LINK_ADDR, --dst-link-address DST_LINK_ADDR β€” this one is here to specify the link-layer Destination Address of the Router Advertisement messages πŸ’… (heads up: this option is only valid for Ethernet interfaces, no cap). If you leave it unspecified, it defaults to 33:33:00:00:00:01, which is the Ethernet multicast address corresponding to the IPv6 "all-nodes link-local multicast" address ✨.

Now in passive mode, the link-layer Destination Address is set depending on the IPv6 Source Address of the incoming Router Solicitation message. If that IPv6 Source Address is the unspecified address (::), the link-layer destination address is set to 33:33:00:00:00:01 (the Ethernet multicast address corresponding to the IPv6 "all-nodes link-local multicast" address 🌈). Otherwise? It gets set to the same value as the link-layer Source Address of the incoming Router Solicitation message. simple as that πŸ’–

  • --source-lla-opt, -E β€” this option specifies the contents of a source link-layer address option that gets included in the Router Advertisement messages πŸ‘‘. If you specify just one option, it goes into all the outgoing Router Advertisement messages. But if you specify more than one source link-layer address, they're only included in the first packet of a set of Router Advertisements (that's for when more than one Router Advertisement needs to be sent to convey all the specified information) πŸ¦‹.
  • --add-slla-opt, -e β€” this tells the ra6 tool to include a source link-layer address option in the Router Advertisement messages πŸ’«. The link-layer address in the option is the same as the Ethernet Source Address used for the outgoing Router Advertisement message. So what's the difference between this and -E? Well, -E doesn't specify the actual value of the option β€” it just tells the tool to include the option, and the actual value gets selected according to the Ethernet Source address used in the outgoing packet. lowkey elegant πŸŽ€
  • --prefix-opt, -P β€” this specifies the contents of a Prefix Information option to be included in Router advertisement messages, and the format is:
-P prefix/length#flags#valid#preferred

Let me break it all the way down for you πŸ“:

  • prefix/length is a mandatory field that indicates an IPv6 prefix (e.g., 2001::/16).
  • flags is an optional argument that says which flags should be set for this prefix β€” L for the "on-link" flag, A for the "autonomous address-configuration" flag, R for "Router Address", and - for indicating that no flags should be set for this prefix. If you leave this field unspecified, the L and A flags get set for the specified Prefix Information option πŸ’–.
  • valid is an optional field that indicates the "Valid Lifetime" for this prefix (the length of time in seconds during which this information can be used for on-link determination). If unspecified, a value of 0xffffffff (infinity) is used ♾️.
  • preferred is an optional argument that specifies the "Preferred Lifetime" value for this prefix (the length of time in seconds that addresses generated from this prefix via stateless address auto-configuration remain preferred). If unspecified, a value of 0xffffffff (infinity) is used ♾️.
  • --route-opt, -R β€” this specifies the contents of a Route Information option to be included in Router advertisement messages, format:
-R prefix/length#preference#lifetime

details, because I know you want them 🌸:

  • prefix/length is a mandatory field that indicates an IPv6 prefix (e.g., 2001::/16).
  • preference is an optional argument that indicates the preference of this prefix β€” high/1, normal/0, low/-1, or resvd/-2. If left unspecified, a value of 1 (i.e., high) is selected ✨.
  • lifetime is an optional parameter that specifies the "Route Lifetime" for the specified route (the period of time during which this information can be used for route determination). If left unspecified, a value of 0xffffffff (infinity) is selected ♾️.
  • --mtu-opt, -M β€” this option is meant to specify the value of a MTU option that should be included in Router Advertisements 🫢. And plot twist: you can specify multiple MTU options. iconic.
  • --rdnss-opt, -N β€” this lets you advertise a number of recursive DNS servers by means of the RDNSS option πŸ’…. A "Lifetime" parameter (32 bits) indicates the amount of time (in seconds) that the specified DNS server(s) may be used for name resolution ⏳. You can put multiple IPv6 addresses in the same RDNSS option, like this:
--dns-opt lifetime#ipv6address1#ipv6address2

Also, more than one RDNSS option may be specified. go off πŸ’–

  • --flood-prefixes, -f β€” this tells the ra6 tool to flood the victim host with Prefix information options 🌊. The number of Prefix Information options to send is specified as -f number. When you use this option, a -P option must be specified (with the usual syntax -P prefix/length#flags#valid#preferred), so that it tells ra6 how to generate those Prefix Information options. The prefix/length specifies the length of the prefixes that will be included in each Prefix Information option. The prefix length stays constant for all options, but the actual prefix gets randomized 🎲. The rest of the parameters are shared by all the prefixes, and they have the same "defaults" as noted in the description of the -P option.
  • --flood-sources, -F β€” this tells the tool to send Router Advertisement messages from multiple addresses πŸ‘―. The number of different sources is specified as -F number. The Source Address of each Router Advertisement is randomly selected from the prefix specified by the -s option. If -F is specified but -s is left unspecified, the Source Address of the packets is randomly selected from the prefix fe80::/64 (link-local unicast) 🌸.
Heads up bestie: it should be noted that hosts are required to discard Router Advertisement messages that do not have a link-local unicast address as the Source Address. so like, that matters πŸ’€
  • --flood-routes, -w β€” this tells the ra6 tool to flood the target with Route Information options 🌊. The number of Route Information options to send is specified as -R number. When this option is specified, a -R option should be specified (with the usual syntax -R prefix/length#preference#lifetime) such that ra6 is told how to generate the Route Information options. The prefix/length specifies the length of the prefixes that will be included in each Route Information option. The prefix length stays constant for all options, while the actual prefix gets randomized 🎲. The rest of the parameters are shared by all the options, and have the same "default values" as noted in the description of the -R option.
  • --flood-dns, -W β€” this tells the ra6 tool to flood the target with random IPv6 addresses (supposed to correspond to recursive DNS servers), by means of the Recursive DNS Server (RDNSS) option πŸŒ€. The number of IPv6 addresses to be sent to the target is specified as -k number. Since there's a limit on how many IPv6 addresses can fit in a single RDNSS option, the tool may need to split those addresses into several RDNSS options. ngl, very considerate of it πŸ’….

You can also tell ra6 the maximum number of IPv6 addresses each RDNSS option should contain, using a second (and optional) parameter to the -k option πŸŽ€. Specifically, you can instruct the tool to send a total number of addresses (totaladdresses) with up to some specific number (addrsperoption) of addresses per RDNSS option, in the form:

-k totaladresses#addrsperoption

This might be helpful if you believe the target implementation enforces a limit on the number of addresses it honors on a "per RNDSS option" basis, but no limit on the aggregate number of addresses ✨. In that kind of case, an implementation might e.g. survive the attack -k 5000, but still be vulnerable to the attack -k 5000#3. The "Lifetime" value for these addresses can be specified by issuing a -N option with the desired "Lifetime" (this is analogous to how --flood-routes operates together with the -R option, and how --flood-prefixes operates together with the -P option) 🌈.

  • --block-src, -j β€” this sets a block filter for the incoming Router Solicitation messages based on their IPv6 Source Address πŸ›‘. It lets you specify an IPv6 prefix in the form -j prefix/prefixlen. If the prefix length isn't specified, a prefix length of /128 is selected (i.e., the option assumes you specified a single IPv6 address rather than an IPv6 prefix) 🎯.
  • --block-dst, -k
  • -k β€” this one sets a block filter for incoming Router Solicitation messages, filtering on their IPv6 Destination Address. You give it an IPv6 prefix in the form -k prefix/prefixlen. If you skip the prefix length, it just goes with /128 β€” like, it assumes you meant one single IPv6 address and not a whole prefix, iykyk.
  • --block-link-src, -J β€” sets a block filter for incoming Router Solicitation messages based on their link-layer Source Address. Gotta follow this one with a link-layer address, and heads up: it's only valid for Ethernet interfaces. 🫢
  • --block-link-dst, -K β€” sets a block filter for incoming Router Solicitation messages based on their link-layer Destination Address. Also needs a link-layer address after it, and also only valid for Ethernet interfaces.
  • --accept-src, -b β€” flips the energy: this sets an accept filter for incoming Router Solicitation messages, based on their IPv6 Source Address. You specify an IPv6 prefix like -b prefix/prefixlen. No prefix length given? Boom, /128 β€” again, it's assuming you meant a single IPv6 address, not a prefix.
  • --accept-dst, -g β€” sets an accept filter for incoming Router Solicitation messages based on their IPv6 Destination Address. Specify an IPv6 prefix as -g prefix/prefixlen, and if the prefix length isn't there it defaults to /128 (single IPv6 address energy, not prefix energy).
  • --accept-link-src, -B β€” sets an accept filter for incoming Router Solicitation messages based on their link-layer Source Address. Must be followed by a link-layer address, and only valid for Ethernet interfaces. no cap.
  • --accept-link-dst, -K β€” sets an accept filter for incoming Router Solicitation messages based on their link-layer Destination Address. Follow it with a link-layer address, and yep β€” only valid for Ethernet interfaces.
  • --loop, -l β€” tells ra6 to send periodic Router Advertisements to the destination node. How long it pauses between them? That's the -z option's whole job, and it defaults to 1 second. πŸ’– Heads up though: this option cannot be set together with the -L (--listen) option. Pick a lane bestie.
  • --sleep, -z β€” sets how much time to pause between sending Router Advertisements. Leave it out and it defaults to 1 second.
  • --listen, -L β€” says the tool should go into passive mode (possibly after doing active-mode stuff first, if you passed the -d or -D options).
  • --verbose, -v β€” tells ra6 to be verbose. it's giving "tell me everything".
  • --help, -h β€” prints help info for the ra6 tool. ✨

πŸŽ€ EXAMPLES πŸŽ€

The following sections illustrate typical use cases of the ra6 tool. (basically the group chat receipts, but make them commands.)

Example #1

# ra6 -i eth0 -P 2001::/64#LA -P 2002::/64#A -e -L

Listen (-L) for incoming Router Solicitations on interface eth0 (-i eth0), and advertise the prefix 2001::/64 for both on-link determination and auto-configuration (-P 2001::/64#LA), plus the prefix 2002::/64 for only auto-configuration (-P 2002::/64#A). And include a source link-layer address option (-e) in the Router Advertisements. two prefixes, one interface, zero drama. πŸ’…

Example #2

# ra6 -i eth0 -d fe80::1 -D 01:02:03:04:05:06 -c 5 --lifetime 100 -o -e -M 1400

Use the network interface eth0 to send a Router Advertisement with a random link-local IPv6 Source Address and a random Ethernet Source Address, to the IPv6 Destination address fe80::1 and the Ethernet Destination Address 01:02:03:04:05:06. The Router Advertisement includes a Router Lifetime of 100, and advertises a CurHop value of 5 (so, a recommended Hop Limit of 5). The O bit is set β€” meaning other configuration information is available via DHCP. The Router Advertisement also includes a source link-layer address option (carrying the same address as the packet's Ethernet Source Address) and an MTU option with a value of 1400. iconique.

Example #3

# ra6 -i eth0 --flood-sources 10 --flood-routes 50 --flood-prefixes 40 -R ::/64#1 -P ::/48#LA -L -e

Listen for incoming Router Solicitation messages on the interface eth0, and respond with Router Advertisements from 10 different link-local unicast IPv6 Source Addresses (randomized) and 10 different (randomized) Ethernet Source Addresses. Each Router Advertisement includes 50 Route Information options, each with a randomized /64 prefix and a preference of 1 (high). The Router Advertisements also contain 40 Prefix Information options, each with a randomized /48 prefix and the A (auto-configuration) and L (on-link determination) bits set. Plus, every Router Advertisement includes a source link-layer address option holding the same (randomized) address used for the Ethernet Source Address field. it's a whole flood, and it ate. πŸ”₯

Example #4

# ra6 -i eth0 -N 1000#fe80::1#2001:db8::1 -L

Listen for incoming Router Solicitation messages, and respond with a Router Advertisement containing one RDNSS option with two IPv6 addresses (fe80::1 and 2001:db8::1), with a Lifetime of 1000. All Router Solicitation messages sent to multicast addresses get responded to using the same (randomized) IPv6 Source Address and the same (randomized) Ethernet Source Address. Router Solicitation messages destined to unicast addresses get responded with Router Advertisements that use the incoming Router Solicitation's IPv6 Destination Address and Ethernet Destination Address for the Router Advertisement's IPv6 Source Address and Ethernet Source Address, respectively. the way it just mirrors you back. 😭

Example #5

# ra6 -i eth0 -s fe80::1234 -S 00:01:02:03:04:05 -d fe80::1 -N 900 --flood-dns 1000#10 -L

Flood the target (fe80::1) with 1000 random IPv6 addresses of Recursive DNS Servers, capped at a maximum of 10 addresses per RDNSS option. Each RDNSS option has a Lifetime of 900. Packets are sent with an IPv6 Source Address of fe80::1234 and an Ethernet Source Address of 00:01:02:03:04:05. Once the target has been attacked, listen for incoming Router Solicitation messages and respond with the same flood packets β€” though the Ethernet Source Address and the IPv6 Source Address will change if the Router Solicitation messages were sent to a unicast address. πŸ‘‘


🌈 SEE ALSO 🌈

"Security/Robustness Assessment of IPv6 Neighbor Discovery Implementations" (available at: <http://www.si6networks.com/tools/ipv6toolkit/si6networks-ipv6-nd-assessment.pdf>) β€” go read it for a whole discussion of Neighbor Discovery vulnerabilities, plus extra examples of how to use the na6 tool to exploit them. iykyk, it's required reading bestie.

πŸ’œ AUTHOR πŸ’œ

The ra6 tool and the corresponding manual pages were produced by Fernando Gont <fgont@si6networks.com> for SI6 Networks <http://www.si6networks.com>.

Copyright (c) 2011-2013 Fernando Gont.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <http://www.gnu.org/licenses/fdl.html>.


and that's the whole page, bestie β€” page 3 of 3, done and dusted. πŸ’–

Okay so the official footer vibe: this whole thing is RA6(1), and it's stamped with its source/version and date down there at the bottom like a little signature. Slay. Go forth and Router Advertise responsibly. πŸ¦‹βœ¨

πŸ“¦ where this page comes from