{ config, pkgs, lib, ... }: let adblockLocalZones = pkgs.stdenv.mkDerivation { name = "unbound-zones-adblock"; src = (pkgs.fetchFromGitHub { owner = "StevenBlack"; repo = "hosts"; rev = "3.12.21"; sha256 = "Yzr6PY/zqQE+AHH0J6ioHTsgkikM+dz4aelbGpQJa1s="; } + "/hosts"); phases = [ "installPhase" ]; installPhase = '' ${pkgs.gawk}/bin/awk '{sub(/\r$/,"")} {sub(/^127\.0\.0\.1/,"0.0.0.0")} BEGIN { OFS = "" } NF == 2 && $1 == "0.0.0.0" { print "local-zone: \"", $2, "\" static"}' $src | tr '[:upper:]' '[:lower:]' | sort -u > $out ''; }; mossnet = "192.168.1.240"; # The local lan-ip for box wg-mossnet = "10.0.69.4"; # The wireguard ip for box mossnet-hosts = [ "mossnet.lan" "headphones.mossnet.lan" "links.mossnet.lan" "read.mossnet.lan" "stats.mossnet.lan" "music.mossnet.lan" "tasks.mossnet.lan" "file.mossnet.lan" "books.mossnet.lan" "fin.mossnet.lan" "paper.mossnet.lan" "cal.mossnet.lan" "archive.mossnet.lan" "headphones.mossnet.lan" "transmission.mossnet.lan" "tracks.mossnet.lan" "grasp.mossnet.lan" "photos.mossnet.lan" "pod.mossnet.lan" "mast.mossnet.lan" ]; in { services.unbound = { enable = true; settings = { server = { include = "${adblockLocalZones}"; prefetch = "yes"; # private-address = "10.0.69.0/8"; # private-address = "192.168.1.0/24"; cache-min-ttl = 0; serve-expired = "yes"; interface = [ "0.0.0.0" ]; access-control = [ "127.0.0.0/8 allow" "192.168.1.0/24 allow" "10.0.69.0/24 allow" ]; access-control-view = "10.0.69.0/24 wireguard"; # so-reuseport = "yes"; tls-upstream = "yes"; domain-insecure = "mossnet.lan"; local-zone = ''"mossnet.lan." redirect''; local-data = ''"mossnet.lan. IN A ${mossnet}"''; }; forward-zone = [{ name = "."; forward-addr = [ "45.90.28.0#6939b9.dns.nextdns.io" "1.1.1.1@853#cloudflare-dns.com" ]; # non-tls # forward-addr = ["45.90.30.49" "45.90.28.49" "1.1.1.1" "8.8.8.8"] }]; view = { name = "wireguard"; local-zone = ''"mossnet.lan." redirect''; local-data = ''"mossnet.lan. IN A ${wg-mossnet}"''; }; }; }; # With unbound we're doing wildcard redirects, so we don't need that anymore # networking.hosts = { # mossnet = mossnet-hosts; # }; networking.firewall.allowedTCPPorts = [ 53 ]; networking.firewall.allowedUDPPorts = [ 53 ]; }