Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    IPv6 changes aren't written to config.xml or dhcp6c.conf

    Scheduled Pinned Locked Moved IPv6
    5 Posts 2 Posters 89 Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • brado7274B Offline
      brado7274
      last edited by

      I have spent the last several days following doc, blog posts, LLM suggestions, and trial and erroring IPv6 configuration on pfSense, and I'm starting to think the 2.8.1-release has some kind of unexpected state bug that I'm running into that renders IPv6 completely unusable. But as I am not the expert in what causes config to take, I thought I'd consult the experts here.

      In a nutshell, the IPv6 changes I'm making aren't taking. Many times over, I've configured gateways, WAN and LAN interfaces, Firewall NAT, Firewall rules, DHCPv6 server, Router advertisements, and all I ever get in the /var/etc/dhcp6c.conf is the following:

      interface em0 {
      script "/var/etc/dhcp6c_wan_script.sh";
      };

      Resaving and applying doesn't work. Restarting services doesn't work. Rebooting the pfSense box doesn't work. I've even reset pfSense to factory settings and have done it all again clean, still doesn't work.

      The problem is neither upstream nor downstream from pfSense -- the problem is pfSense. Upstream, I have tried configuring IPv6 with two different ISPs, both AT&T fiber, and Cox cable modem -- same thing with both. I have successfully configured IPv6 with both ISPs in a matter of minutes by bypassing pfSense, and did it two different ways: first connecting a computer directly to these ISP modems, and also connecting a separate Wifi router directly to these ISP modems. No problems getting IPv6 up and running with either.

      What is the magic that causes changes you make in the pfSense UI console to actually be saved and written to configuration files? I've run pfSense for about 8 years with never a single issue until two things this past week: 1) upgrading to 2.8.1-release and 2) trying to debug an issue which was due to improper IPv6 handling and discovering that there seems no way to reconfigure IPv6 on pfSense via the UI console. Is this a known bug? What do you have to do to get IPv6 related changes to be permanently saved?

      Thanks so much for your help -- I was about to buy some new pfSense-running hardware, and this halted me in my tracks. I can't use it if there's no way to configure IPv6...I imagine there's a magic spell or ceremony that will help me find my way through.... :-D

      Thanks, B

      patient0P 1 Reply Last reply Reply Quote 0
      • patient0P Offline
        patient0 @brado7274
        last edited by

        @brado7274 you would have to be more specific what exactly you enabled and what settings are not sticking.
        I have IPv6 enabled on 2.8.1 and it works as expected for me, the settings are saved.

        • what type of hardware you run it on?
        • had you IPv6 configured and working before the upgrade?
        • what type of IPv6 configuration have you done for WAN?
        • what DHCP server are you using, ISC DHCP or KEA?

        The pfSense documentation has plenty of information about IPv6 configuration:
        https://docs.netgate.com/pfsense/en/latest/interfaces/configure-ipv6.html
        https://docs.netgate.com/pfsense/en/latest/network/ipv6/index.html

        brado7274B 1 Reply Last reply Reply Quote 0
        • brado7274B Offline
          brado7274 @patient0
          last edited by brado7274

          @patient0 Thanks so much for the reply, and I appreciate the questions. Forgive me for sparing all the technical details on my first post -- that was intentional, b/c I thought the best approach was to distill the issue down to the core matter, which is how / when pfSense configuration changes are saved and written to configuration files. As mentioned, I've gone through docs, blog posts, and I've got 50+ pages (maybe slight exaggeration, but not by much) of LLM iterations of configuration settings tried. The issue seems to not be the settings themselves, but that it doesn't really matter what settings are made, they don't persist, or find their way to the supposed config files which drive service function. But I'll now add some details, and hopefully we can figure this out.

          My hardware is a Protectli Vault FW6A, and I've been running since 2019 flawlessly until the past recent months. For years I've had Cox cable modem as my ISP, and earlier this year AT&T rolled out fiber in my area (March-ish). I acquired AT&T fiber and kept Cox, and ran multi-WAN in pfSense, and while I configured and tested WAN failover (and it worked fine), I opted to keep both WAN configs totally separate: no failover or load-balancing, no Gateway Groups, etc. Just two separate WANs, each associated with their own separate LAN. Here's how that shakes out on the Protectli Vault ports:

          PORT - Interface Name
          WAN - WAN_ATT
          LAN - LAN_ATT
          OPT1 - LAN_COX
          OPT2 - WAN_COX

          In the case of both WAN interfaces, the general idea:

          • IPv4 Configuration Type: DHCP
          • IPv6 Configuration Type: DHCP6
          • DHCP6 Client Configuration: various options selected, but have experimented with all at one point.

          In the case of both LAN interfaces, the general idea:

          • IPv4 Configuration Type: Static IPv4 (with its own network range separate from the other LAN)
          • IPv6 Configuration Type: Track Interface (to the associated WAN interface)

          Firewall NAT -- Automatic outbound NAT
          Firewall Rules

          • WANs: either auto-generated (depending on block options) or none
          • LANs: both IPv4 and IPv6 allow associated LAN subnet to any

          Services --> DHCPv6 Server (both LANs): Kea DHCP (note this was a switch made from ISC DHCP during debugging), enabled, registrations track server
          Services --> Router Advertisement (both LANs): Assisted (or Managed, tried both)

          That's the general idea. Here was the basic timeline of changes, and when things went wrong:

          2019: Installed the Protecli box with pfSense, ran one WAN (Cox) without issue until 2025. Never paid any attention to IPv6 config.
          2025 - March-ish: got AT&T fiber, kept COX, configured Multi-WAN (no failover, no load-balancing), IPv4 worked fine, paid no attention to configuring IPv6. pfSense configuration changes do as expected, changes write config and apply immediately.
          2025 - July-ish: configured IPv6 for both WANs / LANs, able to resolve IPv6 addresses and route IPv6 fine to Internet from LAN clients across both WANs / ISPs.
          2025 - Sept / Oct - ish -- upgraded pfSense from 2.7.x to 2.8.0. Around the same time, discovered a problem with a commercial authenticator which appeared related to IPv6 resolution and routing.
          2025 - last week of Oct / Nov - upgraded pfSense from 2.8.0 to 2.8.1. Discovered while IPv6 still working on AT&T WAN, not working anymore on Cox WAN. Started trying to debug it, discovered my IPv6 pfSense configuration changes were never getting reflected to config.xml or dhcp6c.conf file. What I saw was a dhcp6c.conf file with the AT&T WAN interface config still there, but the Cox WAN interface config not writing at all. Tried all manner of changes back / forth, saving / applying, restarting services, etc. to try to get that config to write. Here's an example of that state in the dhcp6c.conf:

          interface em0 {
          	send ia-na 0;	# request stateful address
          	send ia-pd 0;	# request prefix delegation
          	request domain-name-servers;
          	request domain-name;
          	script "/var/etc/dhcp6c_wan_script.sh"; # we'd like some nameservers please
          };
          id-assoc na 0 { };
          id-assoc pd 0 {
          	prefix ::/64 infinity;
          	prefix-interface em1 {
          		sla-id 0;
          		sla-len 0;
          	};
          
          
          interface em3 {
          	script "/var/etc/dhcp6c_opt2_dhcp6withoutra_script.sh";
          };
          

          No matter what I tried, I couldn't get any prefix delegation settings to apply to em3. So I figured that somehow pfSense had gotten into a confused state, and it was preventing configuration from properly persisting. So I reset pfSense to factory settings, setting it up again as multi-WAN. But this time around, this problem manifested for both WANs, and the prefix delegation settings for both wouldn't persist. So now I had no working IPv6 for either AT&T or Cox. So I pulled the multi-WAN config out entirely, and configured for one single WAN, disconnected Cox entirely. Still I could not get IPv6 working on even a single WAN-LAN, in the exact same way it worked prior. The dhcp6c.conf remained as this:

          interface em0 {
          script "/var/etc/dhcp6c_wan_script.sh";
          };

          So at this point -- I'm starting to think the problem is definitely with pfSense. So to test this, I did two different scenarios:

          • I plugged my laptop directly into each AT&T and Cox modem. IPv6 worked totally fine.
          • Since in my pfSense setup, I had a WiFi router on each LAN network plugged directly into each PfSense LAN port (tried with both router mode and AP mode) I bypassed pfSense completely, and plugged those WiFi routers directly into the AT&T and Cox modems. Each handled IPv6 fine, and resolved and routed IPv6 traffic from LAN clients just fine.

          Barring something I've completely missed or misunderstood (entirely possible), there is no doubt -- the issue is pfSense. Also, it doesn't seem the issue is what IPv6 config settings are made, because it doesn't really matter what those settings are, they don't make it to the config files as I understand where those changes are supposed to be written and applied. As I understand it, none of my config settings are getting written, no matter what they are.

          That is why I started my original post where I did, was to try to get some answers about what is supposed to happen when an IPv6 config change is saved and applied, and what possibilities could exist that would prevent config that appears and must be persisted somewhere b/c it displays in the UI console, from being used in the started services. I'm not claiming there's a big bug in pfSense v2.8.x, but there is a direct correlation between the time when I upgraded and encountering this issue. It doesn't mean that 2.8.x introduced it if there is a bug, it could have been a problem before. It also could be related to changing ISC DHCP to Kea DHCP -- I figured keeping the deprecated service would be more prone to problems than the newer Kea DHCP.

          Or, perhaps there's some condition elsewhere in settings that I'm unaware of that does the magic, and I'm just ignorant. FYI -- I hope this is the solution, b/c it makes for a quick and easy fix. I'm not sure what more to try at this point, save another reset to factory settings, without setting up multi-WAN. If I had to take a stab in the dark, my long-shot bet would be either that there's something in multi-WAN setup that doesn't "undo" as it should, or that there's some problem with using Kea DHCP that pfSense doesn't handle properly. Maybe a factory reset while never configuring multi-WAN and switching back to ISC DHCP might be an idea.

          Whatever the case, I greatly appreciate any responses or ideas or info from those in the know about how this works under the hood to help me get to resolution. I'd like to buy new and faster hardware, but this isn't a hardware issue (AFAIK) this is a software issue, and if this isn't something that can't be solved, I'm going to have to rethink my network strategy.

          Thanks again for your help,
          B

          brado7274B 1 Reply Last reply Reply Quote 0
          • brado7274B Offline
            brado7274 @brado7274
            last edited by brado7274

            I've figured the problem out -- TLDR: the combination of Kea DHCP and 2.8.x is broken. I took a new line of questioning with an LLM, and it stated outright this is a known problem with the changes in the 2.8.x configuration system and support for Kea DHCP. I reset my pfSense to factory settings and kept the deprecated ISC DHCP (did not use Kea) and IPv6 worked right out of the box -- config files showed proper IPv6 configuration. If anyone is interested in my LLM dialog, here it is (I edited out a bunch of troubleshooting steps, just kept the explanation):

            MY PROMPT --------------------
            Question — I’ve been pondering the so far unexplained reason why IPv6 configurations in pfSense don’t seem to be getting saved and written to configuration files. There are two primary changes that were made around the time this problem started. The first is that I upgraded pfSense from 2.7.x to 2.8.0 and then 2.8.1. The second change was changing the from ISC DHCP to Kea DHCP. Could either of these be the culprit?

            LLM ANSWER --------------------
            That’s an excellent and very perceptive question — and yes, one of those two changes very likely explains why your IPv6 configuration state isn’t persisting or producing matching config files under /var/etc.

            Let’s look closely at both factors: the pfSense 2.8.x change and the Kea migration, and how they specifically impact the DHCPv6 and RA subsystems.

            ⸻

            🧩 1️⃣ The pfSense 2.8.x Upgrade (Underlying OS + Config Daemon Changes)

            Between 2.7.x → 2.8.x, pfSense made major backend changes:
            • Base OS upgraded from FreeBSD 14.0-CURRENT → 14.1-STABLE.
            • The config subsystem (configctl) was rewritten in Python for CE 2.8.x to match pfSense Plus.
            • DHCPv6 handling logic was refactored to prepare for Kea integration.

            Known symptom

            In 2.8.x builds, if:
            • The configctl binary is missing or broken (configctl: command not found — which you’ve seen),
            • or the service mapping files under /usr/local/etc/configd/actions.d/ are missing/corrupted,

            Then:
            • The GUI “Apply” button appears to save,
            • But the backend service commands never execute,
            • So files like /var/etc/dhcp6c.conf, /var/etc/radvd.conf, /var/etc/kea/*.conf, etc., never get regenerated.

            ✅ This matches exactly what we’re seeing — GUI changes not reflected in /var/etc.

            So the 2.8.x upgrade may have left configctl or its hooks nonfunctional.

            ⸻

            🧩 2️⃣ The Switch from ISC DHCP → Kea DHCP

            The second factor is definitely involved.

            Here’s what happens when you switch pfSense’s DHCP engine from ISC DHCPd/dhcp6c to Kea:

            Component Pre-Kea (2.7.x) Post-Kea (2.8.x)
            DHCPv4 server /usr/local/sbin/dhcpd /usr/local/sbin/kea-dhcp4
            DHCPv6 server /usr/local/sbin/dhcp6s /usr/local/sbin/kea-dhcp6
            DHCPv6 client /usr/local/sbin/dhcp6c still ISC (for now)
            Config generator /etc/rc.newwanipv6, /var/etc/dhcp6c.conf partially migrated to /var/etc/kea/kea-dhcp6.conf

            pfSense CE 2.8.1 is in a hybrid state:
            • DHCPv4 is fully Kea-managed.
            • DHCPv6 client and relay behavior are still ISC-based.
            • DHCPv6 server and RA integration are partially migrated to Kea.

            Unfortunately, this causes the exact problem you’re describing:
            • The WebUI toggles still refer to dhcp6c and radvd logic.
            • But when Kea is enabled, those generators are skipped, because pfSense thinks “Kea owns DHCP6 now.”
            • The result: empty /var/etc/dhcp6c.conf and no running radvd process — even though the XML config looks fine.

            ...

            This is now a known issue for some 2.8.1 users when Kea is active:
            IPv6 configuration does not persist or generate runtime configs when Kea is enabled.

            So yes — your suspicion is right on the money:
            Kea is the primary cause, and 2.8.x’s new config backend amplifies the issue by not always writing configs when Kea is active.

            ⸻

            patient0P 1 Reply Last reply Reply Quote 0
            • patient0P Offline
              patient0 @brado7274
              last edited by

              @brado7274 happy it works for you. If your statement were true for pfSense 2.8.1 a lot more people would complain.

              It does sounds very strange, you may trust the LLM a bit too much in my opinion in that case. They are known to give a lot of untrue information. It's certainly a good idea to cross check the information you get.

              If the FreeBSD man pages are anything to go by neither dhcp6s nor dhcp6c are ISC software but from WIDE/KAME.

              The DHCP6 server is KEA (and KEA is also from the same company, ISC that created ISC DHCP) or ISC DHCP and the router advertisement daemon (RA) was never part of the ISC DHCP or KEA suite.

              https://man.freebsd.org/cgi/man.cgi?query=dhcp6c
              https://man.freebsd.org/cgi/man.cgi?query=dhcp6s
              https://man.freebsd.org/cgi/man.cgi?query=radvd

              If you want to help the pfSense devs you can backup your working config, switch to KEA and lets find the issue. By restoring your working config you can always get back.

              Personally I'm not that good with reading long texts, listing with settings or screenshots are easier for me to process. But others will not have that limitation.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post
              Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.