# IPv6 on the PPPoE uplink: run networkd's DHCPv6 client on ppp0 to obtain a # delegated prefix; each vlan-* interface (default.nix) carves a /64 out of it # via DHCPPrefixDelegation and announces it to clients with SLAAC. { config, lib, ... }: let cfg = config.cnx.router; in { config = lib.mkIf cfg.enable { systemd.network.networks."45-ppp0" = { matchConfig.Name = "ppp0"; networkConfig = { DHCP = "ipv6"; # pppd owns the v4 address/route on this link; don't let networkd # tear them down. KeepConfiguration = "static"; # Default v6 route comes from the ISP's RA when they send one. IPv6AcceptRA = true; }; # Many PPPoE ISPs never send an RA with the M flag; solicit regardless. dhcpV6Config.WithoutRA = "solicit"; linkConfig.RequiredForOnline = "no"; }; boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = lib.mkDefault 1; }; }