diff options
| -rw-r--r-- | hosts/vidhar/network/pppoe.nix | 141 | ||||
| -rw-r--r-- | hosts/vidhar/prometheus/default.nix | 9 |
2 files changed, 69 insertions, 81 deletions
diff --git a/hosts/vidhar/network/pppoe.nix b/hosts/vidhar/network/pppoe.nix index d17be349..7cdf3cb6 100644 --- a/hosts/vidhar/network/pppoe.nix +++ b/hosts/vidhar/network/pppoe.nix | |||
| @@ -4,48 +4,6 @@ with lib; | |||
| 4 | 4 | ||
| 5 | let | 5 | let |
| 6 | pppInterface = config.networking.pppInterface; | 6 | pppInterface = config.networking.pppInterface; |
| 7 | |||
| 8 | corerad-deprecated = pkgs.writers.writeBashBin "corerad-deprecated" '' | ||
| 9 | exec -- ${lib.getExe' config.systemd.package "systemd-run"} \ | ||
| 10 | --unit=corerad-deprecated@$(${lib.getExe' config.systemd.package "systemd-escape"} $1) \ | ||
| 11 | --property=AmbientCapabilities="CAP_NET_ADMIN CAP_NET_RAW" \ | ||
| 12 | --property=CapabilityBoundingSet="CAP_NET_ADMIN CAP_NET_RAW" \ | ||
| 13 | --property=DynamicUser=yes \ | ||
| 14 | --property=LimitNOFILE=1048576 \ | ||
| 15 | --property=LimitNPROC=512 \ | ||
| 16 | --property=NotifyAccess=main \ | ||
| 17 | --property=Type=notify \ | ||
| 18 | --property=RuntimeMaxSec=4h \ | ||
| 19 | ${pkgs.writers.writeBash "corerad-deprecated" '' | ||
| 20 | exec -- ${lib.getExe pkgs.corerad} -c=<(${pkgs.writers.writePython3 "corerad-config" { | ||
| 21 | libraries = with pkgs.python3Packages; [ toml ]; | ||
| 22 | flakeIgnore = [ "E124" "E121" ]; | ||
| 23 | } '' | ||
| 24 | import toml | ||
| 25 | import sys | ||
| 26 | import re | ||
| 27 | |||
| 28 | match = re.fullmatch(r'(?P<interface>[^/]+)/(?P<prefix>.+)', sys.argv[1]) | ||
| 29 | |||
| 30 | toml.dump({ | ||
| 31 | "interfaces": [ | ||
| 32 | { | ||
| 33 | "name": match.group("interface"), | ||
| 34 | "advertise": True, | ||
| 35 | "prefix": [ | ||
| 36 | { | ||
| 37 | "prefix": match.group("prefix"), | ||
| 38 | "preferred_lifetime": "1s", | ||
| 39 | "valid_lifetime": "14400s", | ||
| 40 | "deprecated": True, | ||
| 41 | }, | ||
| 42 | ], | ||
| 43 | }, | ||
| 44 | ], | ||
| 45 | }, sys.stdout) | ||
| 46 | ''} $@) | ||
| 47 | ''} $@ | ||
| 48 | ''; | ||
| 49 | in { | 7 | in { |
| 50 | options = { | 8 | options = { |
| 51 | networking.pppInterface = mkOption { | 9 | networking.pppInterface = mkOption { |
| @@ -148,33 +106,6 @@ in { | |||
| 148 | }; | 106 | }; |
| 149 | }; | 107 | }; |
| 150 | 108 | ||
| 151 | services.corerad = { | ||
| 152 | enable = true; | ||
| 153 | settings = { | ||
| 154 | interfaces = [ | ||
| 155 | { name = pppInterface; | ||
| 156 | monitor = true; | ||
| 157 | verbose = true; | ||
| 158 | } | ||
| 159 | { name = "lan"; | ||
| 160 | advertise = true; | ||
| 161 | verbose = true; | ||
| 162 | prefix = [{ prefix = "::/64"; }]; | ||
| 163 | route = [{ prefix = "::/0"; }]; | ||
| 164 | rdnss = [{ servers = ["::"]; }]; | ||
| 165 | dnssl = [{ domain_names = ["yggdrasil"]; }]; | ||
| 166 | # other_config = true; | ||
| 167 | } | ||
| 168 | ]; | ||
| 169 | |||
| 170 | debug = { | ||
| 171 | address = "localhost:9430"; | ||
| 172 | prometheus = true; | ||
| 173 | }; | ||
| 174 | }; | ||
| 175 | }; | ||
| 176 | environment.systemPackages = [ corerad-deprecated ]; | ||
| 177 | |||
| 178 | services.ndppd = { | 109 | services.ndppd = { |
| 179 | enable = true; | 110 | enable = true; |
| 180 | proxies = { | 111 | proxies = { |
| @@ -273,14 +204,78 @@ in { | |||
| 273 | RestartSec = "5"; | 204 | RestartSec = "5"; |
| 274 | }; | 205 | }; |
| 275 | }; | 206 | }; |
| 276 | systemd.services.corerad = { | 207 | systemd.services.radvd = { |
| 277 | wantedBy = [ "dhcpcd.service" ]; | 208 | wantedBy = [ "dhcpcd.service" "multi-user.target" ]; |
| 278 | bindsTo = [ "dhcpcd.service" ]; | 209 | bindsTo = [ "dhcpcd.service" ]; |
| 279 | after = [ "dhcpcd.service" ]; | 210 | after = [ "dhcpcd.service" "network.target" ]; |
| 280 | 211 | ||
| 281 | serviceConfig = { | 212 | serviceConfig = { |
| 282 | Restart = lib.mkForce "always"; | 213 | Restart = "always"; |
| 283 | RestartSec = "5"; | 214 | RestartSec = "5"; |
| 215 | DynamicUser = true; | ||
| 216 | AmbientCapabilities = ["CAP_NET_ADMIN" "CAP_NET_RAW"]; | ||
| 217 | CapabilityBoundingSet = ["CAP_NET_ADMIN" "CAP_NET_RAW"]; | ||
| 218 | RuntimeDirectory = "radvd"; | ||
| 219 | PIDFile = "$RUNTIME_DIRECTORY/radvd.pid"; | ||
| 220 | ExecStart = pkgs.writers.writePython3 "radvd-genconfig" { | ||
| 221 | libraries = with pkgs.python3Packages; [ jinja2 ]; | ||
| 222 | doCheck = false; | ||
| 223 | } '' | ||
| 224 | import os | ||
| 225 | from tempfile import NamedTemporaryFile | ||
| 226 | import subprocess | ||
| 227 | import json | ||
| 228 | import jinja2 | ||
| 229 | from pathlib import Path | ||
| 230 | from ipaddress import IPv6Network | ||
| 231 | |||
| 232 | |||
| 233 | def network_address(value, prefixlen): | ||
| 234 | return IPv6Network(value + "/" + str(prefixlen), strict=False).network_address | ||
| 235 | |||
| 236 | |||
| 237 | with subprocess.Popen(["${lib.getExe' pkgs.iproute2 "ip"}", "-j", "addr", "show", "dev", "lan"], stdout=subprocess.PIPE) as proc: | ||
| 238 | addresses = json.load(proc.stdout) | ||
| 239 | |||
| 240 | global_addresses = [ addr for addr in addresses[0]["addr_info"] if addr["family"] == "inet6" and addr["scope"] == "global" ] | ||
| 241 | |||
| 242 | if not global_addresses: | ||
| 243 | sys.exit(1) | ||
| 244 | |||
| 245 | with NamedTemporaryFile(mode='w', dir=os.environ["RUNTIME_DIRECTORY"], prefix="radvd.", suffix=".conf", delete=False) as fh: | ||
| 246 | config_file = fh.name | ||
| 247 | env = jinja2.Environment( | ||
| 248 | loader = jinja2.FileSystemLoader("${pkgs.writeTextDir "radvd.conf.jinja2" '' | ||
| 249 | interface lan { | ||
| 250 | IgnoreIfMissing off; | ||
| 251 | AdvSendAdvert on; | ||
| 252 | MaxRtrAdvInterval 240; | ||
| 253 | {% for addr in addrs %} | ||
| 254 | prefix {{addr["local"] | network_address(addr["prefixlen"])}}/{{addr["prefixlen"]}} { | ||
| 255 | AdvValidLifetime 86400; | ||
| 256 | AdvPreferredLifetime 300; | ||
| 257 | DeprecatePrefix on; | ||
| 258 | }; | ||
| 259 | route {{addr["local"] | network_address(56)}}/56 { | ||
| 260 | AdvRouteLifetime 300; | ||
| 261 | RemoveRoute on; | ||
| 262 | }; | ||
| 263 | RDNSS {{addr["local"]}} { | ||
| 264 | AdvRDNSSLifetime 300; | ||
| 265 | }; | ||
| 266 | {%- endfor %} | ||
| 267 | DNSSL yggdrasil {}; | ||
| 268 | }; | ||
| 269 | ''}"), | ||
| 270 | autoescape = False, | ||
| 271 | ) | ||
| 272 | env.filters["network_address"] = network_address | ||
| 273 | env.get_template("radvd.conf.jinja2").stream({ | ||
| 274 | "addrs": global_addresses, | ||
| 275 | }).dump(fh) | ||
| 276 | |||
| 277 | os.execv("${lib.getExe pkgs.radvd}", ["radvd", "-n", "-p", str(Path(os.environ["RUNTIME_DIRECTORY"]) / "radvd.pid"), "-d", "1", "-C", config_file]) | ||
| 278 | ''; | ||
| 284 | }; | 279 | }; |
| 285 | }; | 280 | }; |
| 286 | 281 | ||
diff --git a/hosts/vidhar/prometheus/default.nix b/hosts/vidhar/prometheus/default.nix index 125fd568..69992115 100644 --- a/hosts/vidhar/prometheus/default.nix +++ b/hosts/vidhar/prometheus/default.nix | |||
| @@ -64,7 +64,7 @@ in { | |||
| 64 | systemd = { | 64 | systemd = { |
| 65 | enable = true; | 65 | enable = true; |
| 66 | extraFlags = [ | 66 | extraFlags = [ |
| 67 | "--systemd.collector.unit-include=(dhcpcd|pppd-telekom|corerad|ndppd)\.service" | 67 | "--systemd.collector.unit-include=(dhcpcd|pppd-telekom|radvd|ndppd)\.service" |
| 68 | "--systemd.collector.enable-restart-count" | 68 | "--systemd.collector.enable-restart-count" |
| 69 | "--systemd.collector.enable-ip-accounting" | 69 | "--systemd.collector.enable-ip-accounting" |
| 70 | ]; | 70 | ]; |
| @@ -170,13 +170,6 @@ in { | |||
| 170 | relabel_configs = relabelHosts; | 170 | relabel_configs = relabelHosts; |
| 171 | scrape_interval = "1s"; | 171 | scrape_interval = "1s"; |
| 172 | } | 172 | } |
| 173 | { job_name = "corerad"; | ||
| 174 | static_configs = [ | ||
| 175 | { targets = ["localhost:9430"]; } | ||
| 176 | ]; | ||
| 177 | relabel_configs = relabelHosts; | ||
| 178 | scrape_interval = "1s"; | ||
| 179 | } | ||
| 180 | { job_name = "nftables"; | 173 | { job_name = "nftables"; |
| 181 | static_configs = [ | 174 | static_configs = [ |
| 182 | { targets = ["localhost:9901"]; } | 175 | { targets = ["localhost:9901"]; } |
