diff --git a/modules/clan/gw-router/default.nix b/modules/clan/gw-router/default.nix index c6474f6..2e2da78 100644 --- a/modules/clan/gw-router/default.nix +++ b/modules/clan/gw-router/default.nix @@ -304,6 +304,7 @@ imports = [ ./ipv6.nix ./firewall.nix + ./pppoe.nix ./crowdsec.nix ]; diff --git a/modules/clan/gw-router/dns-dhcp.nix b/modules/clan/gw-router/dns-dhcp.nix new file mode 100644 index 0000000..22ffb77 --- /dev/null +++ b/modules/clan/gw-router/dns-dhcp.nix @@ -0,0 +1,81 @@ +{ + roles.default.perInstance = { settings, ... }: { + nixosModule = + { + + lib, + ... + }: + let + dhcpVlans = lib.filterAttrs (_: vlan: vlan.dhcp.enable) settings.vlans; + in + { + services.kea.dhcp4 = { + enable = true; + settings = { + interfaces-config.interfaces = lib.mapAttrsToList (name: _: "vlan-${name}") dhcpVlans; + lease-database = { + type = "memfile"; + persist = true; + name = "/var/lib/kea/dhcp4.leases"; + }; + valid-lifetime = 86400; + subnet4 = lib.mapAttrsToList (name: vlan: { + id = vlan.id; + subnet = vlan.subnet; + interface = "vlan-${name}"; + valid-lifetime = vlan.dhcp.leaseTime; + pools = [ { pool = "${vlan.dhcp.pool.from} - ${vlan.dhcp.pool.to}"; } ]; + reservations = lib.mapAttrsToList (host: res: { + hostname = host; + hw-address = res.hwAddress; + ip-address = res.ipAddress; + }) vlan.dhcp.reservations; + option-data = [ + { + name = "routers"; + data = vlan.address; + } + { + name = "domain-name-servers"; + data = vlan.address; + } + ]; + }) dhcpVlans; + }; + }; + + services.blocky = { + enable = true; + settings = { + ports = { + dns = 53; + http = 4000; + }; + upstreams.groups.default = [ + "9.9.9.9" + "149.112.112.112" + "2620:fe::fe" + ]; + blocking = { + denylists.ads = [ + "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts" + ]; + clientGroupsBlock.default = [ "ads" ]; + }; + caching = { + minTime = "5m"; + prefetching = true; + }; + prometheus.enable = true; + }; + }; + + networking.nameservers = [ + "9.9.9.9" + "1.1.1.1" + ]; + + }; + }; +}