|
1 | | -{ |
2 | | - config, |
3 | | - ... |
4 | | -}: |
| 1 | +{ config, ... }: |
5 | 2 | let |
6 | 3 | atticdAddr = config.containerAddresses.atticd.container; |
7 | | - tailscale = config.services.tailscale.package; |
8 | | - tailscaleDomain = "seminar.border-saurolophus.ts.net"; |
9 | | - certDir = "/var/lib/tailscale-cert"; |
10 | | - certFile = "${certDir}/${tailscaleDomain}.crt"; |
11 | | - keyFile = "${certDir}/${tailscaleDomain}.key"; |
12 | 4 | in |
13 | 5 | { |
14 | 6 | services.caddy = { |
15 | 7 | enable = true; |
16 | 8 | email = "ncaq@ncaq.net"; |
17 | | - # tailnet内からのアクセス用。 |
18 | | - # 分かり易さのためCaddyがまとめてリクエストを管理します。 |
19 | | - virtualHosts."${tailscaleDomain}".extraConfig = '' |
20 | | - tls ${certFile} ${keyFile} |
21 | | - handle_path /nix/cache/* { |
22 | | - reverse_proxy http://${atticdAddr}:8080 |
23 | | - } |
24 | | - redir /nix/cache /nix/cache/ |
25 | | - ''; |
26 | | - # Tailscale Funnelからのリクエストを受けるリバースプロキシ。 |
27 | | - # Tailscale Funnelはlocalhostへの転送しかサポートしていないため、 |
28 | | - # コンテナへの転送をするためにCaddyでプロキシします。 |
| 9 | + # Tailscale Serve/Funnelからのリクエストを受けるリバースプロキシ。 |
| 10 | + # tailscaledがTLS終端を行い、ここにHTTPで転送します。 |
| 11 | + # tailnet内からのHTTPSアクセスもtailscaledが処理するため、 |
| 12 | + # Caddyが443をlistenする必要はありません。 |
29 | 13 | virtualHosts.":8080".extraConfig = '' |
30 | 14 | bind 127.0.0.1 |
31 | 15 | handle_path /nix/cache/* { |
|
34 | 18 | redir /nix/cache /nix/cache/ |
35 | 19 | ''; |
36 | 20 | }; |
37 | | - |
38 | | - # Tailscaleドメイン用のTLS証明書を取得・更新するサービス。 |
39 | | - # Caddyがtailnet内からのアクセスでもTLSを提供できるようにします。 |
40 | | - systemd.tmpfiles.rules = [ |
41 | | - "d ${certDir} 0750 caddy caddy -" |
42 | | - ]; |
43 | | - systemd.services.tailscale-cert-for-caddy = { |
44 | | - description = "Generate Tailscale TLS certificates for Caddy"; |
45 | | - requires = [ "tailscaled.service" ]; |
46 | | - after = [ "tailscaled.service" ]; |
47 | | - wantedBy = [ "multi-user.target" ]; |
48 | | - serviceConfig = { |
49 | | - Type = "oneshot"; |
50 | | - ExecStart = "${tailscale}/bin/tailscale cert --cert-file ${certFile} --key-file ${keyFile} ${tailscaleDomain}"; |
51 | | - RemainAfterExit = true; |
52 | | - User = "caddy"; |
53 | | - Group = "caddy"; |
54 | | - }; |
55 | | - }; |
56 | | - systemd.timers.tailscale-cert-for-caddy = { |
57 | | - description = "Weekly renewal of Tailscale TLS certificates"; |
58 | | - wantedBy = [ "timers.target" ]; |
59 | | - timerConfig = { |
60 | | - OnCalendar = "weekly"; |
61 | | - Persistent = true; |
62 | | - }; |
63 | | - }; |
64 | | - |
65 | | - systemd.services.caddy = { |
66 | | - wants = [ "tailscale-cert-for-caddy.service" ]; |
67 | | - after = [ "tailscale-cert-for-caddy.service" ]; |
68 | | - }; |
69 | 21 | } |
0 commit comments