1{
2 name = "adguardhome";
3
4 nodes = {
5 nullConf = { ... }: { services.adguardhome = { enable = true; }; };
6
7 emptyConf = { lib, ... }: {
8 services.adguardhome = {
9 enable = true;
10 };
11 };
12
13 declarativeConf = { ... }: {
14 services.adguardhome = {
15 enable = true;
16
17 mutableSettings = false;
18 settings = {
19 schema_version = 0;
20 dns = {
21 bind_host = "0.0.0.0";
22 bootstrap_dns = "127.0.0.1";
23 };
24 };
25 };
26 };
27
28 mixedConf = { ... }: {
29 services.adguardhome = {
30 enable = true;
31
32 mutableSettings = true;
33 settings = {
34 schema_version = 0;
35 dns = {
36 bind_host = "0.0.0.0";
37 bootstrap_dns = "127.0.0.1";
38 };
39 };
40 };
41 };
42
43 dhcpConf = { lib, ... }: {
44 virtualisation.vlans = [ 1 ];
45
46 networking = {
47 # Configure static IP for DHCP server
48 useDHCP = false;
49 interfaces."eth1" = lib.mkForce {
50 useDHCP = false;
51 ipv4 = {
52 addresses = [{
53 address = "10.0.10.1";
54 prefixLength = 24;
55 }];
56
57 routes = [{
58 address = "10.0.10.0";
59 prefixLength = 24;
60 }];
61 };
62 };
63
64 # Required for DHCP
65 firewall.allowedUDPPorts = [ 67 68 ];
66 };
67
68 services.adguardhome = {
69 enable = true;
70 allowDHCP = true;
71 mutableSettings = false;
72 settings = {
73 schema_version = 0;
74 dns = {
75 bind_host = "0.0.0.0";
76 bootstrap_dns = "127.0.0.1";
77 };
78 dhcp = {
79 # This implicitly enables CAP_NET_RAW
80 enabled = true;
81 interface_name = "eth1";
82 local_domain_name = "lan";
83 dhcpv4 = {
84 gateway_ip = "10.0.10.1";
85 range_start = "10.0.10.100";
86 range_end = "10.0.10.101";
87 subnet_mask = "255.255.255.0";
88 };
89 };
90 };
91 };
92 };
93
94 client = { lib, ... }: {
95 virtualisation.vlans = [ 1 ];
96 networking = {
97 interfaces.eth1 = {
98 useDHCP = true;
99 ipv4.addresses = lib.mkForce [ ];
100 };
101 };
102 };
103 };
104
105 testScript = ''
106 with subtest("Minimal (settings = null) config test"):
107 nullConf.wait_for_unit("adguardhome.service")
108
109 with subtest("Default config test"):
110 emptyConf.wait_for_unit("adguardhome.service")
111 emptyConf.wait_for_open_port(3000)
112
113 with subtest("Declarative config test, DNS will be reachable"):
114 declarativeConf.wait_for_unit("adguardhome.service")
115 declarativeConf.wait_for_open_port(53)
116 declarativeConf.wait_for_open_port(3000)
117
118 with subtest("Mixed config test, check whether merging works"):
119 mixedConf.wait_for_unit("adguardhome.service")
120 mixedConf.wait_for_open_port(53)
121 mixedConf.wait_for_open_port(3000)
122 # Test whether merging works properly, even if nothing is changed
123 mixedConf.systemctl("restart adguardhome.service")
124 mixedConf.wait_for_unit("adguardhome.service")
125 mixedConf.wait_for_open_port(3000)
126
127 with subtest("Testing successful DHCP start"):
128 dhcpConf.wait_for_unit("adguardhome.service")
129 client.wait_for_unit("network-online.target")
130 # Test IP assignment via DHCP
131 dhcpConf.wait_until_succeeds("ping -c 5 10.0.10.100")
132 # Test hostname resolution over DHCP-provided DNS
133 dhcpConf.wait_until_succeeds("ping -c 5 client.lan")
134 '';
135}