IPv6 Privacy Extensions: What They Are and How to Enable

IPv6 Privacy Extensions: What They Are and How to Enable

Most people first learn about IPv6 privacy extensions after noticing their device keeps new IPv6 addresses over time, and that change is by design.

Temporary addresses add a randomized interface identifier on top of your network’s prefix so outbound connections don’t always expose a stable device-specific address, while a non-temporary address remains available for reachability.

We’ll explain how this works, when it helps, the trade-offs to expect, and exactly how to enable and verify it on common platforms without breaking services you care about, noting that defaults vary by operating system so you should verify and tune lifetimes rather than assume they’re ideal.

How IPv6 Privacy Extensions Work

Classic stateless autoconfiguration (SLAAC) builds an address from a router-advertised prefix and an interface identifier; the original identifier often came from the NIC’s MAC via EUI-64, which is stable and easy to correlate across sessions and networks.

Privacy extensions replace that stable identifier with a pseudo-random value and rotate it periodically; the stack still keeps a stable non-temporary address in parallel for inbound reachability, while the temporary one is preferred for new outbound connections unless you change the policy.

Modern guidance targets a preferred lifetime near one day and a valid lifetime near two days for temporary addresses; implementations may differ, so confirm on your host and adjust if needed.

Stable Versus Temporary Addresses (RFC 7217 vs. RFC 8981)

Two complementary ideas ship in modern stacks: stable per-subnet addresses (derived from a secret and context per RFC 7217) and temporary addresses (RFC 8981) for outbound privacy; you can and often do run both at once.

Stable per-subnet identifiers avoid exposing hardware-derived bits and stay constant within a network, which helps for inbound rules and DNS records; temporary addresses change regularly to foil straightforward activity correlation based on a long-lived interface identifier.

When Temporary Addresses Help—and When They Don’t

They help against passive tracking that keys off a long-lived interface identifier on the public Internet; they don’t hide your network prefix, so multiple hosts behind the same connection may still appear related.

They don’t mitigate higher-layer tracking such as cookies or account logins, and they can complicate allow-lists, static ACLs, and logs that expect a single stable source address; consider anchoring controls to device certificates, tokens, or a published stable IPv6 address for inbound workflows.

How to Enable and Verify on Major Platforms

Before changing anything, capture current behavior so rollback is easy; privacy extensions require SLAAC with router advertisements that mark a prefix as autonomous, so networks that run DHCPv6-only without SLAAC won’t produce temporary addresses.

Windows 10/11 and Windows Server

Windows supports randomized interface identifiers and temporary addresses; PowerShell is the authoritative interface for persistent changes, while netsh remains useful for inspection and quick toggles.

If you run services bound to a specific address, bind them to your non-temporary or to a stable per-subnet address while keeping temporary addresses for browsers and other client processes.

Linux (Kernel sysctl and NetworkManager)

Linux controls temporary addressing per interface and globally via sysctl; the use_tempaddr knob governs behavior: 0 = off, 1 = on but prefer the public (stable) address for new connections, 2 = on and prefer temporary addresses for new connections.

NetworkManager Integration

When NetworkManager manages the link, you can set the policy without touching sysctl directly and also enable stable per-subnet addressing.

macOS

macOS typically enables temporary addressing by default; you can inspect or tune with sysctl, and many builds label temporary addresses directly in ifconfig output.

To persist changes across reboots, use a LaunchDaemon or a management profile that applies the desired sysctl values during boot; simple edits to /etc/sysctl.conf are ignored by many recent releases.

Operational Considerations and Best Practices

Temporary addresses change the source address of new outbound flows; that has ripple effects in observability, rate limiting, and filtering, so expect to revisit logging, rules, and monitoring.

Quick Rollback and Troubleshooting

If something breaks, roll back rather than disabling IPv6 entirely: on Windows set -UseTemporaryAddresses Disabled, on Linux set use_tempaddr=0, and on macOS set ip6.use_tempaddr=0.

Confirm the active source address selection by watching a test connection—for example, curl -6 https://example.com -v—and checking which address the stack chose; you can also reconnect an interface to force generation of a fresh temporary address and verify lifetimes after rotation.

IPv6 Privacy Extensions: Enable and Verify (FAQ)

No; they randomize the interface identifier, not the delegated prefix, so sites may still infer that multiple devices share the same connection even as your device address changes.

On Windows run netsh interface ipv6 show privacy or Get-NetIPAddress -AddressFamily IPv6 | Where-Object SuffixOrigin -eq 'Random'; on Linux run ip -6 addr and look for temporary; on macOS run ifconfig and check inet6 temporary, or confirm externally with My IP Address.

Yes for rules tied to a single global address; bind services to a stable IPv6 address (or ULA) and leave temporary addresses for outbound client traffic.

No; temporary addresses come from SLAAC with router advertisements, so a DHCPv6-only environment won’t issue them unless administrators enable autonomous configuration.

Modern guidance targets about 1 day preferred and around 2 days valid by default; you can tune lifetimes with Windows PowerShell parameters, Linux sysctls, or macOS sysctls.

Open a dual-stack site in a browser, run ping6 or curl -6, and confirm reachability with an external checker like IPv6 Test.

Yes; resolvers and queries can still correlate activity, so prefer encrypted DNS and check what names resolve and which resolver you hit using a simple DNS Lookup.

Windows: Set-NetIPv6Protocol -UseTemporaryAddresses Disabled; Linux: sysctl -w net.ipv6.conf.all.use_tempaddr=0 and persist in sysctl.d; macOS: sysctl -w net.inet6.ip6.use_tempaddr=0, then retest the app and re-enable once you’ve bound it to a stable address.