diff --git a/flake.lock b/flake.lock
index e7345fc..372528d 100644
--- a/flake.lock
+++ b/flake.lock
@@ -533,11 +533,11 @@
     },
     "nixpkgs_3": {
       "locked": {
-        "lastModified": 1742069588,
-        "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=",
+        "lastModified": 1742288794,
+        "narHash": "sha256-Txwa5uO+qpQXrNG4eumPSD+hHzzYi/CdaM80M9XRLCo=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5",
+        "rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42",
         "type": "github"
       },
       "original": {
diff --git a/hosts/astatine/configuration.nix b/hosts/astatine/configuration.nix
index bb19fa7..ea8cac3 100644
--- a/hosts/astatine/configuration.nix
+++ b/hosts/astatine/configuration.nix
@@ -4,34 +4,29 @@
   imports =
     [
       ./hardware-configuration.nix
-
-      ./ppp.nix
-      ./programs.nix
-      ./users.nix
     ];
 
+  profiles.clerie.network-fallback-dhcp.enable = true;
+
   boot.kernelParams = [ "console=ttyS0,115200n8" ];
 
-  # Use the GRUB 2 boot loader.
   boot.loader.grub.enable = true;
-  # boot.loader.grub.efiSupport = true;
-  # boot.loader.grub.efiInstallAsRemovable = true;
-  # boot.loader.efi.efiSysMountPoint = "/boot/efi";
-  # Define on which hard drive you want to install Grub.
-  boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only
+  boot.loader.grub.device = "/dev/sda";
   boot.loader.grub.extraConfig = "
     serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1
     terminal_input serial
     terminal_output serial
   ";
 
-  #networking.firewall.enable = false;
+  networking.useDHCP = false;
 
-  services.wg-clerie = {
-    enable = true;
-    ipv6s = [ "2a01:4f8:c0c:15f1::8108/128" ];
-    ipv4s = [ "10.20.30.108/32" ];
-  };
+  systemd.network.enable = true;
+
+  #services.wg-clerie = {
+  #  enable = true;
+  #  ipv6s = [ "2a01:4f8:c0c:15f1::8108/128" ];
+  #  ipv4s = [ "10.20.30.108/32" ];
+  #};
 
   clerie.monitoring = {
     enable = true;
diff --git a/hosts/astatine/ppp.nix b/hosts/astatine/ppp.nix
deleted file mode 100644
index 84d7b07..0000000
--- a/hosts/astatine/ppp.nix
+++ /dev/null
@@ -1,90 +0,0 @@
-{ pkgs, ... }:
-
-{
-  # Make space for VLAN header in containing ethernet segment
-  networking.interfaces."enp1s0".mtu = 1518;
-
-  ## DSL-Uplink
-  networking.vlans."enp1s0.7" = {
-    id = 7;
-    interface = "enp1s0";
-  };
-
-  services.pppd = {
-    enable = true;
-    peers.lns-test = {
-      config = ''
-        plugin pppoe.so enp1s0.7
-        user "criese#regiotest@bsa-vdsl"
-        ifname ppp-lns-test
-        persist
-        maxfail 0
-        holdoff 5
-        noipdefault
-        lcp-echo-interval 20
-        lcp-echo-failure 3
-        hide-password
-        nodefaultroute
-        +ipv6
-        debug
-      '';
-    };
-  };
-
-  /*
-  networking.interfaces.lo.useDHCP = true;
-  networking.interfaces.ppp-lns-test.useDHCP = true;
-
-  networking.dhcpcd = {
-    enable = true;
-    extraConfig = ''
-      interface ppp-lns-test
-        ipv6rs
-        ia_pd 0 lo/0
-    '';
-  };*/
-
-  environment.etc."ppp/ip-up" = {
-    text = ''
-      #! ${pkgs.runtimeShell} -e
-
-      ${pkgs.iproute2}/bin/ip route flush table 20001 || true
-      ${pkgs.iproute2}/bin/ip route add default dev ppp-lns-test table 20001
-    '';
-    mode = "555";
-  };
-  environment.etc."ppp/ip-down" = {
-    text = ''
-      #! ${pkgs.runtimeShell} -e
-
-      ${pkgs.iproute2}/bin/ip route flush table 20001 || true
-    '';
-    mode = "555";
-  };
-  environment.etc."ppp/ipv6-up" = {
-    text = ''
-      #! ${pkgs.runtimeShell} -e
-
-      ${pkgs.iproute2}/bin/ip -6 route flush table 20001 || true
-      ${pkgs.iproute2}/bin/ip -6 route add default dev ppp-lns-test table 20001
-    '';
-    mode = "555";
-  };
-  environment.etc."ppp/ipv6-down" = {
-    text = ''
-      #! ${pkgs.runtimeShell} -e
-
-      ${pkgs.iproute2}/bin/ip -6 route flush table 20001 || true
-    '';
-    mode = "555";
-  };
-
-  petabyte.policyrouting = {
-    enable = true;
-    rules4 = [
-      { rule = "from 212.218.16.237/32 lookup 20001"; prio = 19000; }
-      { rule = "from 212.218.16.237/32  unreachable"; prio = 19001; }
-    ];
-  };
-
-}
diff --git a/hosts/astatine/programs.nix b/hosts/astatine/programs.nix
deleted file mode 100644
index f1e97de..0000000
--- a/hosts/astatine/programs.nix
+++ /dev/null
@@ -1,9 +0,0 @@
-{ pkgs, ... }:
-
-{
-
-  environment.systemPackages = with pkgs; [
-    tcpdump # for remote wireshark
-  ];
-
-}
diff --git a/hosts/astatine/users.nix b/hosts/astatine/users.nix
deleted file mode 100644
index 3ccf4ad..0000000
--- a/hosts/astatine/users.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{ ... }:
-
-{
-  users.users.criese-nethinks = {
-    extraGroups = [
-      "wheel"
-    ];
-  };
-
-}
diff --git a/hosts/beryllium/configuration.nix b/hosts/beryllium/configuration.nix
index d053311..15235da 100644
--- a/hosts/beryllium/configuration.nix
+++ b/hosts/beryllium/configuration.nix
@@ -6,6 +6,8 @@
       ./hardware-configuration.nix
     ];
 
+  profiles.clerie.network-fallback-dhcp.enable = true;
+
   boot.kernelParams = [ "console=ttyS0,115200n8" ];
 
   boot.loader.grub.enable = true;
@@ -18,42 +20,45 @@
 
   networking.hostName = "beryllium";
 
+  networking.useDHCP = false;
+  systemd.network.enable = true;
+
   networking.firewall.enable = false;
 
-  networking.iproute2.enable = true;
-  networking.iproute2.rttablesExtraConfig = ''
-    200 wg-clerie
-  '';
+  #networking.iproute2.enable = true;
+  #networking.iproute2.rttablesExtraConfig = ''
+  #  200 wg-clerie
+  #'';
 
-  petabyte.policyrouting = {
-    enable = true;
-    rules6 = [
-      { rule = "from 2a01:4f8:c0c:15f1::8107/128 lookup wg-clerie"; prio = 20000; }
-      { rule = "from 2a01:4f8:c0c:15f1::8107/128 unreachable"; prio = 20001; }
-    ];
-    rules4 = [
-      { rule = "from 10.20.30.107/32 lookup wg-clerie"; prio = 20000; }
-      { rule = "from 10.20.30.107/32 unreachable"; prio = 20001; }
-    ];
-  };
+  #petabyte.policyrouting = {
+  #  enable = true;
+  #  rules6 = [
+  #    { rule = "from 2a01:4f8:c0c:15f1::8107/128 lookup wg-clerie"; prio = 20000; }
+  #    { rule = "from 2a01:4f8:c0c:15f1::8107/128 unreachable"; prio = 20001; }
+  #  ];
+  #  rules4 = [
+  #    { rule = "from 10.20.30.107/32 lookup wg-clerie"; prio = 20000; }
+  #    { rule = "from 10.20.30.107/32 unreachable"; prio = 20001; }
+  #  ];
+  #};
 
 
-  networking.wireguard.enable = true;
-  networking.wireguard.interfaces = {
-    wg-clerie = {
-      ips = [ "2a01:4f8:c0c:15f1::8107/128" "10.20.30.107/32" ];
-      table = "wg-clerie";
-      peers = [
-        {
-          endpoint = "vpn.clerie.de:51820";
-          persistentKeepalive = 25;
-          allowedIPs = [ "0.0.0.0/0" "::/0" "10.20.30.0/24" "2a01:4f8:c0c:15f1::/113" ];
-          publicKey = "2p1Jqs3bkXbXHFWE6vp1yxHIFoUaZQEARS2nJzbkuBA=";
-        }
-      ];
-      privateKeyFile = "/var/src/secrets/wireguard/wg-clerie";
-    };
-  };
+  #networking.wireguard.enable = true;
+  #networking.wireguard.interfaces = {
+  #  wg-clerie = {
+  #    ips = [ "2a01:4f8:c0c:15f1::8107/128" "10.20.30.107/32" ];
+  #    table = "wg-clerie";
+  #    peers = [
+  #      {
+  #        endpoint = "vpn.clerie.de:51820";
+  #        persistentKeepalive = 25;
+  #        allowedIPs = [ "0.0.0.0/0" "::/0" "10.20.30.0/24" "2a01:4f8:c0c:15f1::/113" ];
+  #        publicKey = "2p1Jqs3bkXbXHFWE6vp1yxHIFoUaZQEARS2nJzbkuBA=";
+  #      }
+  #    ];
+  #    privateKeyFile = "/var/src/secrets/wireguard/wg-clerie";
+  #  };
+  #};
 
   clerie.monitoring = {
     enable = true;
diff --git a/hosts/tungsten/configuration.nix b/hosts/tungsten/configuration.nix
index d9b954e..f1028db 100644
--- a/hosts/tungsten/configuration.nix
+++ b/hosts/tungsten/configuration.nix
@@ -6,6 +6,8 @@
       ./hardware-configuration.nix
     ];
 
+  profiles.clerie.network-fallback-dhcp.enable = true;
+
   boot.kernelParams = [ "console=ttyS0,115200n8" ];
 
   boot.loader.grub.enable = true;
@@ -16,14 +18,16 @@
     terminal_output serial
   ";
 
+  networking.useDHCP = false;
+  systemd.network.enable = true;
 
   networking.hostName = "tungsten";
 
-  services.wg-clerie = {
-    enable = true;
-    ipv6s = [ "2a01:4f8:c0c:15f1::8112/128" ];
-    ipv4s = [ "10.20.30.112/32" ];
-  };
+  #services.wg-clerie = {
+  #  enable = true;
+  #  ipv6s = [ "2a01:4f8:c0c:15f1::8112/128" ];
+  #  ipv4s = [ "10.20.30.112/32" ];
+  #};
 
   clerie.monitoring = {
     enable = true;
diff --git a/profiles/default.nix b/profiles/default.nix
index 6192023..04aecfb 100644
--- a/profiles/default.nix
+++ b/profiles/default.nix
@@ -8,6 +8,7 @@
     ./hetzner-cloud
     ./mercury-vm
     ./netcup
+    ./network-fallback-dhcp
   ];
 
 }
diff --git a/profiles/network-fallback-dhcp/default.nix b/profiles/network-fallback-dhcp/default.nix
new file mode 100644
index 0000000..1d1402c
--- /dev/null
+++ b/profiles/network-fallback-dhcp/default.nix
@@ -0,0 +1,22 @@
+{ config, lib, ... }:
+
+with lib;
+
+{
+
+  options.profiles.clerie.network-fallback-dhcp = {
+    enable = mkEnableOption "Profile for systemd-network falling back to DHCP on all interfaces";
+  };
+
+  config = mkIf config.profiles.clerie.network-fallback-dhcp.enable {
+
+    systemd.network.wait-online.anyInterface = true;
+
+    systemd.network.networks."90-lan-dhcp" = {
+      matchConfig.Type = "ether";
+      networkConfig.DHCP = true;
+      linkConfig.RequiredForOnline = "routable";
+    };
+
+  };
+}