IPv6 Profiles
IPv6 address profiles define IANA pools, prefix delegation pools, and DNS settings used for subscriber IPv6 provisioning. Profiles are protocol-agnostic; the same profile is used whether the subscriber connects via IPoE (DHCPv6) or PPPoE (IPv6CP). Protocol-specific options (e.g. DHCPv6 timers) are nested under a dhcpv6 sub-key.
Profiles are referenced by subscriber groups via ipv6-profile.
Profile Settings
| Field | Type | Description | Example |
|---|---|---|---|
iana-pools |
IANAPool | IPv6 address pools | |
pd-pools |
PDPool | Prefix delegation pools | |
dns |
array | Profile-level IPv6 DNS servers | [2001:4860:4860::8888] |
ra |
RA | Profile-level RA overrides | |
dhcpv6 |
DHCPv6Options | DHCPv6-specific delivery options | |
ipv6cp |
IPv6CPOptions | IPv6CP-specific delivery options (reserved) |
DHCPv6 Options
Protocol-specific settings applied only when delivering addresses via DHCPv6.
| Field | Type | Description | Default | Example |
|---|---|---|---|---|
mode |
string | server, relay, or proxy |
server |
relay |
preferred-time |
int | Default preferred lifetime in seconds (server mode) | 3600 |
3600 |
valid-time |
int | Default valid lifetime in seconds (server mode) | 7200 |
7200 |
servers |
array | Upstream DHCPv6 servers (relay/proxy only) | see below | |
link-address |
string | IPv6 link address for Relay-Forward envelope | :: |
2001:db8::1 |
server-timeout |
duration | Time to wait for upstream server response | 5s |
5s |
client-preferred-lifetime |
int | Preferred lifetime offered to clients (proxy only), in seconds | 300 |
300 |
client-valid-lifetime |
int | Valid lifetime offered to clients (proxy only), in seconds | 300 |
600 |
interface-id-format |
string | Interface-ID option format string (relay/proxy) | {interface}:{svlan}:{cvlan} |
{interface}:{svlan}:{cvlan} |
remote-id-format |
string | Remote-ID option format string (relay/proxy) | {mac} |
|
subscriber-id-format |
string | Subscriber-ID option format string (relay/proxy) | {mac} |
|
dead-time |
duration | How long to quarantine a failed server before retrying | 30s |
30s |
dead-threshold |
int | Consecutive failures before marking a server dead | 3 |
3 |
Servers
Each entry in the servers array:
| Field | Type | Description | Example |
|---|---|---|---|
address |
string | Server address in [host]:port format |
[2001:db8::100]:547 |
priority |
int | Higher priority servers are tried first | 100 |
Relay Options
DHCPv6 relay wraps client messages in a Relay-Forward envelope (message type 12) per RFC 8415. The envelope includes:
- Link-Address - configured via
link-address, used by the server to select the correct subnet - Interface-ID (option 18) - identifies the access interface, formatted from
interface-id-format - Remote-ID (option 37) - optional, formatted from
remote-id-format - Subscriber-ID (option 38) - optional, formatted from
subscriber-id-format
Format variables: {interface}, {svlan}, {cvlan}, {mac}.
The relay agent binds on UDP port 547 per RFC 8415 section 8.1.
IPv6CP Options
Reserved for future IPv6CP-specific delivery options when provisioning PPPoE subscribers.
IANA Pools
| Field | Type | Description | Example |
|---|---|---|---|
name |
string | Pool name | residential-v6 |
network |
string | IPv6 network prefix in CIDR notation | 2001:db8:100::/48 |
range_start |
string | First IPv6 address in the assignable range | 2001:db8:100::1 |
range_end |
string | Last IPv6 address in the assignable range | 2001:db8:100::ffff |
gateway |
string | Default gateway address | 2001:db8:100::1 |
preferred_time |
int | Preferred lifetime in seconds | 3600 |
valid_time |
int | Valid lifetime in seconds (must be >= preferred) | 7200 |
Prefix Delegation Pools
| Field | Type | Description | Example |
|---|---|---|---|
name |
string | Pool name | residential-pd |
network |
string | IPv6 network to allocate delegated prefixes from | 2001:db8:200::/40 |
prefix_length |
int | Length of each delegated prefix | 56 |
preferred_time |
int | Preferred lifetime in seconds | 3600 |
valid_time |
int | Valid lifetime in seconds | 7200 |
Examples
Local Server
ipv6-profiles:
default-v6:
iana-pools:
- name: wan-link-pool
network: 2001:db8:0:1::/64
range_start: 2001:db8:0:1::1000
range_end: 2001:db8:0:1::ffff
gateway: 2001:db8:0:1::1
preferred_time: 3600
valid_time: 7200
pd-pools:
- name: subscriber-pd-pool
network: 2001:db8:100::/40
prefix_length: 56
preferred_time: 3600
valid_time: 7200
dns:
- 2001:4860:4860::8888
- 2001:4860:4860::8844
dhcpv6:
preferred-time: 3600
valid-time: 7200
Relay
Wraps DHCPv6 client messages in Relay-Forward envelopes and forwards to an external server. The server uses the link-address to select the correct subnet for address allocation.
ipv6-profiles:
relay-v6:
dns:
- 2001:4860:4860::8888
dhcpv6:
mode: relay
servers:
- address: "[2001:db8::100]:547"
priority: 100
link-address: "2001:db8::1"
interface-id-format: "{interface}:{svlan}:{cvlan}"
remote-id-format: "{mac}"
Proxy
Relays to an external server but presents osvbng as the DHCPv6 server to the client. osvbng generates its own DUID from the SRG virtual MAC (HA enabled) or access interface MAC (standalone), rewrites the Server-ID in replies, and offers shorter lifetimes to clients while maintaining the full upstream lease.
When a client sends a Renew or Rebind, the proxy answers locally without contacting the upstream server — as long as the upstream server's T1 (half the server preferred lifetime) has not elapsed. Once T1 is reached, the next renewal is forwarded upstream to refresh the server-side lease.
For example, with client-preferred-lifetime: 900 (15 minutes) and a 7-day upstream preferred lifetime:
- Clients renew every ~7.5 minutes (T1 of the 15-minute client lifetime)
- The proxy answers these renewals locally
- After 3.5 days (T1 of the 7-day server lifetime), the proxy forwards the next renewal upstream
ipv6-profiles:
proxy-v6:
dns:
- 2001:4860:4860::8888
dhcpv6:
mode: proxy
servers:
- address: "[2001:db8::100]:547"
priority: 100
link-address: "2001:db8::1"
client-preferred-lifetime: 900
client-valid-lifetime: 1800
interface-id-format: "{interface}:{svlan}:{cvlan}"
Server Failover
Both relay and proxy modes support server failover with the same logic as DHCPv4.
ipv6-profiles:
resilient-v6:
dhcpv6:
mode: relay
servers:
- address: "[2001:db8::100]:547"
priority: 100
- address: "[2001:db8::101]:547"
priority: 50
link-address: "2001:db8::1"
server-timeout: 3s
dead-time: 60s
dead-threshold: 5