====== DHCPv6 with Prefix Delegation ====== AstLinux supports DHCPv6 with Prefix Delegation (DHCPv6-PD) to dynamically assign an IPv6 address to the external interface and optionally assign /64 prefixes to internal interfaces. The DHCPv6 client daemon is provided by wide-dhcpv6 (with Debian patches) working together with dnsmasq. !!Note: AstLinux 1.2.5 or later is required!! ===== DHCPv6 Client Configuration ===== Enable DHCPv6 client on the external interface as follows. Select the Network Tab in the web interface.\\ {{:userdoc:ipv6-tunnel-network-tab.jpg?nolink|Network Tab}} External Interface: -> Connection Type:\\ Select the proper entry containing: DHCPv6 The default DHCPv6 client settings are:\\ {{:userdoc:dhcpv6-network-tab.jpg?nolink|DHCPv6 Network Tab}} The default settings should work for most situations. Though the supported values of "DHCPv6 Prefix Length" will vary. The default value of "60" will allow 16 [ie. ''2^(64-60)'' ] unique /64 prefixes for local use. When DHCPv6 Prefix Delegation is enabled, specify which internal interface(s) should get an automatic /64 prefix. You may enable for multiple interfaces provided the supplied DHCPv6 Prefix Length is less than 64. Internal Interfaces: -> Interface: -> IPv6 Autoconfig:\\ !!Version ->!! AstLinux 1.2.5 to AstLinux 1.2.10 - ''IPv6/nn'' must be empty\\ {{:userdoc:dhcpv6-internal-interface.jpg?nolink|DHCPv6 Internal Interface}} !!Version ->!! AstLinux 1.3.0 and later - ''IPv6/nn'' may define a ULA/64 address, or be empty\\ {{:userdoc:ipv6-ula-nptv6-assign-gua.jpg?nolink|DHCPv6 Internal Interface}} !!Note ->!! A "Reboot System" is required to apply any changes related to DHCPv6. ===== DHCPv6 Client Action Script ===== !!Note: AstLinux 1.2.10 or later is required!! !!Note: AstLinux 1.3.0 or later!! executes a default action, additional custom actions can enabled if a custom script is defined. If an executable script exists at ''/mnt/kd/dhcp6c.script'' the dhcp6c daemon will call the script after a DHCPv6 request is processed. In order to help coding a script, unique to AstLinux, the following environmental variables will be set when appropriate. External interface and DHCPv6 assigned address: dhcp6c_interface dhcp6c_address Prefix Delegation interfaces and associated IPv6 addresses, a comma-separated list for each: dhcp6c_prefix_interfaces dhcp6c_prefix_addresses Assigned Prefix, ex. ''2001:0db8:1750:2800::/56'' dhcp6c_prefix Prefix base string, ex. ''2001:0db8:1750:28'' dhcp6c_prefix_base Prefix Length as a number, ex. ''56'' dhcp6c_prefix_len !!Note ->!! Do not expect all the variables to be always defined, though if ''dhcp6c_prefix'' is defined then the complete set will be defined. Lastly, an indication whether the DHCPv6 update was different from the previous update: dhcp6c_changed The ''dhcp6c_changed'' variable can be empty if there was no previous ''dhcp6c_cache'' file to compare, ''"yes"'' if different from previous, and ''"no"'' if the same as previous. The most common use case would be to compare ''dhcp6c_changed'' with ''"no"'' to skip operations that have been previously performed. As an example, a simple script to log when the DHCPv6 lease is updated and whether it changed:\\ !!Note ->!! Occurs by default with AstLinux 1.3.0 or later #!/bin/bash case "$dhcp6c_changed" in yes) changed=" (changed)" ;; no) changed=" (no change)" ;; *) changed="" ;; esac logger -t dhcp6c -p kern.info "IPv6 Prefix$changed: $dhcp6c_prefix" ===== Debugging DHCPv6 ===== DHCP (DHCPv4) has been supported by ISP's in a standard way for a long time, but IPv6 is relatively new and DHCPv6 together with prefix delegation can be problematic. In order to diagnose a problem with your ISP it may be necessary to do some debugging from the CLI. Debug example using an interactive CLI session, assuming the external interface (EXTIF) is ''eth0'', edit accordingly if different: /etc/ifplugd/dhcp6c.action eth0 down dhcp6c -Df -c /etc/wide-dhcpv6/dhcp6c-eth0.conf -p /var/run/dhcp6c-eth0.pid eth0 The dhcp6c process now logs to terminal in foreground with verbose debugging enabled. When finished, return to normal by ... ^C /etc/ifplugd/dhcp6c.action eth0 up