From cf5ac890b9fbf9f23715dd340a4ce7f2ba3074ce Mon Sep 17 00:00:00 2001 From: kurogeek Date: Mon, 3 Aug 2026 10:39:50 +0700 Subject: [PATCH] mob next [ci-skip] [ci skip] [skip ci] lastFile:modules/clan/gw-router/default.nix --- modules/clan/gw-router/default.nix | 14 +++++++- modules/clan/gw-router/pppoe.nix | 56 ++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 modules/clan/gw-router/pppoe.nix diff --git a/modules/clan/gw-router/default.nix b/modules/clan/gw-router/default.nix index f5d823c..462093c 100644 --- a/modules/clan/gw-router/default.nix +++ b/modules/clan/gw-router/default.nix @@ -7,7 +7,7 @@ manifest.categories = [ "System" ]; roles.default = { - description = "A router role for managing a node as a router"; + description = "A default role for the router node"; interface = { lib, config, ... }: @@ -31,7 +31,19 @@ in { + environment.systemPackages = with pkgs; [ + tcpdump + mtr + ethtool + conntrack-tools + knot-dns + iftop + librespeed-cli + ]; + }; }; }; + + imports = [ ./pppoe.nix ]; } diff --git a/modules/clan/gw-router/pppoe.nix b/modules/clan/gw-router/pppoe.nix new file mode 100644 index 0000000..2abd082 --- /dev/null +++ b/modules/clan/gw-router/pppoe.nix @@ -0,0 +1,56 @@ +{ + roles.default.perInstance = { settings, ... }: { + nixosModule = + { config, ... }: + let + creds = config.clan.core.vars.generators.gw-router; + in + { + clan.core.vars.generators.gw-router = { + prompts.pppoe-username = { + description = "PPPoE username (from the ISP)"; + type = "hidden"; + }; + prompts.pppoe-password = { + description = "PPPoE password (from the ISP)"; + type = "hidden"; + }; + files."pppoe-username".secret = true; + files."pppoe-password".secret = true; + script = '' + user="$(cat "$prompts"/pppoe-username)" + pass="$(cat "$prompts"/pppoe-password)" + printf 'user "%s"\n' "$user" > "$out"/pppoe-username + printf '"%s" * "%s"\n' "$user" "$pass" > "$out"/pppoe-password + ''; + }; + + services.pppd = { + enable = true; + peers.wan = { + autostart = true; + config = '' + plugin pppoe.so ${settings.wan.pppInterface} + ifname ppp0 + file ${creds.files."pppoe-username".path} + noipdefault + defaultroute + noauth + hide-password + persist + maxfail 0 + holdoff 5 + lcp-echo-interval 15 + lcp-echo-failure 3 + +ipv6 + mtu 1492 + mru 1492 + ''; + }; + }; + + environment.etc."ppp/chap-secrets".source = creds.files."pppoe-password".path; + environment.etc."ppp/pap-secrets".source = creds.files."pppoe-password".path; + }; + }; +}