old
1{den, ...}: {
2 den.hosts.tribios = {
3 address = {
4 ipv4.tailscale = "100.127.6.231";
5 ipv6.tailscale = "fd7a:115c:a1e0:675d:6820:4fa0:fddc:a59";
6 };
7 settings.services.proxy.mihomo = {
8 autoStart = true;
9 tailscaleWebControl = true;
10 interfaces = {
11 wan = "enP3p49s0";
12 lan = ["br-lan"];
13 };
14 };
15 };
16
17 den.aspects.tribios = {
18 includes = [
19 den.aspects.services.proxy.mihomo
20 den.aspects.services.proxy.mihomo.tproxy
21 ];
22
23 nixos = {
24 systemd.services.mihomo.after = ["systemd-networkd.service"];
25
26 boot.kernel.sysctl = {
27 "net.ipv4.ip_forward" = 1;
28 "net.ipv4.conf.all.send_redirects" = 0;
29 "net.ipv4.conf.default.send_redirects" = 0;
30 "net.ipv4.conf.br-lan.send_redirects" = 0;
31 "net.ipv6.conf.all.forwarding" = 1;
32 "net.ipv6.conf.br-lan.forwarding" = 1;
33 };
34
35 # Tribios' network interfaces:
36 # wan: enP3p49s0 (2.5Gbps)
37 # lan: enP4p65s0 (2.5Gbps), end0 (1.0Gbps)
38 # Automatically configurated by nixos-factor.
39 networking = {
40 useNetworkd = true;
41 bridges = {
42 br-lan = {
43 interfaces = ["enP4p65s0" "end0"];
44 };
45 };
46 interfaces = {
47 br-lan = {
48 useDHCP = false;
49 ipv4.addresses = [
50 {
51 address = "192.168.52.1";
52 prefixLength = 24;
53 }
54 ];
55 };
56 };
57
58 firewall = {
59 enable = true;
60 trustedInterfaces = ["br-lan"];
61 };
62
63 nat = {
64 enable = true;
65 internalInterfaces = ["br-lan"];
66 externalInterface = "enP3p49s0";
67 };
68 };
69
70 # NAT-PMP for Tailscale NAT traversal.
71 # Tailscale clients behind this router will auto-request
72 # endpoint-independent port mappings, enabling direct
73 # connections from the company network (192.168.100.x).
74 services.miniupnpd = {
75 enable = true;
76 externalInterface = "enP3p49s0";
77 internalIPs = ["br-lan"];
78 upnp = false;
79 natpmp = true;
80 };
81
82 systemd.services.miniupnpd.after = ["systemd-networkd.service"];
83
84 services.kea.dhcp4 = {
85 enable = true;
86 settings = {
87 interfaces-config.interfaces = ["br-lan"];
88 lease-database = {
89 name = "/var/lib/kea/dhcp4.leases";
90 persist = true;
91 type = "memfile";
92 };
93 valid-lifetime = 4000;
94 subnet4 = [
95 {
96 id = 1;
97 subnet = "192.168.52.0/24";
98 pools = [{pool = "192.168.52.2 - 192.168.52.200";}];
99 option-data = [
100 {
101 name = "routers";
102 data = "192.168.52.1";
103 }
104 {
105 name = "domain-name-servers";
106 data = "223.5.5.5, 119.29.29.29";
107 }
108 ];
109 }
110 ];
111 };
112 };
113 };
114 };
115}