2024-08-04 13:47:36 +03:00
|
|
|
{ config, lib, pkgs, ... }:
|
2023-12-23 01:26:18 +03:00
|
|
|
let
|
2024-07-17 12:56:22 +03:00
|
|
|
inherit (import ./hardware/networks.nix) interfaces domain hasIPv6;
|
2023-12-23 01:26:18 +03:00
|
|
|
in {
|
|
|
|
services.resolved.enable = true;
|
|
|
|
networking = {
|
2024-07-17 12:56:22 +03:00
|
|
|
enableIPv6 = lib.mkForce hasIPv6;
|
|
|
|
usePredictableInterfaceNames = lib.mkForce true;
|
2023-12-23 01:26:18 +03:00
|
|
|
useDHCP = false;
|
|
|
|
dhcpcd.enable = false;
|
|
|
|
nftables.enable = false; # incompatible with tailscale and docker
|
|
|
|
hostName = config.device;
|
|
|
|
domain = domain;
|
|
|
|
};
|
|
|
|
|
|
|
|
systemd.network = with interfaces.main'; {
|
|
|
|
enable = true;
|
|
|
|
wait-online.ignoredInterfaces = [ "lo" ];
|
|
|
|
networks = {
|
|
|
|
"40-${ifname}" = {
|
|
|
|
matchConfig.Name = ifname;
|
|
|
|
linkConfig.RequiredForOnline = "enslaved";
|
|
|
|
networkConfig.Bridge = bridgeName;
|
|
|
|
networkConfig.DHCP = "no";
|
|
|
|
};
|
|
|
|
"60-${bridgeName}" = {
|
|
|
|
matchConfig.Name = bridgeName;
|
|
|
|
address = [
|
|
|
|
IPv4.address
|
|
|
|
"192.168.0.1/24"
|
2024-07-17 12:56:22 +03:00
|
|
|
] ++ lib.optionals hasIPv6 [
|
|
|
|
IPv6.address
|
2023-12-23 01:26:18 +03:00
|
|
|
"fc00::1/64"
|
|
|
|
];
|
|
|
|
linkConfig.RequiredForOnline = "routable";
|
|
|
|
networkConfig = {
|
2024-01-12 23:57:57 +03:00
|
|
|
DHCPServer = true;
|
2023-12-23 01:26:18 +03:00
|
|
|
IPForward = true;
|
2024-01-12 23:57:57 +03:00
|
|
|
# IPv6PrivacyExtensions = "kernel";
|
2024-07-17 12:56:22 +03:00
|
|
|
DNS = IPv4.dns ++ lib.optionals hasIPv6 IPv6.dns;
|
2023-12-23 01:26:18 +03:00
|
|
|
};
|
|
|
|
routes = [{
|
|
|
|
routeConfig.Gateway = IPv4.gateway;
|
|
|
|
routeConfig.GatewayOnLink = true;
|
2024-07-17 12:56:22 +03:00
|
|
|
}] ++ lib.optionals hasIPv6 [{
|
2023-12-23 01:26:18 +03:00
|
|
|
routeConfig.Gateway = IPv6.gateway;
|
|
|
|
routeConfig.GatewayOnLink = true;
|
2024-01-12 23:57:57 +03:00
|
|
|
}];
|
|
|
|
dhcpServerConfig = {
|
|
|
|
ServerAddress = "192.168.0.1/24";
|
|
|
|
PoolOffset = 100;
|
|
|
|
PoolSize = 100;
|
|
|
|
};
|
2023-12-23 01:26:18 +03:00
|
|
|
};
|
|
|
|
};
|
|
|
|
netdevs = {
|
|
|
|
"60-${bridgeName}" = {
|
|
|
|
netdevConfig = {
|
|
|
|
Kind = "bridge";
|
|
|
|
Name = bridgeName;
|
2024-01-12 23:57:57 +03:00
|
|
|
MACAddress = mac;
|
2023-12-23 01:26:18 +03:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
2024-08-04 13:47:36 +03:00
|
|
|
|
|
|
|
system.activationScripts.udp-gro-forwarding = {
|
|
|
|
text = with interfaces.main'; ''
|
2024-09-11 18:03:05 +03:00
|
|
|
${pkgs.ethtool}/bin/ethtool -K ${bridgeName} rx-udp-gro-forwarding on rx-gro-list off
|
2024-08-04 13:47:36 +03:00
|
|
|
'';
|
|
|
|
};
|
2023-12-23 01:26:18 +03:00
|
|
|
}
|