1 { pkgs, lib, config, inputs, hostName, hosts, ... }:
3 domain = "sourcephile.fr";
4 domainID = lib.replaceStrings [ "." ] [ "_" ] domain;
5 inherit (config) networking;
6 inherit (config.services) knot;
9 services.knot.zones."${domain}" = {
13 address: 127.0.0.1@1053
15 - id: acl_localhost_acme_${domainID}
19 update-owner-match: equal
20 update-owner-name: [_acme-challenge, _acme-challenge.hut, _acme-challenge.code]
22 - id: acl_tsig_acme_${domainID}
26 update-owner-match: equal
27 update-owner-name: [_acme-challenge]
29 - id: acl_tsig_losurdo_${domainID}
30 key: losurdo_${domainID}
33 update-owner-match: equal
34 update-owner-name: [losurdo, lan.losurdo]
35 update-type: [A, AAAA]
45 serial-policy: increment
47 notify: secondary_gandi
49 acl: acl_localhost_acme_${domainID}
50 acl: acl_tsig_acme_${domainID}
51 acl: acl_tsig_losurdo_${domainID}
56 module: mod-dnsproxy/proxy_iodine
58 - domain: whoami4.${domain}
60 file: "${pkgs.writeText "whoami4.zone" ''
62 @ SOA ns root.${domain}. (
71 ns A ${hosts.mermet._module.args.ipv4}
74 # TODO: increase the TTL once things have settled down
79 ; SOA (Start Of Authority)
81 ${toString inputs.self.lastModified} ; Serial number
84 1000h ; Expire (1000h)
93 ns.whoami4 A ${hosts.mermet._module.args.ipv4}
96 @ A ${hosts.mermet._module.args.ipv4}
97 mermet A ${hosts.mermet._module.args.ipv4}
98 autoconfig A ${hosts.mermet._module.args.ipv4}
99 doc A ${hosts.mermet._module.args.ipv4}
100 git A ${hosts.mermet._module.args.ipv4}
101 imap A ${hosts.mermet._module.args.ipv4}
102 mail A ${hosts.mermet._module.args.ipv4}
103 mails A ${hosts.mermet._module.args.ipv4}
104 news A ${hosts.mermet._module.args.ipv4}
105 public-inbox A ${hosts.mermet._module.args.ipv4}
106 ns A ${hosts.mermet._module.args.ipv4}
107 pop A ${hosts.mermet._module.args.ipv4}
108 smtp A ${hosts.mermet._module.args.ipv4}
109 submission A ${hosts.mermet._module.args.ipv4}
110 www A ${hosts.mermet._module.args.ipv4}
111 lemoutona5pattes A ${hosts.mermet._module.args.ipv4}
112 covid19 A ${hosts.mermet._module.args.ipv4}
113 croc A ${hosts.mermet._module.args.ipv4}
114 stun A ${hosts.mermet._module.args.ipv4}
115 turn A ${hosts.mermet._module.args.ipv4}
116 whoami A ${hosts.mermet._module.args.ipv4}
117 code A ${hosts.mermet._module.args.ipv4}
118 builds.code A ${hosts.mermet._module.args.ipv4}
119 dispatch.code A ${hosts.mermet._module.args.ipv4}
120 git.code A ${hosts.mermet._module.args.ipv4}
121 hg.code A ${hosts.mermet._module.args.ipv4}
122 hub.code A ${hosts.mermet._module.args.ipv4}
123 lists.code A ${hosts.mermet._module.args.ipv4}
124 meta.code A ${hosts.mermet._module.args.ipv4}
125 man.code A ${hosts.mermet._module.args.ipv4}
126 pages.code A ${hosts.mermet._module.args.ipv4}
127 paste.code A ${hosts.mermet._module.args.ipv4}
128 todo.code A ${hosts.mermet._module.args.ipv4}
129 miniflux A ${hosts.mermet._module.args.ipv4}
131 ; CNAME (Canonical Name)
132 openconcerto CNAME losurdo
136 cryptpad CNAME losurdo
137 cryptpad-api CNAME losurdo
138 cryptpad-files CNAME losurdo
139 cryptpad-sandbox CNAME losurdo
141 freeciv CNAME losurdo
142 nix-serve CNAME losurdo
143 nix-extracache CNAME losurdo
144 nix-localcache CNAME lan.losurdo
146 builds.hut CNAME builds.code
147 dispatch.hut CNAME dispatch.code
148 git.hut CNAME git.code
150 hub.hut CNAME hub.code
151 lists.hut CNAME lists.code
152 meta.hut CNAME meta.code
153 man.hut CNAME man.code
154 pages.hut CNAME pages.code
155 paste.hut CNAME paste.code
156 todo.hut CNAME todo.code
159 ; DMARC (Domain-based Message Authentication, Reporting and Conformance)
160 _dmarc 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:root+dmarc+aggregate@sourcephile.fr; ruf=mailto:root+dmarc+forensic@sourcephile.fr"
162 ; SPF (Sender Policy Framework)
163 @ 3600 IN TXT "v=spf1 mx ip4:${hosts.mermet._module.args.ipv4} -all"
167 lists.code 1800 MX 5 mail
168 todo.code 1800 MX 5 mail
171 _git._tcp.git 18000 IN SRV 0 0 9418 git
172 _stun._udp 18000 IN SRV 0 5 3478 stun
173 _xmpp-client._tcp 18000 IN SRV 0 5 5222 xmpp
174 _xmpp-server._tcp 18000 IN SRV 0 5 5269 xmpp
175 _xmpp-server._tcp.salons 18000 IN SRV 0 5 5269 xmpp
177 ; CAA (Certificate Authority Authorization)
178 ; DOC: https://blog.qualys.com/ssllabs/2017/03/13/caa-mandated-by-cabrowser-forum
179 @ CAA 128 issue "letsencrypt.org"
184 "/run/credentials/knot.service/${domain}.acme.conf"
185 # Generated with: keymgr -t losurdo_${domainID}
186 "/run/credentials/knot.service/losurdo.conf"
189 systemd.services.knot = {
191 LoadCredentialEncrypted = [
192 "${domain}.acme.conf:${inputs.self}/hosts/${hostName}/knot/${domain}/acme.conf.cred"
193 "losurdo.conf:${inputs.self}/hosts/${hostName}/knot/${domain}/losurdo.conf.cred"
197 networking.nftables.ruleset = ''
200 set output-net-knot-ipv4 {
202 elements = { 217.70.177.40 }
204 set output-net-knot-ipv6 {
206 elements = { 2001:4b98:d:1::40 }
210 /* Useless since the zone is public
211 services.unbound.settings = {
214 stub-addr = "127.0.0.1@5353";