{"id":705,"date":"2026-05-15T20:07:45","date_gmt":"2026-05-16T04:07:45","guid":{"rendered":"https:\/\/nramkumar.org\/tech\/?p=705"},"modified":"2026-05-15T20:20:33","modified_gmt":"2026-05-16T04:20:33","slug":"a-brief-guide-to-ipv6-in-home-networks","status":"publish","type":"post","link":"https:\/\/nramkumar.org\/tech\/blog\/2026\/05\/15\/a-brief-guide-to-ipv6-in-home-networks\/","title":{"rendered":"A Brief Guide To IPv6 In Home Networks"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">IPv6 was supposed to take over the world a couple of decades ago but progress has been slow. Recently there was a celebration of more than 50% traffic to Google going over IPv6. While IPv4 is still dominant in most home networks, understanding IPv6 is a good exercise for someone running their home lab as it is the future &#8482;. Setting aside snide remarks, given the current state of affairs, it is very likely that functional home networks will continue to be dual-stack IPv4 and IPv6 networks for a while to come. Here&#8217;s my opinionated and simplified tutorial to IPv6 for the aspiring home network enthusiast.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">IPv6 For The IPv4 Literate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One of the biggest hurdles in getting used to IPv6 is likely going to be your familiarity with IPv4 and wanting things to work similarly with IPv4. However, IPv6 is fundamentally a different protocol &#8211; it doesn&#8217;t just expand the address space. Here are some key differences:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Translating Layer 3 addresses to Layer 2 &#8211; in IPv4, this is done through ARP. In IPv6, this is done through Neighbor Discovery Protocol that runs on ICMPv6 &#8211; specifically neighbor solicitation (multicast) and neighbor advertisement (unicast ICMPv6).<\/li>\n\n\n\n<li>Address Assignment &#8211; in IPv4, this is typically done through DHCP. That also means you naturally have a central location (your DHCP server) that can keep track of hostnames, IP addresses and act as a DNS server if necessary. While there is a DHCPv6, it is not the first choice for address assignment and you should almost certainly not be using the address assignment part of it. Most notably, Android does not support DHCPv6 at all. Instead, IPv6 uses SLAAC to automatically generate an address without requiring any form of coordination.<\/li>\n\n\n\n<li>Multi-homing is the norm &#8211; in IPv4, having a single address per interface is the norm for home networks (and even otherwise). On the other hand, in IPv6, having multiple addresses for a single interface is the normal &#8211; it would be abnormal to not have multiple addresses for an interface in IPv6.<\/li>\n\n\n\n<li>Address Format &#8211; Of course, the obvious one. IPv6 addresses are 128 bits vs 32 bits for IPv4. The partitioning of the 128 bits is 64 bits for network prefix, subnet ID and 64 bits for Interface ID. Typically 48 bits are network prefix, the next 16 are subnet ID and the final 64 bits are the Interface ID or Host portion. However, the only thing mandated is that the last 64 bits are for the host portion &#8211; the first 64 depend on prefix delegation from providers in their implementation (more on this below). For ULA addresses, the split is 8-bit prefix, 40 bits randomized network ID, 16 bits subnet ID and 64 bits for the Interface ID.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Types Of IPv6 Addresses<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GUA &#8211; Globally Unique Address. This is an Internet routable address &#8211; as in, this is a public address that is publicly routable. Typically, your ISP will delegate a GUA prefix (somewhere between 48 &#8211; 64 bits) and your router can manage all of your network devices within that GUA prefix.<\/li>\n\n\n\n<li>ULA &#8211; Unique Local Address. This is equivalent to the NAT reserved address spaces in IPv4 such as <code>10.0.0.0\/8<\/code> and <code>192.168.0.0\/16<\/code>. They are used for setting up LAN or Intranet addresses. They start with the prefix <code>fc00::\/7<\/code> although the first half is reserved, so practically <code>fd00::\/8<\/code>.<\/li>\n\n\n\n<li>Link-Local Address. This is required and is only for communication over the same LAN. These begin with <code>fe80::\/10<\/code><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The Ideal World As Envisioned By IPv6<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Your home router gets a stable GUA prefix from your ISP<\/li>\n\n\n\n<li>You use prefix delegation or subnetting on your router with SLAAC<\/li>\n\n\n\n<li>When you generate a ULA, you should generate it so the chances of collision are low to impossible. There are public ULA generators on the web you can use for this purpose.<\/li>\n\n\n\n<li>DNS entries are maintained through some kind of DNS update mechanism that runs on each client. I wish I was joking about this, but AFAICT, this is the expectation for how DNS entries are expected to be maintained in an IPv6 network.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The Reality Of IPv6 For A Home Network<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Your ISP may not assign you a stable GUA. It can be somewhat stable but change with router reboots or periodically. Similar to your IPv4 address when you do not have a business line equivalent where you can get a static IP address assignment.<\/li>\n\n\n\n<li>Your ISP can delegate you a <code>\/64<\/code> prefix in which case you cannot create any IPv6 subnets at all. Your entire network is flat wrt the GUA prefix. My ISP delegates a <code>\/60<\/code> prefix which gives me <code>16<\/code> subnets.<\/li>\n\n\n\n<li>I have no interest in maintaining extra infrastructure for LAN DNS. I prefer using my router for it as much as possible.<\/li>\n\n\n\n<li>Remembering IPv6 prefixes are annoying &#8211; I don&#8217;t care for it. I don&#8217;t want to remember 48 bits or 56 bits or 64 bits. The fewer bits I have to remember, the better.<\/li>\n\n\n\n<li>It is perfectly fine to pick a simple ULA (such as <code>fd00:1::\/64<\/code>) and use it for your Home Network. The main reason for the RFC advocating against it is when network merges happen &#8211; in theory, the biggest scenario for this in a Home Network is if you establish any kind of VPN or tunnel to another network (say your friend&#8217;s or relative&#8217;s networks). There are typically easier ways to resolve that scenario (ask them to pick different ones from yours!). <\/li>\n\n\n\n<li>Once we have this memorable prefix, we can build our own bespoke system that uses this prefix to allocate the static IPv6 address and this in turn can simplify the DNS record creation \/ maintenance for the network.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In the next post, I will go over the setup of a usable IPv6 network in a Home Network with full name resolution when using Unifi gateways.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>IPv6 was supposed to take over the world a couple of decades ago but progress has been slow. Recently there was a celebration of more than 50% traffic to Google going over IPv6. While IPv4 is still dominant in most home networks, understanding IPv6 is a good exercise for someone running their home lab as&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-705","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/nramkumar.org\/tech\/wp-json\/wp\/v2\/posts\/705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nramkumar.org\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nramkumar.org\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nramkumar.org\/tech\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nramkumar.org\/tech\/wp-json\/wp\/v2\/comments?post=705"}],"version-history":[{"count":2,"href":"https:\/\/nramkumar.org\/tech\/wp-json\/wp\/v2\/posts\/705\/revisions"}],"predecessor-version":[{"id":708,"href":"https:\/\/nramkumar.org\/tech\/wp-json\/wp\/v2\/posts\/705\/revisions\/708"}],"wp:attachment":[{"href":"https:\/\/nramkumar.org\/tech\/wp-json\/wp\/v2\/media?parent=705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nramkumar.org\/tech\/wp-json\/wp\/v2\/categories?post=705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nramkumar.org\/tech\/wp-json\/wp\/v2\/tags?post=705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}