aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.settings.sh3
-rw-r--r--ansible/inventory28
-rwxr-xr-xbin/asdf23
-rw-r--r--bin/requirements.txt1
-rw-r--r--terraform/dns/trygvis.tf14
-rw-r--r--terraform/unifi-controller/README.md9
-rw-r--r--terraform/unifi-controller/main.tf9
-rw-r--r--terraform/unifi-controller/mongo.tf23
-rw-r--r--terraform/unifi-controller/sops.yml34
-rw-r--r--terraform/unifi-controller/unifi.tf13
-rw-r--r--tnet/bird-deploy.yml26
-rw-r--r--tnet/bird-gen.yml25
-rw-r--r--tnet/bird-install.yml11
-rw-r--r--tnet/files/akili/bird-tnet-pre.conf7
-rw-r--r--tnet/files/akili/bird-tnet.conf38
-rw-r--r--tnet/files/astyanax/bird-tnet-pre.conf7
-rw-r--r--tnet/files/astyanax/bird-tnet.conf38
-rw-r--r--tnet/files/hash/bird-tnet-pre.conf7
-rw-r--r--tnet/files/hash/bird-tnet.conf56
-rw-r--r--tnet/files/knot/bird-tnet-pre.conf7
-rw-r--r--tnet/files/knot/bird-tnet.conf49
-rw-r--r--tnet/files/lhn2pi/bird-tnet-pre.conf7
-rw-r--r--tnet/files/lhn2pi/bird-tnet.conf38
-rw-r--r--tnet/files/node1/bird-tnet-pre.conf7
-rw-r--r--tnet/files/node1/bird-tnet.conf38
-rw-r--r--tnet/files/node2/bird-tnet-pre.conf7
-rw-r--r--tnet/files/node2/bird-tnet.conf38
-rw-r--r--tnet/host_vars/akili/bird.yml3
-rw-r--r--tnet/host_vars/akili/wg.yml7
-rw-r--r--tnet/host_vars/astyanax/bird.yml3
-rw-r--r--tnet/host_vars/astyanax/wg.yml7
-rw-r--r--tnet/host_vars/hash/bird.yml9
-rw-r--r--tnet/host_vars/hash/wg.yml21
-rw-r--r--tnet/host_vars/knot/bird.yml7
-rw-r--r--tnet/host_vars/knot/wg.yml28
-rw-r--r--tnet/host_vars/kv24ix/bird.yml2
-rw-r--r--tnet/host_vars/kv24ix/wg.yml2
-rw-r--r--tnet/host_vars/lhn2ix/bird.yml2
-rw-r--r--tnet/host_vars/lhn2ix/wg.yml4
-rw-r--r--tnet/host_vars/lhn2pi/bird.yml3
-rw-r--r--tnet/host_vars/lhn2pi/wg.yml8
-rw-r--r--tnet/host_vars/node1/bird.yml3
-rw-r--r--tnet/host_vars/node1/wg.yml7
-rw-r--r--tnet/host_vars/node2/bird.yml3
-rw-r--r--tnet/host_vars/node2/wg.yml7
-rw-r--r--tnet/keys/wg-akili-hash.pub1
-rw-r--r--tnet/keys/wg-akili-hash.sops.key28
-rw-r--r--tnet/keys/wg-akili-knot.pub1
-rw-r--r--tnet/keys/wg-akili-knot.sops.key28
-rw-r--r--tnet/keys/wg-astyanax-hash.pub1
-rw-r--r--tnet/keys/wg-astyanax-hash.sops.key28
-rw-r--r--tnet/keys/wg-astyanax-knot.pub1
-rw-r--r--tnet/keys/wg-astyanax-knot.sops.key28
-rw-r--r--tnet/keys/wg-hash-akili.pub1
-rw-r--r--tnet/keys/wg-hash-akili.sops.key28
-rw-r--r--tnet/keys/wg-hash-astyanax.pub1
-rw-r--r--tnet/keys/wg-hash-astyanax.sops.key28
-rw-r--r--tnet/keys/wg-hash-knot.pub1
-rw-r--r--tnet/keys/wg-hash-knot.sops.key28
-rw-r--r--tnet/keys/wg-hash-lhn2pi.pub1
-rw-r--r--tnet/keys/wg-hash-lhn2pi.sops.key28
-rw-r--r--tnet/keys/wg-hash-node1.pub1
-rw-r--r--tnet/keys/wg-hash-node1.sops.key28
-rw-r--r--tnet/keys/wg-hash-node2.pub1
-rw-r--r--tnet/keys/wg-hash-node2.sops.key28
-rw-r--r--tnet/keys/wg-knot-akili.pub1
-rw-r--r--tnet/keys/wg-knot-akili.sops.key28
-rw-r--r--tnet/keys/wg-knot-astyanax.pub1
-rw-r--r--tnet/keys/wg-knot-astyanax.sops.key28
-rw-r--r--tnet/keys/wg-knot-hash.pub1
-rw-r--r--tnet/keys/wg-knot-hash.sops.key28
-rw-r--r--tnet/keys/wg-knot-kv24ix.pub1
-rw-r--r--tnet/keys/wg-knot-kv24ix.sops.key28
-rw-r--r--tnet/keys/wg-knot-lhn2ix.pub1
-rw-r--r--tnet/keys/wg-knot-lhn2ix.sops.key28
-rw-r--r--tnet/keys/wg-knot-lhn2pi.pub1
-rw-r--r--tnet/keys/wg-knot-lhn2pi.sops.key28
-rw-r--r--tnet/keys/wg-knot-node1.pub1
-rw-r--r--tnet/keys/wg-knot-node1.sops.key28
-rw-r--r--tnet/keys/wg-knot-node2.pub1
-rw-r--r--tnet/keys/wg-knot-node2.sops.key28
-rw-r--r--tnet/keys/wg-kv24ix-knot.pub1
-rw-r--r--tnet/keys/wg-kv24ix-knot.sops.key28
-rw-r--r--tnet/keys/wg-lhn2ix-knot.pub1
-rw-r--r--tnet/keys/wg-lhn2ix-knot.sops.key28
-rw-r--r--tnet/keys/wg-lhn2pi-hash.pub1
-rw-r--r--tnet/keys/wg-lhn2pi-hash.sops.key28
-rw-r--r--tnet/keys/wg-lhn2pi-knot.pub1
-rw-r--r--tnet/keys/wg-lhn2pi-knot.sops.key28
-rw-r--r--tnet/keys/wg-node1-hash.pub1
-rw-r--r--tnet/keys/wg-node1-hash.sops.key28
-rw-r--r--tnet/keys/wg-node1-knot.pub1
-rw-r--r--tnet/keys/wg-node1-knot.sops.key28
-rw-r--r--tnet/keys/wg-node2-hash.pub1
-rw-r--r--tnet/keys/wg-node2-hash.sops.key28
-rw-r--r--tnet/keys/wg-node2-knot.pub1
-rw-r--r--tnet/keys/wg-node2-knot.sops.key28
-rw-r--r--tnet/templates/bird-tnet-pre.conf.j27
-rw-r--r--tnet/templates/bird-tnet.conf.j239
-rw-r--r--tnet/wg-keys-genkey.yml26
-rw-r--r--tnet/wg-keys.yml12
-rw-r--r--tnet/wg-links-link.yml53
-rw-r--r--tnet/wg-links.yml12
103 files changed, 1569 insertions, 23 deletions
diff --git a/.settings.sh b/.settings.sh
index 020dcbd..38b5e20 100644
--- a/.settings.sh
+++ b/.settings.sh
@@ -8,6 +8,9 @@ export ANSIBLE_CONFIG=$basedir/ansible/ansible.cfg
echo "Adding bin/ to path"
PATH="$basedir/bin:$PATH"
+#echo "Adding bin/.tmp/asdf-data/shims/ to path"
+#PATH="$basedir/bin/.tmp/asdf-data/shims:$PATH"
+
if [[ ! -r .vault ]]
then
echo "Missing .vault"
diff --git a/ansible/inventory b/ansible/inventory
index 17f3ec7..4e2d0b2 100644
--- a/ansible/inventory
+++ b/ansible/inventory
@@ -41,9 +41,15 @@ all:
biwia:
ansible_host: biwia.vpn.trygvis.io
lhn2pi:
+ ansible_host: lhn2pi.vpn.trygvis.io
lhn2ix:
kv24ix:
+ node1:
+ ansible_host: 9859f51e-1e3e-4c05-a826-b7fbe18d91be.pub.instances.scw.cloud
+ node2:
+ ansible_host: 927624a8-7824-444d-903d-8507eb1e0669.pub.instances.scw.cloud
+
zh2569.rsync.net:
ansible_user: zh2569
@@ -163,4 +169,26 @@ all:
hash:
knot:
+ tnet:
+ hosts:
+ akili:
+ astyanax:
+ hash:
+ knot:
+ kv24ix:
+ lhn2ix:
+ lhn2pi:
+ node1:
+ node2:
+
+ tnet_bird:
+ hosts:
+ akili:
+ astyanax:
+ hash:
+ knot:
+ lhn2pi:
+ node1:
+ node2:
+
# vim: set filetype=yaml:
diff --git a/bin/asdf b/bin/asdf
new file mode 100755
index 0000000..aa36c16
--- /dev/null
+++ b/bin/asdf
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+set -euo pipefail
+
+v="0.14.0"
+
+basedir="${0%/*}"
+self="${0##*/}"
+
+url="https://github.com/asdf-vm/asdf/archive/refs/tags/v$v.tar.gz"
+dir="$basedir/.tmp"
+bin="$dir/$self-$v/bin/$self"
+
+if [ ! -x "$bin" ]
+then
+ rm -rf "$dir"
+ mkdir -p "${dir}"
+ curl -L "$url" | tar xfz - -C $dir
+fi
+
+export ASDF_DATA_DIR="$dir/asdf-data"
+
+exec "$bin" "${@}"
diff --git a/bin/requirements.txt b/bin/requirements.txt
index a3669d5..8a3e290 100644
--- a/bin/requirements.txt
+++ b/bin/requirements.txt
@@ -1 +1,2 @@
ansible==8.4.0
+gns3fy==0.8.0
diff --git a/terraform/dns/trygvis.tf b/terraform/dns/trygvis.tf
index 659d56a..01b6cec 100644
--- a/terraform/dns/trygvis.tf
+++ b/terraform/dns/trygvis.tf
@@ -89,6 +89,13 @@ resource "linode_domain_record" "mw" {
target = "trygvis.io"
}
+resource "linode_domain_record" "unifi" {
+ domain_id = linode_domain.root.id
+ name = "unifi"
+ record_type = "CNAME"
+ target = "trygvis.io"
+}
+
# Aliases for vs.trygvis.io
resource "linode_domain_record" "nextcloud" {
domain_id = linode_domain.root.id
@@ -110,10 +117,3 @@ resource "linode_domain_record" "owncloud" {
record_type = "CNAME"
target = "vs.trygvis.io"
}
-
-resource "linode_domain_record" "unifi" {
- domain_id = linode_domain.root.id
- name = "unifi"
- record_type = "CNAME"
- target = "vs.trygvis.io"
-}
diff --git a/terraform/unifi-controller/README.md b/terraform/unifi-controller/README.md
new file mode 100644
index 0000000..66f0fb0
--- /dev/null
+++ b/terraform/unifi-controller/README.md
@@ -0,0 +1,9 @@
+# Mongo init
+
+After the mongo database has been started the first time, execute the output of:
+
+ terraform output -json|jq -r .mongo_init_js.value
+
+in a mongo shell:
+
+ docker exec -it unifi-mongo mongo
diff --git a/terraform/unifi-controller/main.tf b/terraform/unifi-controller/main.tf
index 915685a..f5f7b0a 100644
--- a/terraform/unifi-controller/main.tf
+++ b/terraform/unifi-controller/main.tf
@@ -28,14 +28,15 @@ provider "docker" {
locals {
domain_name = "unifi.vpn.trygvis.io"
- docker_image_controller = "lscr.io/linuxserver/unifi-controller:8.0.24"
- docker_image_mongo = "mongo:3.6"
+ docker_image_controller = "lscr.io/linuxserver/unifi-controller:8.0.24-mongoless"
+ docker_image_mongo = "mongo:7.0"
+ mongo_database = "unifi"
mongo_username = "unifi"
- mongo_password = data.sops_file_entry.mongo_password
+ mongo_password = data.sops_file_entry.mongo_password.data
}
data "sops_file_entry" "mongo_password" {
- source_file = "../../sops.yml"
+ source_file = "sops.yml"
data_key = "mongo_password"
}
diff --git a/terraform/unifi-controller/mongo.tf b/terraform/unifi-controller/mongo.tf
index 747b3b1..98b4e36 100644
--- a/terraform/unifi-controller/mongo.tf
+++ b/terraform/unifi-controller/mongo.tf
@@ -1,5 +1,5 @@
-resource "docker_network" "unifi-mongo" {
- name = "unifi-mongo"
+resource "docker_network" "unifi" {
+ name = "unifi"
}
data "docker_registry_image" "mongo" {
@@ -21,7 +21,7 @@ resource "docker_container" "unifi-mongo" {
hostname = "unifi-mongo"
networks_advanced {
- name = docker_network.unifi-mongo.name
+ name = docker_network.unifi.name
}
volumes {
@@ -29,3 +29,20 @@ resource "docker_container" "unifi-mongo" {
container_path = "/data/db"
}
}
+
+output "mongo_init_js" {
+ sensitive = true
+ value = <<-EOF
+ db.getSiblingDB("${local.mongo_database}").
+ createUser({
+ user: "${local.mongo_database}",
+ pwd: "${local.mongo_password}",
+ roles: [{role: "dbOwner", db: "${local.mongo_database}"}]});
+
+ db.getSiblingDB("${local.mongo_database}_stat").
+ createUser({
+ user: "${local.mongo_database}",
+ pwd: "${local.mongo_password}",
+ roles: [{role: "dbOwner", db: "${local.mongo_database}_stat"}]});
+ EOF
+}
diff --git a/terraform/unifi-controller/sops.yml b/terraform/unifi-controller/sops.yml
index daf5231..ce815b2 100644
--- a/terraform/unifi-controller/sops.yml
+++ b/terraform/unifi-controller/sops.yml
@@ -1,4 +1,4 @@
-mongo_password: ENC[AES256_GCM,data:4GK/9eCD/tuhDTgAnvn4nim6zB8q476MG4SYzp4SuxcTK0uUdPKdMj0uWAUySYnFI+hNINSMm5ujZ6PXUdLxE2X04t52Dtm5DoVXgZTrP8WHXz2RHGrVElJ6LABVji3mmh4+Ug==,iv:5j89FCkB9sr85tRzo9qeVUjrqvgZOEihBstXNWgbTOA=,tag:V27pawBT6NqX3V0iAeu7NA==,type:str]
+mongo_password: ENC[AES256_GCM,data:BdrzXzqlYf0LO0ru361m/ZIqErFT/yRl+2pdsmFZNYyrgrZN+3q9aZoMCSva1E6w4xGbMmjG6WSgQlf+yRIlb6k9q0yFSPE9gbfhESILrSuO2McVjSO0KCK7+nI3b9nlb2Lp2A==,iv:yNNWskWG2lAZZOp8HgWomAgFg1BdXQ1zH/SmMnQVSkQ=,tag:OxpdBIr47OUpEqj+hmyKMw==,type:str]
sops:
kms: []
gcp_kms: []
@@ -8,14 +8,32 @@ sops:
- recipient: age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
- YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlRFptMlVVRWFQbjlwb2tj
- NmtEV29HMm82SjdKTDE4N2pSOUpvRzBOcDAwCnBOcnlKS0dCQjRxc0VzY3pEVyt1
- K2hRZGpqL3p1ejZJM2xyTDFocnFSMW8KLS0tIEx0cVpOUHVrZTErTXBGKyt2Rmx5
- Q3NYajIxUFNwUDZ6bW1XT1NWak8vaVkK0IoF+EoQA7AAXmfVICs8wIxJrhlTDKkc
- cRc2o70ARquivCo/SuYg1f/097BhOucm1lLXfCATvzi5GvMwqXvcTg==
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPbUlUNnlVVDZBMGFyT2cy
+ djZMbjVUa2UxRlRzNzVMNmNWQkFRSWlselc4CjV5dU5QUGtrTWpqL2k2L29wSjRI
+ ak9ZL2hDb3F0UHFkZDVmV2lxVjVRVG8KLS0tIGIyNDF3cTRRTTZ4R1oyVHU5YUVJ
+ Y09WN2EvVDZwTExybms2UmJEN0h1OUkKJLGAUByueidNKz9LrRLUzkAhT3+mczz6
+ 10JVToEgm5+N95zEXBiZtaNftvGYU6eVqHtwFyVm3lbO7VBYpvhRNQ==
-----END AGE ENCRYPTED FILE-----
- lastmodified: "2024-05-20T04:48:47Z"
- mac: ENC[AES256_GCM,data:BbX2yJsTcmgoY1lL+isa85eBN8OK4BM7wZsuwAJtOsxMDEHYmzJiF4AjKnSoTWqdCLy2PhpUPfLmsunfODhfoiCmfjqr69WHP+fktPK9RRaa+bBGGXAc6/GBWBuvlhmgvy0LKRa9DrCPLOF0lwrEvmur89THCUu6HW60aguO3E0=,iv:C3VFYOdMGh8M4KbS1K0zq8cwmsrjZFkih74use0omdQ=,tag:arLY4XlgJ3Z8fFdXeHBAHw==,type:str]
+ - recipient: age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvMnVTcno3emdKRWUvL25j
+ MjEzN0pMUktPcjU3QW5CeEtYL2dFS1ZMdW13CjJVT0FOWTBUOWVCa0tEZE4yM1lx
+ d2F0TjAvaDBvcmdkR0pHV0c5KzRqdzgKLS0tIDR6TThRdWtMSzdkL2FHKytCNU8r
+ WHc3OWM0b0lSMGRUM2NnNmdocnNiRVkKko4z88f5PzmVzxfB8Zi/zZhccvxqYqym
+ nvd7uja8Ght+DpT/stYIrYyu0lyBOTVirwTIaEHr5bKUY1d+TwwP/g==
+ -----END AGE ENCRYPTED FILE-----
+ - recipient: age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4a29XdEZkdkZuU0M3MGpU
+ YkJRbjdWOWpmdjQyUHY5VDBqUTRYUk9LR21BCkxjOUU4Mmg4NXZwVnRJYWp4NnZr
+ a0xUS3pQTjJNam5qQXhhZUkxaW5nVWsKLS0tIFJ3eFJxbytPQkZJKzF2MGorVmlr
+ LzVLTE1qZkp0YUhFT3h2dktuMnJGZE0KnirLt0k2g2XqqIKIu6nNNIoZMF25Ir7E
+ EFjv/k/kKVLPesrdtfwKRCLQqtQjV0j1qtqPOKoUDcrE3zxs4r4gaA==
+ -----END AGE ENCRYPTED FILE-----
+ lastmodified: "2024-05-20T07:04:41Z"
+ mac: ENC[AES256_GCM,data:hjDc7d8/8dwEb23Xb16WBsoEOE7hepyLYz2n2DW6aKT14RLOAxB85kP8Ibwb0tC4DqwNkCqOWJ6WxhHrZA2IKE4co6bsD8uc6atM2EgRm6Xctgr2lqvYMr7WtPFKIQF+/K7358i7vf/tyvtdvNINVuBXVra5LcxVTSVyUIb1m+w=,iv:VKDovzX5RO9RIjm85JlfsNE5sd+TVYRh8FbFJHIZpgw=,tag:tbdoa4Cow5jYEVvP9LXEiQ==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.7.3
diff --git a/terraform/unifi-controller/unifi.tf b/terraform/unifi-controller/unifi.tf
index 699628b..8e6c7d7 100644
--- a/terraform/unifi-controller/unifi.tf
+++ b/terraform/unifi-controller/unifi.tf
@@ -12,7 +12,7 @@ resource "docker_image" "unifi-controller" {
}
resource "docker_volume" "unifi-controller" {
- name = "unifi-controller"
+ name = "unifi-controller-new"
}
resource "docker_container" "unifi-controller" {
@@ -26,6 +26,10 @@ resource "docker_container" "unifi-controller" {
name = data.docker_network.traefik.name
}
+ networks_advanced {
+ name = docker_network.unifi.name
+ }
+
dynamic "ports" {
for_each = [
# Taken from https://fleet.linuxserver.io/image?name=linuxserver/unifi-controller
@@ -65,6 +69,7 @@ resource "docker_container" "unifi-controller" {
{ label = "traefik.http.routers.unifi-controller.tls.certresolver", value = "linode" },
{ label = "traefik.http.services.unifi-controller.loadbalancer.server.port", value = "8443" },
{ label = "traefik.http.services.unifi-controller.loadbalancer.server.scheme", value = "https" },
+ { label = "traefik.docker.network", value = "traefik" },
# { label = "traefik.http.services.unifi-controller.loadbalancer.passHostHeader", value = "false" },
]
content {
@@ -76,6 +81,12 @@ resource "docker_container" "unifi-controller" {
env = [
"PUID=1000",
"PGID=1000",
+ "TZ=Europe/Oslo",
"MEM_LIMIT=default",
+ "MONGO_USER=${local.mongo_username}",
+ "MONGO_PASS=${local.mongo_password}",
+ "MONGO_HOST=${docker_container.unifi-mongo.hostname}",
+ "MONGO_PORT=27017",
+ "MONGO_DBNAME=${local.mongo_database}",
]
}
diff --git a/tnet/bird-deploy.yml b/tnet/bird-deploy.yml
new file mode 100644
index 0000000..ed7cecf
--- /dev/null
+++ b/tnet/bird-deploy.yml
@@ -0,0 +1,26 @@
+- hosts: tnet_bird
+ tasks:
+ - become: yes
+ copy:
+ dest: "/etc/bird/{{ item }}"
+ src: "{{ inventory_hostname }}/{{ item }}"
+ owner: bird
+ group: bird
+ mode: 0640
+ register: bird_conf
+ loop:
+ - bird-tnet-pre.conf
+ - bird-tnet.conf
+
+ - systemd:
+ state: reloaded
+ service: bird
+ when: bird_conf.changed
+ become: yes
+ handlers:
+ - name: systemctl reload bird
+ become: yes
+ systemd:
+ name: bird
+ state: reloaded
+
diff --git a/tnet/bird-gen.yml b/tnet/bird-gen.yml
new file mode 100644
index 0000000..9fa71b1
--- /dev/null
+++ b/tnet/bird-gen.yml
@@ -0,0 +1,25 @@
+- name: Remove old configuration
+ hosts: localhost
+ connection: local
+ gather_facts: False
+ tasks:
+ - file:
+ path: files
+ state: absent
+ changed_when: False
+
+- name: Generate Bird configuration
+ hosts: tnet_bird
+ connection: local
+ gather_facts: False
+ tasks:
+ - file:
+ path: files/{{ inventory_hostname }}
+ state: directory
+ changed_when: False
+ - template:
+ src: "{{ item }}.j2"
+ dest: "files/{{ inventory_hostname }}/{{ item }}"
+ loop:
+ - bird-tnet-pre.conf
+ - bird-tnet.conf
diff --git a/tnet/bird-install.yml b/tnet/bird-install.yml
new file mode 100644
index 0000000..49aed92
--- /dev/null
+++ b/tnet/bird-install.yml
@@ -0,0 +1,11 @@
+- hosts:
+ - tnet_bird
+ tasks:
+ - name: Install bird2
+ become: yes
+ vars:
+ items:
+ - bird2
+ apt:
+ install_recommends: no
+ name: "{{ items }}"
diff --git a/tnet/files/akili/bird-tnet-pre.conf b/tnet/files/akili/bird-tnet-pre.conf
new file mode 100644
index 0000000..7994dfe
--- /dev/null
+++ b/tnet/files/akili/bird-tnet-pre.conf
@@ -0,0 +1,7 @@
+define tnet = fdb1:4242:3538::/48;
+define tnet_router = fdb1:4242:3538:ffff::/64;
+
+function is_tnet() # -> bool
+{
+ return net ~ tnet && ! (net ~ tnet_router);
+}
diff --git a/tnet/files/akili/bird-tnet.conf b/tnet/files/akili/bird-tnet.conf
new file mode 100644
index 0000000..f9b9d08
--- /dev/null
+++ b/tnet/files/akili/bird-tnet.conf
@@ -0,0 +1,38 @@
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ password "trygvis";
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ print proto, ": import accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": import reject, reason=not tnet"; reject;
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ print proto, ": export accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": export reject, reason=not tnet"; reject;
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fdb1:4242:3538:ffff:ca85:f812:3935:5fba;
+ interface "tnet-hash";
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fdb1:4242:3538:ffff:59d7:cf77:8b5d:761a;
+ interface "tnet-knot";
+}
diff --git a/tnet/files/astyanax/bird-tnet-pre.conf b/tnet/files/astyanax/bird-tnet-pre.conf
new file mode 100644
index 0000000..7994dfe
--- /dev/null
+++ b/tnet/files/astyanax/bird-tnet-pre.conf
@@ -0,0 +1,7 @@
+define tnet = fdb1:4242:3538::/48;
+define tnet_router = fdb1:4242:3538:ffff::/64;
+
+function is_tnet() # -> bool
+{
+ return net ~ tnet && ! (net ~ tnet_router);
+}
diff --git a/tnet/files/astyanax/bird-tnet.conf b/tnet/files/astyanax/bird-tnet.conf
new file mode 100644
index 0000000..d697e54
--- /dev/null
+++ b/tnet/files/astyanax/bird-tnet.conf
@@ -0,0 +1,38 @@
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ password "trygvis";
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ print proto, ": import accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": import reject, reason=not tnet"; reject;
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ print proto, ": export accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": export reject, reason=not tnet"; reject;
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fe80:a0fd:89e4:42c6:f617:7398:abf4:b516;
+ interface "tnet-hash";
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fe80:6728:53fc:fc81:40b3:9beb:8336:ba56;
+ interface "tnet-knot";
+}
diff --git a/tnet/files/hash/bird-tnet-pre.conf b/tnet/files/hash/bird-tnet-pre.conf
new file mode 100644
index 0000000..7994dfe
--- /dev/null
+++ b/tnet/files/hash/bird-tnet-pre.conf
@@ -0,0 +1,7 @@
+define tnet = fdb1:4242:3538::/48;
+define tnet_router = fdb1:4242:3538:ffff::/64;
+
+function is_tnet() # -> bool
+{
+ return net ~ tnet && ! (net ~ tnet_router);
+}
diff --git a/tnet/files/hash/bird-tnet.conf b/tnet/files/hash/bird-tnet.conf
new file mode 100644
index 0000000..16ce2cc
--- /dev/null
+++ b/tnet/files/hash/bird-tnet.conf
@@ -0,0 +1,56 @@
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ password "trygvis";
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ print proto, ": import accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": import reject, reason=not tnet"; reject;
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ print proto, ": export accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": export reject, reason=not tnet"; reject;
+ };
+ };
+}
+
+protocol bgp tnet_astyanax from tnet_tpl {
+ neighbor fe80:a0fd:89e4:42c6:f617:7398:abf4:b517;
+ interface "tnet-astyanax";
+
+ rr client;
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fe80:3b20:4cb0:5315:22a:c7de:a45b:8a7c;
+ interface "tnet-knot";
+
+ rr client;
+}
+
+protocol bgp tnet_node1 from tnet_tpl {
+ neighbor fe80:a026:6ec2:b356:21c5:b51:22b9:a1df;
+ interface "tnet-node1";
+
+ rr client;
+}
+
+protocol bgp tnet_node2 from tnet_tpl {
+ neighbor fe80:a7a6:c1a8:c261:232e:7d67:fc27:7c8d;
+ interface "tnet-node2";
+
+ rr client;
+}
diff --git a/tnet/files/knot/bird-tnet-pre.conf b/tnet/files/knot/bird-tnet-pre.conf
new file mode 100644
index 0000000..7994dfe
--- /dev/null
+++ b/tnet/files/knot/bird-tnet-pre.conf
@@ -0,0 +1,7 @@
+define tnet = fdb1:4242:3538::/48;
+define tnet_router = fdb1:4242:3538:ffff::/64;
+
+function is_tnet() # -> bool
+{
+ return net ~ tnet && ! (net ~ tnet_router);
+}
diff --git a/tnet/files/knot/bird-tnet.conf b/tnet/files/knot/bird-tnet.conf
new file mode 100644
index 0000000..fcecc19
--- /dev/null
+++ b/tnet/files/knot/bird-tnet.conf
@@ -0,0 +1,49 @@
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ password "trygvis";
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ print proto, ": import accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": import reject, reason=not tnet"; reject;
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ print proto, ": export accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": export reject, reason=not tnet"; reject;
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fe80:3b20:4cb0:5315:22a:c7de:a45b:8a7d;
+ interface "tnet-hash";
+
+ rr client;
+}
+
+protocol bgp tnet_node1 from tnet_tpl {
+ neighbor fe80:58eb:3930:1815:2a6d:8918:70c9:96f3;
+ interface "tnet-node1";
+
+ rr client;
+}
+
+protocol bgp tnet_node2 from tnet_tpl {
+ neighbor fe80:9dd8:abac:cf05:aea3:dc03:4c74:32db;
+ interface "tnet-node2";
+
+ rr client;
+}
diff --git a/tnet/files/lhn2pi/bird-tnet-pre.conf b/tnet/files/lhn2pi/bird-tnet-pre.conf
new file mode 100644
index 0000000..7994dfe
--- /dev/null
+++ b/tnet/files/lhn2pi/bird-tnet-pre.conf
@@ -0,0 +1,7 @@
+define tnet = fdb1:4242:3538::/48;
+define tnet_router = fdb1:4242:3538:ffff::/64;
+
+function is_tnet() # -> bool
+{
+ return net ~ tnet && ! (net ~ tnet_router);
+}
diff --git a/tnet/files/lhn2pi/bird-tnet.conf b/tnet/files/lhn2pi/bird-tnet.conf
new file mode 100644
index 0000000..864ad0b
--- /dev/null
+++ b/tnet/files/lhn2pi/bird-tnet.conf
@@ -0,0 +1,38 @@
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ password "trygvis";
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ print proto, ": import accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": import reject, reason=not tnet"; reject;
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ print proto, ": export accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": export reject, reason=not tnet"; reject;
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fe80:6195:1d43:9655:35f7:9dba:798c:26b8;
+ interface "tnet-hash";
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fdb1:4242:3538:ffff:374e:2c7d:319e:e526;
+ interface "tnet-knot";
+}
diff --git a/tnet/files/node1/bird-tnet-pre.conf b/tnet/files/node1/bird-tnet-pre.conf
new file mode 100644
index 0000000..7994dfe
--- /dev/null
+++ b/tnet/files/node1/bird-tnet-pre.conf
@@ -0,0 +1,7 @@
+define tnet = fdb1:4242:3538::/48;
+define tnet_router = fdb1:4242:3538:ffff::/64;
+
+function is_tnet() # -> bool
+{
+ return net ~ tnet && ! (net ~ tnet_router);
+}
diff --git a/tnet/files/node1/bird-tnet.conf b/tnet/files/node1/bird-tnet.conf
new file mode 100644
index 0000000..88bd6f8
--- /dev/null
+++ b/tnet/files/node1/bird-tnet.conf
@@ -0,0 +1,38 @@
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ password "trygvis";
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ print proto, ": import accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": import reject, reason=not tnet"; reject;
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ print proto, ": export accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": export reject, reason=not tnet"; reject;
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fe80:a026:6ec2:b356:21c5:b51:22b9:a1de;
+ interface "tnet-hash";
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fe80:58eb:3930:1815:2a6d:8918:70c9:96f2;
+ interface "tnet-knot";
+}
diff --git a/tnet/files/node2/bird-tnet-pre.conf b/tnet/files/node2/bird-tnet-pre.conf
new file mode 100644
index 0000000..7994dfe
--- /dev/null
+++ b/tnet/files/node2/bird-tnet-pre.conf
@@ -0,0 +1,7 @@
+define tnet = fdb1:4242:3538::/48;
+define tnet_router = fdb1:4242:3538:ffff::/64;
+
+function is_tnet() # -> bool
+{
+ return net ~ tnet && ! (net ~ tnet_router);
+}
diff --git a/tnet/files/node2/bird-tnet.conf b/tnet/files/node2/bird-tnet.conf
new file mode 100644
index 0000000..99dfc5e
--- /dev/null
+++ b/tnet/files/node2/bird-tnet.conf
@@ -0,0 +1,38 @@
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ password "trygvis";
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ print proto, ": import accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": import reject, reason=not tnet"; reject;
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ print proto, ": export accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": export reject, reason=not tnet"; reject;
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fe80:a7a6:c1a8:c261:232e:7d67:fc27:7c8c;
+ interface "tnet-hash";
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fe80:9dd8:abac:cf05:aea3:dc03:4c74:32da;
+ interface "tnet-knot";
+}
diff --git a/tnet/host_vars/akili/bird.yml b/tnet/host_vars/akili/bird.yml
new file mode 100644
index 0000000..b59526c
--- /dev/null
+++ b/tnet/host_vars/akili/bird.yml
@@ -0,0 +1,3 @@
+tnet_bird_peers:
+ hash:
+ knot:
diff --git a/tnet/host_vars/akili/wg.yml b/tnet/host_vars/akili/wg.yml
new file mode 100644
index 0000000..b666d8f
--- /dev/null
+++ b/tnet/host_vars/akili/wg.yml
@@ -0,0 +1,7 @@
+tnet_wg:
+ hash:
+ endpoint: hash.trygvis.io:51002
+ address: fdb1:4242:3538:ffff:ca85:f812:3935:5fbb
+ knot:
+ endpoint: knot.inamo.no:51004
+ address: fdb1:4242:3538:ffff:59d7:cf77:8b5d:761a
diff --git a/tnet/host_vars/astyanax/bird.yml b/tnet/host_vars/astyanax/bird.yml
new file mode 100644
index 0000000..b59526c
--- /dev/null
+++ b/tnet/host_vars/astyanax/bird.yml
@@ -0,0 +1,3 @@
+tnet_bird_peers:
+ hash:
+ knot:
diff --git a/tnet/host_vars/astyanax/wg.yml b/tnet/host_vars/astyanax/wg.yml
new file mode 100644
index 0000000..e12db34
--- /dev/null
+++ b/tnet/host_vars/astyanax/wg.yml
@@ -0,0 +1,7 @@
+tnet_wg:
+ knot:
+ endpoint: knot.inamo.no:51006
+ address: fe80:6728:53fc:fc81:40b3:9beb:8336:ba57
+ hash:
+ endpoint: hash.trygvis.io:51004
+ address: fe80:a0fd:89e4:42c6:f617:7398:abf4:b517
diff --git a/tnet/host_vars/hash/bird.yml b/tnet/host_vars/hash/bird.yml
new file mode 100644
index 0000000..17cb4cd
--- /dev/null
+++ b/tnet/host_vars/hash/bird.yml
@@ -0,0 +1,9 @@
+tnet_bird_peers:
+ astyanax:
+ rr_client: true
+ knot:
+ rr_client: true
+ node1:
+ rr_client: true
+ node2:
+ rr_client: true
diff --git a/tnet/host_vars/hash/wg.yml b/tnet/host_vars/hash/wg.yml
new file mode 100644
index 0000000..c7d9363
--- /dev/null
+++ b/tnet/host_vars/hash/wg.yml
@@ -0,0 +1,21 @@
+tnet_wg:
+ knot:
+ port: 51001
+ endpoint: knot.trygvis.io:51001
+ # address: fdb1:4242:3538:ffff:410b:dabe:1a0d:6843
+ address: fe80:3b20:4cb0:5315:22a:c7de:a45b:8a7d
+ akili:
+ port: 51002
+ address: fdb1:4242:3538:ffff:ca85:f812:3935:5fba
+ lhn2pi:
+ port: 51003
+ address: fe80:6195:1d43:9655:35f7:9dba:798c:26b8
+ astyanax:
+ port: 51004
+ address: fe80:a0fd:89e4:42c6:f617:7398:abf4:b516
+ node1:
+ port: 51005
+ address: fe80:a026:6ec2:b356:21c5:b51:22b9:a1de
+ node2:
+ port: 51006
+ address: fe80:a7a6:c1a8:c261:232e:7d67:fc27:7c8c
diff --git a/tnet/host_vars/knot/bird.yml b/tnet/host_vars/knot/bird.yml
new file mode 100644
index 0000000..0c1d73b
--- /dev/null
+++ b/tnet/host_vars/knot/bird.yml
@@ -0,0 +1,7 @@
+tnet_bird_peers:
+ hash:
+ rr_client: true
+ node1:
+ rr_client: true
+ node2:
+ rr_client: true
diff --git a/tnet/host_vars/knot/wg.yml b/tnet/host_vars/knot/wg.yml
new file mode 100644
index 0000000..6fe932e
--- /dev/null
+++ b/tnet/host_vars/knot/wg.yml
@@ -0,0 +1,28 @@
+tnet_wg:
+ hash:
+ port: 51001
+ endpoint: hash.trygvis.io:51001
+ # address: fdb1:4242:3538:ffff:410b:dabe:1a0d:6842
+ address: fe80:3b20:4cb0:5315:22a:c7de:a45b:8a7c
+ lhn2ix:
+ port: 51002
+ address: fdb1:4242:3538:ffff:18b7:d3ec:5608:db9a
+ kv24ix:
+ port: 51003
+ address: fdb1:4242:3538:ffff:ea4:11cb:863:5252
+ akili:
+ port: 51004
+ address: fdb1:4242:3538:ffff:59d7:cf77:8b5d:761a
+ lhn2pi:
+ port: 51005
+ #address: fe80:440a:607e:b685:c955:93ae:29f8:dcd8
+ address: fdb1:4242:3538:ffff:374e:2c7d:319e:e526
+ astyanax:
+ port: 51006
+ address: fe80:6728:53fc:fc81:40b3:9beb:8336:ba56
+ node1:
+ port: 51007
+ address: fe80:58eb:3930:1815:2a6d:8918:70c9:96f2
+ node2:
+ port: 51008
+ address: fe80:9dd8:abac:cf05:aea3:dc03:4c74:32da
diff --git a/tnet/host_vars/kv24ix/bird.yml b/tnet/host_vars/kv24ix/bird.yml
new file mode 100644
index 0000000..e20c45a
--- /dev/null
+++ b/tnet/host_vars/kv24ix/bird.yml
@@ -0,0 +1,2 @@
+tnet_bird_peers:
+ knot:
diff --git a/tnet/host_vars/kv24ix/wg.yml b/tnet/host_vars/kv24ix/wg.yml
new file mode 100644
index 0000000..9cfdc5d
--- /dev/null
+++ b/tnet/host_vars/kv24ix/wg.yml
@@ -0,0 +1,2 @@
+tnet_wg:
+ knot:
diff --git a/tnet/host_vars/lhn2ix/bird.yml b/tnet/host_vars/lhn2ix/bird.yml
new file mode 100644
index 0000000..e20c45a
--- /dev/null
+++ b/tnet/host_vars/lhn2ix/bird.yml
@@ -0,0 +1,2 @@
+tnet_bird_peers:
+ knot:
diff --git a/tnet/host_vars/lhn2ix/wg.yml b/tnet/host_vars/lhn2ix/wg.yml
new file mode 100644
index 0000000..5a279e8
--- /dev/null
+++ b/tnet/host_vars/lhn2ix/wg.yml
@@ -0,0 +1,4 @@
+tnet_wg:
+ knot:
+ endpoint: knot.trygvis.io:51002
+ address: fdb1:4242:3538:ffff:18b7:d3ec:5608:db9b
diff --git a/tnet/host_vars/lhn2pi/bird.yml b/tnet/host_vars/lhn2pi/bird.yml
new file mode 100644
index 0000000..b59526c
--- /dev/null
+++ b/tnet/host_vars/lhn2pi/bird.yml
@@ -0,0 +1,3 @@
+tnet_bird_peers:
+ hash:
+ knot:
diff --git a/tnet/host_vars/lhn2pi/wg.yml b/tnet/host_vars/lhn2pi/wg.yml
new file mode 100644
index 0000000..f9e741f
--- /dev/null
+++ b/tnet/host_vars/lhn2pi/wg.yml
@@ -0,0 +1,8 @@
+tnet_wg:
+ knot:
+ endpoint: knot.inamo.no:51005
+ #address: fe80:440a:607e:b685:c955:93ae:29f8:dcd9
+ address: fdb1:4242:3538:ffff:374e:2c7d:319e:e527
+ hash:
+ endpoint: hash.trygvis.io:51003
+ address: fe80:6195:1d43:9655:35f7:9dba:798c:26b9
diff --git a/tnet/host_vars/node1/bird.yml b/tnet/host_vars/node1/bird.yml
new file mode 100644
index 0000000..b59526c
--- /dev/null
+++ b/tnet/host_vars/node1/bird.yml
@@ -0,0 +1,3 @@
+tnet_bird_peers:
+ hash:
+ knot:
diff --git a/tnet/host_vars/node1/wg.yml b/tnet/host_vars/node1/wg.yml
new file mode 100644
index 0000000..dfacbf2
--- /dev/null
+++ b/tnet/host_vars/node1/wg.yml
@@ -0,0 +1,7 @@
+tnet_wg:
+ knot:
+ endpoint: knot.inamo.no:51007
+ address: fe80:58eb:3930:1815:2a6d:8918:70c9:96f3
+ hash:
+ endpoint: hash.trygvis.io:51005
+ address: fe80:a026:6ec2:b356:21c5:b51:22b9:a1df
diff --git a/tnet/host_vars/node2/bird.yml b/tnet/host_vars/node2/bird.yml
new file mode 100644
index 0000000..b59526c
--- /dev/null
+++ b/tnet/host_vars/node2/bird.yml
@@ -0,0 +1,3 @@
+tnet_bird_peers:
+ hash:
+ knot:
diff --git a/tnet/host_vars/node2/wg.yml b/tnet/host_vars/node2/wg.yml
new file mode 100644
index 0000000..891c15a
--- /dev/null
+++ b/tnet/host_vars/node2/wg.yml
@@ -0,0 +1,7 @@
+tnet_wg:
+ knot:
+ endpoint: knot.inamo.no:51008
+ address: fe80:9dd8:abac:cf05:aea3:dc03:4c74:32db
+ hash:
+ endpoint: hash.trygvis.io:51006
+ address: fe80:a7a6:c1a8:c261:232e:7d67:fc27:7c8d
diff --git a/tnet/keys/wg-akili-hash.pub b/tnet/keys/wg-akili-hash.pub
new file mode 100644
index 0000000..54c4a15
--- /dev/null
+++ b/tnet/keys/wg-akili-hash.pub
@@ -0,0 +1 @@
+uZJxM8xNPv0xEKR/Bjvh3YvrZ+WhSVbwYiui9Ebxqgs= \ No newline at end of file
diff --git a/tnet/keys/wg-akili-hash.sops.key b/tnet/keys/wg-akili-hash.sops.key
new file mode 100644
index 0000000..f15f21f
--- /dev/null
+++ b/tnet/keys/wg-akili-hash.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:V110Ccs/U6xpiP8PgqADDlpZkRuRRdl5YRFfcKMgpUnMOBd7HBG+eey1nXg=,iv:RtXxF1n4c8kRjz6OwhFIgW8npvrqnzH8TagF18DzxIM=,tag:Pkgwl/+DiEsewbmm9pv4lw==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwcEVYd0xZYktWWkZGMlFN\nSWxCN00yajJxTW5UaWNCRm5aZW8wVm1TR3hzCnVvTUJqNVFlZDNhTXNpMGdPSWR3\nMGY2QjZEL0VQU09NMXEwQTk3aTVnTEkKLS0tIC9SWHhMVGdzcjBkcFR3SWx5MGxY\ncGE0NmdrQXdwRWZmU2VuVTR1czkvQUEKjlcfHSXRDkCyYGb6GYP2m9phnQ29yXDb\nZfrnhNR1ffQhgX4sxA9LK0EPObbtU3ES1y2qtLnxu9h3f4VoXYAoyQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlMStSRVVZUmJqYy90eG9y\neFpRMDVBTGNGbzNoVEkwc1JZUVF0dXczUkYwClZzbkIrc3o3ME5POStiSGtiWk5E\nRlVDRTZpUFA1ZmFHNExKOWxZZE5laTgKLS0tIEdmRFN6YTZwQzAyNnllZzNLRFVi\ndkVMcWVadkI4V0I4eHhENWlJbWNWN28Ks1dEwr4ITIvTzAq2JKyyzGrR44Go+tyB\nFdV4zG4yg+msiyZTr25bf7x6gfBl5ZlsC6/8vGamGTIqE+gwY1TWeQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAra0hqZkZ4SFRydEJvSTk0\nc3pvSzU3NitxQ3Z5THVoVCtXSGRUaXdYbXlJCkR2TUpLVHdmV0dNOWNqbEJlRi8z\nb1VjYmh0ZVF1dDVVbFdYMjltQmpwQW8KLS0tIHFBOFd0N0thVGZDSXhkYjVldGJo\nRC9Oc1Z0ZWRNOUN2enNTNnlzZ0ZGUmsKPN9AIJPcByDbpj5pyF0Ju/AuEWakwY2B\nZtfBrIdeY15QqhR14UMMHZx1GKhFHXL8zTiqK2Grba8CJU6QW/GhOA==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-05T20:37:57Z",
+ "mac": "ENC[AES256_GCM,data:Ow12TSR6K1N11nZYqd40Ts6lP0W3ouOeegeyYfcFeZbZDYDO4rURAQ1gynax9oRhOaY3PLi9epylCyv78NcRj3kgUwRshQwjivLu39vtyzIcFHcOKavhNWOF9qYQfKqXrda0XG5maEM2Dug5y8XwGcWGb0r77gKGO+qF1Af3iVA=,iv:bNapVzPDOvL9d6wkqTOZ3TQ7upA3yUMkwtdIZYMmaYg=,tag:sAi2AnML8CiWq3flb10Rug==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-akili-knot.pub b/tnet/keys/wg-akili-knot.pub
new file mode 100644
index 0000000..f82cdf0
--- /dev/null
+++ b/tnet/keys/wg-akili-knot.pub
@@ -0,0 +1 @@
+uqLqW/p9YNKPis9VHPSDw1SI3gGk82RfB8InUHJJnVU= \ No newline at end of file
diff --git a/tnet/keys/wg-akili-knot.sops.key b/tnet/keys/wg-akili-knot.sops.key
new file mode 100644
index 0000000..ab70c23
--- /dev/null
+++ b/tnet/keys/wg-akili-knot.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:cNZ2gyUWrlzaJCwpMSGCNB9HcStR9ofE8aKCN+cfsnD7AohyI7Vv1jDORhY=,iv:OiHlTQyluYLWV7Gd7Gt/mxEgWBZPYGIx/GMtr5ARYtY=,tag:eOpPrbZlWx+LINt1dP6fEA==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzNjV0TjlsYmlUQnV1Tlll\nUHZ1ZERqcFRUQjN6YStpWjNtTCtFK3NLckZnCm9hbWloVDR6WDE2aklySXJlajZ5\nYUNHL3hEU2QxTXV6SXoyL1RTc1A1WFEKLS0tIDFXQ1AxV0J4c21KMWJBanJ2Z3hP\nQy9pSndpczhlcHFkb0tvdGVUL2ZJK0EKb0maRHgJ3cj4Bmr9nKmoS7LTgEMIzLyE\nh+v9YGkpsCwuhqLStQvgukXalYrsRnswzBbnxmH50GEkx1Kgs9UCbA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzSzJUOGN1cFhVQVVCRlVn\nMXhvaGFLOFV6R1A3N3Y0ZUorQXBLa29hTFR3CnlWQkxHQ3lNU1YvZmh4TVRoTHdD\ncmZnaVFKUUNEeUplcEZmeDFHb3NGQXMKLS0tIGk4b0JybmtSRmdUdTUxSU5QdDFu\nWnRMWGw5WUdWWGtLeTlPc2w1dUZZRUEKOHSD0VXSlJWNMKPuz2kK0T4LZHaLyse+\ngg/iiABrkwqSTce0ZnmzTZmRozoaw4j8R17ItJJ/Va0/DphC/sTB4A==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKVUZ0SHZhUUViMkoyV1hF\nN1R6UDhIbGJFa2NXcTg4cGdad2p4dnlTODNjCkN5N2lmWWNhU2UveGd6NSs5YTJF\nWW5UT1E0NG93emw2Ry84bVlhU1A0WWMKLS0tIDJma2txSUE1QStOaVVmNXR0WTg2\nK2NCZm9YQ1ZuNlU3bzJkWitpMjg0aTAK20zIf831MYEanBh/m2lD0lzXgnnT167J\nmu8XWlEMhQx7kPP8xeXK5fm/83roiSQkSFOBc2mJPb1V6Qab12UyLg==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-05T20:37:59Z",
+ "mac": "ENC[AES256_GCM,data:bx9NrGS5lqRfX6KcWRLGk+zGAsbEXa3UBsTmAXLzyrhucpVsjYY/FwsBQIaumYf9M9gXTxyxN5uJt6b7dw3T/wcd0FwRSCh6RCXaHTHIrAmSdRRXNsTvqkSldDfqwoV19l+Ac2xjEMP8Px5bDlKfkWn7dAClq86RiS8lEIss27M=,iv:uNKp2qaAWYk7eRkSbZ9Y6YmuYVOZxH1Ss45KDVAu1Mc=,tag:t3tm52skvtTQHfwkCKnGlQ==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-astyanax-hash.pub b/tnet/keys/wg-astyanax-hash.pub
new file mode 100644
index 0000000..ffb18eb
--- /dev/null
+++ b/tnet/keys/wg-astyanax-hash.pub
@@ -0,0 +1 @@
+2jK29ZGV0w8QqSHen7htQRSo+LOi9aInpVNOhDvHYyo= \ No newline at end of file
diff --git a/tnet/keys/wg-astyanax-hash.sops.key b/tnet/keys/wg-astyanax-hash.sops.key
new file mode 100644
index 0000000..c6d83e9
--- /dev/null
+++ b/tnet/keys/wg-astyanax-hash.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:U7DjvVKNTUiLu2JNVaK9U7ZPe0tLGrsE7t+gBxNx54LtZOhpE5IAB24W6bw=,iv:AjYCx/Cbz/J0aJud9w1M3wTYyMqlhUepkP/+U0dBBbQ=,tag:6tndRl4NYvOFLUOKjqdqFw==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtYWdTVmxhbXJqZWdHWTF4\nc1A5QzJISktxNFlYRUZ5RnJrL2dUZ2xzTVc4CjdrZkNQOWk5cjVmeWd1Yzh2d0xS\nNFlRTEx1SHVndE9ZZFRCak9Ob293YU0KLS0tIGtRZG5mbXZBbVZ6eEFibDMwcWNP\nWnF2Sm8wTzdWSUQ2Z0ovUHMvODUwcVUKF702nc2+onyIzJghWgSccdsUVCh9PGNO\nWFAZkHxJigDxxTcHbCVgOaWcdSjm9uEEr/WgaV1/AKb1mr8XuFD5aA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqWUdYQUhMOFkxWXNuaytx\nUnQwWTRmd1g2TjlxU0pYTzhkWWRMNUZPTEZRCnlySHp4WE1DTi9JbnhUbWp0dXc1\nSFdXQ1gvSmovcDNBcExzNmFQNGdRTHcKLS0tIE9TeU4xNVpheUVpNDVtUHlhUEdQ\nSktNbEFhQy9wNU5DVVVYZVdmTVpUTUEKo237Wski/vLYoOqQ6CQVxmHe5TRMve9s\nih2/fccnndI5w3T4jHD6845BUhQfID0oUAwcPYB6vFFftXdwGkkwTA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3MmNvOThZNW1oREY0clZJ\nUkExQ1kzTng3QUJ1bS8zR2ZEaGZQZjNIWkhFCjlWSFdDa1VKbm9oZ3FFMGRqbGRF\nNXJkMWFXK0tFOEZ0eE52c2J1TmZ0cDQKLS0tIFQxMUxwUWpyY1MwR1I5MzJLazht\nR1dWTXphV3FMb1BOTkhpVUJWc1QvdTgKQoVzaFyvhcOye4UfWW9/okOjCq7Ug89h\nsbgexaK4ZfU1NoW0Nw4jZppFSEYm70NELqRnFZv4JFz5Fn72yih5Yg==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-10T19:59:41Z",
+ "mac": "ENC[AES256_GCM,data:iwDbEy59/Kau8sO57xtyZeJrHjAkuocuXVFoaYnCsGpyUt5JbxZTn74CigB3g6RLgkgo4Irs7XNk1C8yYX7Dbe/XYMvlme3TbRsaOTVaATpeUHsx6OCbJKq4oXyckCd4Sr3W5UAklwTA/SOGAK/xaDFga3yH/82GMRLGN43jfTA=,iv:4tudziwm9GBj9v64og4sJZjDb0v7thNSNEinf2gdGCk=,tag:9DbZoyCfADyqJxsUKCiphQ==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-astyanax-knot.pub b/tnet/keys/wg-astyanax-knot.pub
new file mode 100644
index 0000000..20d1d81
--- /dev/null
+++ b/tnet/keys/wg-astyanax-knot.pub
@@ -0,0 +1 @@
+KWChc+gz5ZT4cQUHyNXjNOBjQtsAMLp5LbGugbbCdWQ= \ No newline at end of file
diff --git a/tnet/keys/wg-astyanax-knot.sops.key b/tnet/keys/wg-astyanax-knot.sops.key
new file mode 100644
index 0000000..583a944
--- /dev/null
+++ b/tnet/keys/wg-astyanax-knot.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:VpRrCM4sq/KzhQweoDgoNztngR+Q5x4YIUDpmRnEXelgFlkkqfU+e3uhVIY=,iv:XmUxvdiN8iOXpCqzEibf7zazQccNRsZ28fsTRTUm3HA=,tag:OBCk2nSh7/7/G/B29MIQ+Q==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIc0U4TWt0NnpXcG1QZy9H\nbHZGZkR6eDEvOXgvWXRQZU5vckZXOEhwWFFzCnY0Wi9LVWo2WENxcWVDZGZGMisv\nZ0pVN1ZsMWlPVngwcDVST29WUFd2MEkKLS0tIEdWREdWUDgwWXJ4VXpDaWVVRzJP\nQ0FiTDBtVjAzMkZ6U0NqcXVqaWlhZGsKYNsVHJmtK8M5E9XR3L7S/clptPOWhPiY\nrGfkJkXWXoztikkavCxtPfrGBHmYfL5uvm9B9x0nmU9YKjby3kTULA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYZkpCTE8raW1vTFgzMjky\nUjREdkpGalhaNGRCTFQvbzUrQjIvLzhoUGswCitaRjJYcXl6aXN2THNXWjU5S2U5\nbzIwN1pmNnVXZlh6ZGRmK1IzMmQ3SHcKLS0tIGxWSUFscUFyWVJlOEFRQTFnbWl0\nN2VWc2prOUNGRWdOcDUxSTVNMXNDVFUK+KpEQGhWDNtGPx4iwmkIoV3nlQLQdxmr\nRyMpsqzUT4zX+2hPvQ41ms+fe2yYCU6rLGCHCmZPkoWFoj2dYCbjJg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3UlIxcFpLRW8xR0NpUHlO\nTVh6TUJYbWJYTWtqakNJdXZXOHJMeDhBVlc0ClU1dXdwZ3VCUjBOWHpDOVRhV3Vn\nU2FvY0NMRkFpNWhOdlEwREUydWU5S2sKLS0tIEZjaDBzUmY5VldSa3pnSXI5OTNJ\naHhodndRR1IwTCtib1ZGMitzc0cyVFUKet7sSTJ0sH1Sk0CR++eDy0f87Rb4EIQv\nb/fF79LcinxA3J32k3yvSV56quAHYcnm9vY4oTSeYERIJPyo5ChNpA==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-10T19:59:39Z",
+ "mac": "ENC[AES256_GCM,data:f0fp/6L2G9/hCTI/L3NPLkbCaJMcip350BkWu/HvMbvScYj9GPj/bh4wAWF5JO0xZ4whtfv/DJ2UBwDxicQuqiR0acUruYNLOx6Y64qC9b69Z7mpllXre+lr3wC9D1YlMm4HkkhW9HOWI6+77Y0QOwRuYomTqQ5LJVxKVlufbL8=,iv:VT6tkuCi+ru0N322ZjD+C08K3B542gZb8kULc5+4UtA=,tag:5sbCMAksvCz2x/5k7OFI/Q==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-hash-akili.pub b/tnet/keys/wg-hash-akili.pub
new file mode 100644
index 0000000..4079fee
--- /dev/null
+++ b/tnet/keys/wg-hash-akili.pub
@@ -0,0 +1 @@
+Oa9mD1qPdy6gCilUqmJt6te4Hijr5WxxkVvOP/wgax8= \ No newline at end of file
diff --git a/tnet/keys/wg-hash-akili.sops.key b/tnet/keys/wg-hash-akili.sops.key
new file mode 100644
index 0000000..551867e
--- /dev/null
+++ b/tnet/keys/wg-hash-akili.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:EhG7qFeYIUWj0G1FSaQHM3MIpbEBAm0H5N/3/40WkIFrkm1Haw/gwkPYHfY=,iv:xZzNX4pVmVyAhgDqYjsaE1yB9CBC8ZyO0HWYEBrO96M=,tag:LB4kYpDKHUwjVSK7et73pw==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyelloN2U4cmxBRDNiK1My\nUm1LSGdvck9FK21uYXNGNUhrZ0NmQ1YvRHhZCnQwTWpWNzBLLzdYMU1nZnJXQTVo\nL204RUh5R1N5aWp0OU9GTGVZTG5QUkUKLS0tIHAvb0Q3WUt6czRuR21kQnU2bEt4\ncXExRXVpSlYrMHZiaG5FdzdyQnNlTVEK+vnwouWjW4cEAfLJSE/R511y1PB+dbVW\nc+AEeYHmkq2mJww6ZOy0vdbZip2K4PUgQes+Nfqj6CCC8dw/3/vHog==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1Wm9wUDRuR3QyMmJ1aXR0\nSmVOSTA3MnpiVkRuanJUNTVWNFhRY2hTQ1NjCkh6Q1laenljQnhCTGlFZm9Vb2RL\nYXNURTkzeXlXRzVOcmNrV3BtMkR0R1UKLS0tIEpkKzdzdjFoYzRJRy9VazFPNmow\nNjRkT2xlcVdZZmZ4ekdaaHRuSHJBUHMK1tiwjUIJ8udRdXRoMIeYhA7PxvE0W1HK\n247FWlIv8h3G1X+9q66O5JQheQPSSv1e3XeR3Cj1tQ4d78FkGtCLjw==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1Yms4bmcxaExzWThhN1FL\ncStCc0dRK3NyRXV3ck5KTllQVTF0QXdEa3pRCjV3MEozWkRjT21CS1Z0RG1rNUMy\nUlpiRUJ5ai8wbEZGUEpueTVvYklPSW8KLS0tIGVMNnpuWWp0bks3OEFHOEk3M1Y2\nbnFGd0duUHYzUVlGZnIrTGNGVnArMDQKVtlC1EJLnpaEBGFj74YgFfJabX7fYPU6\nMepy31bqarzH+DDpPpzlUb+3FvrD8zBT70R7XYAOJSJ5p0WqcZ23+A==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-05T20:38:00Z",
+ "mac": "ENC[AES256_GCM,data:9zvcm8W5NSEswBe9ulq0z12VaiRBX6+Z3gruHaOf637PNh3TicjRTQEp+Kifi+fWPQc/HnuLtu4vB1dtWvIBXu0BdnDh580ap5AU9AJD30Dhb1f00gj772j3K/koBdkjapnr7EYNe3QcqltFmrPIqutUA26UHOZxy2Pw2nzdCHo=,iv:xrHHE2pIACxMX9U+ZvJPoD980z5RQE8F/Ab27/iIbFs=,tag:2LvZZ/xK16IKr9FPwhqRug==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-hash-astyanax.pub b/tnet/keys/wg-hash-astyanax.pub
new file mode 100644
index 0000000..60d4fca
--- /dev/null
+++ b/tnet/keys/wg-hash-astyanax.pub
@@ -0,0 +1 @@
+BGi5yh2d+iBlrx70Te3mBB4A5quTYDZWfVlJg652oQ8= \ No newline at end of file
diff --git a/tnet/keys/wg-hash-astyanax.sops.key b/tnet/keys/wg-hash-astyanax.sops.key
new file mode 100644
index 0000000..46cfe7f
--- /dev/null
+++ b/tnet/keys/wg-hash-astyanax.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:yXPqVOMGnHR30SY+U3vwTURs8BUnl2lSZyKVniXkArhr4HnDeXAGc40pwaQ=,iv:WKU801BA5geRDndYQlCQnMtr+j/8kEjVq7KwcGvyulo=,tag:XXisbXNm8fqkucSsyDoN6A==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBINEFIWmhKeStGbytsVjdH\nN0Zqb1k4cXJTRzB6NEtBaElJV1YvVVR6ZUZ3Ck9sNklvZW9wbTFJSGdidGVETmZU\ncEI0VldzdUpPc2JnVTYxclpWMTFtNXcKLS0tIHpHd0c4dDZ0RHpSVGJRN3FSb0NK\nWW1KUjcwdndxRWtpZGgwSmpiYW1LSXMKKRyEaVRujQ0bFVrPenOEElRK1lS15UJL\ntW6NPqcoJyD1XP8/cdAikWo746y/lb4KfQNnrLJXBhNlk5u80epmvg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYdS9DOEZaS245SUxxazkv\ndTdsRWJ1dlpCVGVKWC95cTEzTlhubk9jMnpNCk0wZE5GalM0QXRSbHcvcS9zOTdK\nWXBKdFJrUjdWMU9CVzVTaGpScmZmbDAKLS0tIGpPbjZVcWwyR2F1L2VsWjRESE5C\nZTY2bENDNzkxQmp0TXk2QXVKZmxuOU0K0kVVc8uTsZJtWhe1ZGAajPlbFBhJmQgY\nZrRiyHyRIXvbmn7EE9/QwfLsz/ddLj845nMSUIx899aQ+C+DMDn3Fg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTaXM5R2pLWitFODFYc1Bu\nTWUyem9aR1JHWHJuUTZwcFdKT21CSFg0dmc0ClN0QkkxSS9IeHRjaXpHeVpjUGE4\neVBCak9wQUJ0ZUVFK21CcEFPaDhEVGMKLS0tIGZ0U1VkRzhyZXJZb0hBcU5mUm0x\nMHpXUXNPczlJRlJVemZEYVdTSkx3NU0KxeVSaUWzN4JWxdwn20eCVq60VLxKM4Jx\nyfjuqIs+Pxfwa2vbfYlDCEibCb4d8MmIFkUTSEtT6udV6tQQ0wdzpA==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-10T19:58:36Z",
+ "mac": "ENC[AES256_GCM,data:fFydJYNnLSToHYU5NAMZcfEeb1ij19BSY0XE9q/KbJjufxJWPpJ8Yv2y123CWvP7J9lYipI4y4hOCgr251PdnDsx667CABzaZFTCgU7hB6tnw3kqa8NGnj2sGL0mIufU+t+ZtWC8UOWJRH3Xh6EkGG7Z+AmPPE0y467oHeLH2M4=,iv:jWWszyfAnJ3dAxoVqEHmRPHq9NXh5rI3dIETOYPo7Gc=,tag:6RXsLVJkG+9OsQckF3et2Q==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-hash-knot.pub b/tnet/keys/wg-hash-knot.pub
new file mode 100644
index 0000000..c335281
--- /dev/null
+++ b/tnet/keys/wg-hash-knot.pub
@@ -0,0 +1 @@
+o2Sd8hYsjNjZzu0ZceI0DQN3kprqBZhI7++RZvALOjs= \ No newline at end of file
diff --git a/tnet/keys/wg-hash-knot.sops.key b/tnet/keys/wg-hash-knot.sops.key
new file mode 100644
index 0000000..2f3e303
--- /dev/null
+++ b/tnet/keys/wg-hash-knot.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:mnf7NKfDpxPxXgdjDpD95Cu4033Tix8t/1PQZ5OiAf2hDz4Bt+8RVxLfzpk=,iv:UCbBghUvEcZ7G02puSPG+JzQpj/ptk9NmRVgnRZTioQ=,tag:gr0QSJreqtygFArS7Awjag==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByY3gycTVqbC9rMjRPZjI4\nM2tkRHExZXhFUHNHSDFqWExQYjd3T21La1FrCit6K3RNdXRGUjA4V24xYk9YQ2RR\nQUlMRW5vUEFBTHRZNEgrSkUyV0tFS2cKLS0tIDlsY1FYUThIblNXZURNNmpCQnNa\nTWZuaXRQbkRIaHBuYVIvMnFHWUhDelEKINqzPypfaqFslJtwTvCw8BvAJX+cjbVz\nnG2veTKodry+wb9SFCTnsa5a7b3cCoClaxaPTntr7oNNH8/YUAjkMw==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBSm1NNkdvNmhLQ20wd0E0\nNkhSSURSUzFqeXVLWlJmUmY2eGtOdjRPRUFNCmMvTW9XNi8ySHJUVlJocy9XTEUx\ncUJuLzhxWnBhNDh6d3lqcUdkVzNMdncKLS0tIFR2a3BxRm92dVQ1cFA4bEo0SnhW\nM3lXZUdhRU5IK0hpbmZIQlAycVl4TkEK1CNX0qD0pWBWceBlMA08JIw22I+qmDTM\nBTW38Wqw/iZJFnpre7lvO80w/5YooIc9VPlanB0JnMpuXXXDftkm8Q==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3ZmcrSXlrL1piOXo1MUp4\nczFXTFlNMGlWY01PSS9zMEtCY3ZwTnE2OXdjClQ0Q3RXK0dhb2Z5UzBvRlRJWE96\nYndaVUk3ZjZGbjdiTUtDdUdKTU00Y3cKLS0tIFFtYXVVbGJaekdtYVh3aXB1Qkht\nK0lNd0haZ2ZkZXllOXNRT2hKaThsRmcKOW5NjQIgJwzeNysy54M08SiH26P2rhld\nIF9LgAtm0PqLycsPqfIZb4xvAdgmGtF/Y6nFtB3Y5K88BarwwP2rjA==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-05T19:47:27Z",
+ "mac": "ENC[AES256_GCM,data:xSFXtUCQ5gAtT642727t9qg+q9KL25u1Q3viux/zCVORpPSkTeu3E8sB0EhieibjkxV9BFVGjues4RMOR0ZR5BlG6u0K/vY3S6liNvrDq8mXyiwzNccZPSe5pfhPPFTm5aoec09KcDmrT7PJLiEcIzQ8ohj1eR81/ImAjCRVxLU=,iv:QFuMmlprq6eMw86VAv5TVcFnOJxEUYWhgr0KnkqTrYc=,tag:sHzUvITqKHGuQdmnCB5TUQ==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-hash-lhn2pi.pub b/tnet/keys/wg-hash-lhn2pi.pub
new file mode 100644
index 0000000..6343506
--- /dev/null
+++ b/tnet/keys/wg-hash-lhn2pi.pub
@@ -0,0 +1 @@
+BQxtKCHLZptTkwqt+2KAQpMFB6ar1Iy5PzrGGlJ7ZHg= \ No newline at end of file
diff --git a/tnet/keys/wg-hash-lhn2pi.sops.key b/tnet/keys/wg-hash-lhn2pi.sops.key
new file mode 100644
index 0000000..871bf0b
--- /dev/null
+++ b/tnet/keys/wg-hash-lhn2pi.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:tRBEaYfLvWXzHBaFL6ddXMTr1K+SOZQudP9gPK+08FMtrvMuBlGu8jB8290=,iv:PC/YD9mcY0k4dXDDWPPOosNfmedYG8I95fW+fvKARe0=,tag:ofBqln0gSK6oGwtYean6mQ==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0QmlpbktNL2dXK21vTzlX\nbDQ1SnhkbWNwWHRPeC9OVnVlQ2M5cHVEdEJVCmM3a3AvcmNvamdRc2krRFJRUWpn\nTWFSS3JQRHYyNFRzZlNtOFNseHByZTgKLS0tIEZrc0VKeng1WUowWURTV0ZmT2E2\ncGxodE14V2hKTllPOWJyYlhCak1Pc1kK/cA9FRw7so34vlRaI42s3YHgpl2HAyv6\nOH3kWg4faOZzztYPZhbH6JJQxJHIPZ4pA7uUdmqnGolpdJ4oISnUWA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrZ2xZaU1aZWRKMzBvSW90\nWURnVThCVmlKZTFkbGorRENmS3I2SmZsUTNJCmllbFpuV21yUlBDZVB2YS90TkVu\ndWRvSWhxR0NrNkdtWWVadk5oWmlNeG8KLS0tIEQ3V1M2OHZxd1Nsa1lldFRFeXdM\nSCtIQmtiY25KdUFoMEduN0l0Z1J6eDQKhUamnGxm9SgectJzLlm3IXQx9T/nloTs\nggh1pT3TkfaoL6tBMQy9yZWbdyMDFLwenKapYGBcYlw7gZtsydPU4g==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMWldwcXhER3NXeEZvZ0pD\nTzVXR1d1OGlvTkVUSlY5N3N6cnRTTDBIcEdBClFmS2VlbG5xazlvKzZmZXRYQVA4\ncFlHakRrZmhHV0VuR0NmQW90Q0VyYWcKLS0tIHdtek1ZL2I3Wm5nN1hlcjJpaWY3\nUDYzL0IzUGhrY0RLRWgyTjFXaTJQQncK/82KcYV+CmY9LwTtTWnEfwiIp3jujJpx\ntK0lTJLEH4gzYjjjsXOUY82xZUuYOLz5La8BVfiKzSwKGwAXUyGF8Q==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-09T07:27:29Z",
+ "mac": "ENC[AES256_GCM,data:WAUrsn0PPsWk3MXmVwPuhrZy/D9F5GdvJv3h5FEKpzbeEb+XpTIlmD/GMxqKYGTj1JXhFT+s8QXEjjEa4lR7AGUryhsJe5Tkh5I+etPf4ePAd75cixNMmCmqHxWiA6fR9OqJDbPuXbHYnbrVgp1T+9tXCCZMEoh/YTjmFfWSDJ8=,iv:cSF9AW0kpjKgcXUZpb4KWuLPJyfe6vA9vdXH9f19anM=,tag:53dj6ZWGD98o4PVNvAzdrQ==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-hash-node1.pub b/tnet/keys/wg-hash-node1.pub
new file mode 100644
index 0000000..8e33ba3
--- /dev/null
+++ b/tnet/keys/wg-hash-node1.pub
@@ -0,0 +1 @@
+1cNynnx5gPRzgr6JNCPqzlfQP1SuRc4XN3wlWxbIVF4= \ No newline at end of file
diff --git a/tnet/keys/wg-hash-node1.sops.key b/tnet/keys/wg-hash-node1.sops.key
new file mode 100644
index 0000000..7982e74
--- /dev/null
+++ b/tnet/keys/wg-hash-node1.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:J4ZEwFTTSOcMCUNbBxeufrHRg75BmlTVv0gPs7xVdB9RtnQ+G859ZdDARSk=,iv:dEqxGTSmnWjZzc8kirfyTkJfewUVcPejbzG9RDQnG4Y=,tag:SdiX98tkWOW7oAcxLMJv9g==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMUkYyZjZ2NUd2dXd1QWZk\nYms0UDJKajYyb3VnOHdCVDVZVWdVTGF0VDNzCkE4V2dIN2V4MWUycXBLem94aFNu\nTERTZ0xHN1FwK0w0SVNkMGJOcUx6aGMKLS0tIG9OdG1xL1pLM1NtS2pQV0J2bGFR\nZ1dJWDhjcnNkREh3aXlHa29teUU4UWcKj62Piukjg3hk2MWvXRhkmAznsQgclqST\no6gored5zOcjZg+RFZd5RgLvNQxxwR/5dfZPyBXfjPIQi2+g7UJDfQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5ems3RGdWZ0V5NVVMdHpa\nZDM4Nm05QTJjMWx6QXZqbUIxZFlIOUF0WDJZCkV0OWxIOXJUcnc0R3BMNEFSTks2\nbjRCb0lIRWJqRkcwc25nVDArNWRtSmMKLS0tIHZEbzl5N2NaNGduQ1ROK2Mvand4\naTQrbFA0L05hbGxUNDRQb0lScll3NjAKTjRRiBpoHW9kLZS0YiZ3ZKK+gjBzErNU\n64/LLgZIsKrWnXDxM1szVf0wDfx5j2VvzjE8yDszd0N4iXzobjwt9w==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhbGl4bnZNNHVXQmxtNjZy\nenpyYXBobEwwQUx0Z05DSzNvM2pkb281NkY4ClV5djRJTm91MmQvNE1JY0QrNXNj\nN1YxNldBZFdhRVlLSmROaitKMzkzWDAKLS0tIElNbm5lbGFDMHE1N1owMTFhektq\nY0Y2VU5SeVQ5c09wRm41dVhxZW5VMEUKKCL9H1dKgWaFg6KpDjPy4QXAQDAYfO6W\nxh/eX5I3OvpAHSVvTGL0LVQVBI9Md27f9UZIKIXOEMrrborMtmTqjg==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-11T08:37:25Z",
+ "mac": "ENC[AES256_GCM,data:d2q6CE/Um1sEZ+Tbg0xYTSvl3/aEUdo0M+8rAh24IlM3p4au9mEHGk4WzT+fyxYnmAAeLFyf+XMcGP4nil7dut0Z22fTOBrgehpkMobbHEIqOhMa3d3I9WyV4h4AQHMyWWjZhTVk7uVCym7qiRD91ucR3vG/ax3aKRb43OYx+ZE=,iv:GauMpvYiClHwjQEYPlI5/vaUst6+eOdo5+8L8b7VZeY=,tag:kNJ2fSH5Z++PehOWQYJMSw==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-hash-node2.pub b/tnet/keys/wg-hash-node2.pub
new file mode 100644
index 0000000..877b702
--- /dev/null
+++ b/tnet/keys/wg-hash-node2.pub
@@ -0,0 +1 @@
+X2rEOlHyKs62HW0nAaIHEZFTprGXhLb2de/hAQcbFng= \ No newline at end of file
diff --git a/tnet/keys/wg-hash-node2.sops.key b/tnet/keys/wg-hash-node2.sops.key
new file mode 100644
index 0000000..4fc6c33
--- /dev/null
+++ b/tnet/keys/wg-hash-node2.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:4GvFf7qZz4uH4scmvpSN0x5ei8XoDW/raxwIRPH1Y6+9wnj7zmVELIPytCI=,iv:7S16T48B5x8B28WXCpNwVArVIucDeGOilOgw/nUBdN4=,tag:oOHo2KT044rDhvRQnvsB+A==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLQTJ4ZEFKN3IyY0VLVU1R\ndnZadTByc3I2d1h3Q2xZQkZPL1FNcWI0V2dJClVOdnNIaTljNXQzQU4xZXNIMFBi\nR01mZHVtWjZUTjVtZGN3SkJYWTk0NW8KLS0tIFBMdnl2Rk91aGhOd0FWMytFblow\ncWlKN0FhN2ZsRWJtMFNnU2llK21HWHcKPOP3SG4DdnseZjaOPQXBsqtxYo2NBQfK\n9hyqlhD02AzP7XGrf++YS8FJ3nqOrJ/NV5cYeOEDCMTDqQ1DVwLXFg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2Q1hNbVZ3UjJlL2RLUTY2\ndHNWZTVlaHpuM3djWE9UTzlBN1VmSVBBaW1ZCnM4M0hrblI0UmxJYXhjT2lmTWlU\nVkVIdVIzUWN1LzV3Q0hVM3lkcWgwejAKLS0tIEFPSit5UGRCeks4NXhDSE9XNXFE\nc3FTYmUyaW1GdW5YbHFhN2U3Yis2QTgKuJAdQqbxWrm86Lsn+xv5XQNxiE+krq9z\n6PoViqeLVqP54D4TGsQ7HBWD5k+mK1IbHdiSrf6lCw2AIiZOQXACdw==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpSUJIVVNlN3Bac3M4cFlS\nVHUwM2FNRnY1bFFxb1Z4RE1aYnVoK3NxT1djCmVnSUJ0cGZ0WStPZXY4Y05LVkxt\nd1hIQ0V6VWYwWi9WVnVpUVExbU5tZzAKLS0tIDgzcmEzUnMvcXNES2kxKzlHRUpt\nRERyelpQaXVVTHI3WitXT3hkbFhmOGsKq4MW9Pdngt2L0/Jyhj9IRIT8t2/a0OXQ\nhpi1zBq8pyyqgsOXTornPYHmRAtPNULetzFbV3l+JWajHeemCA7jLA==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-11T08:37:26Z",
+ "mac": "ENC[AES256_GCM,data:hMv9t+1GswxvoHlNUEH+EGJesDRTolk2PMWDkk9GggOxbkMxZS+Unl/79Hj+nheclsWkxIAI6CG1Sr4/qiGdB3yX39s7O/LgiXnNV6yYirVJ+Qrs3T3oRM1HCk9Y5odb42bqW+QoCdEhn4pJk1oL1n8ZrjpEzE1cf9ChAhNRRzY=,iv:JzmYGLYfH920z0XZJVH+ZNCr+FlRu+VnC2iPnCiydHg=,tag:YclQ/r9YlgC2xb9Ng4UIQQ==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-knot-akili.pub b/tnet/keys/wg-knot-akili.pub
new file mode 100644
index 0000000..883226b
--- /dev/null
+++ b/tnet/keys/wg-knot-akili.pub
@@ -0,0 +1 @@
+1HVM+oZOB23MszWwpxFSJasFiaKPDJxTK/HC2MGvtHo= \ No newline at end of file
diff --git a/tnet/keys/wg-knot-akili.sops.key b/tnet/keys/wg-knot-akili.sops.key
new file mode 100644
index 0000000..132546a
--- /dev/null
+++ b/tnet/keys/wg-knot-akili.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:DCuYkK/UwFVDELXIiW/oe7iQmdM04w+LGvLp/T8Tw+u23lvbHmqi7FadMlo=,iv:gbAmJsCgKu1DbusG8yDakXWeb/RwGxwNZewa2TgVXSc=,tag:Q7dWAJbwwzyqPkP5cf5UUw==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDL2ZmU1haSjRvbVgzYTh5\nM1JZMVhCSjVTZW5aY29FNHZCUVpPMTU5Vmp3CkUya2k5Nk9jTmVNY0JQcHNWZHZX\neVBUeFJWa0dRYWRsS1VsTWEwQmNzcjAKLS0tIHc2Y2R5UFMrdmpXSTU3OC9xamtG\nWEpLWi91Zy8zRmdQUTFBN1plTWpIQlkKT8mxUZd7BokAmWzB5CfaRquW307Zj+52\nkYD75YSq5WBvMkj0QGGkklyFM7syH9WBA9+J2t0XKPilz4OUEizAnQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5aFd5cnRqN3hYRDc0Zi80\nUHM4L2F0NFMvN3ZISjc1b0JtSUhlTE01SG1BCjZ3djV0UFBpVWQ3em1memQ0anUy\nZS9sU05zalVIV3Q1M2dtY3FodHZ3SVEKLS0tIGFBSDV2eG9XOStYVGdRUk1SeWI0\nMEJkR3dEbUV6TEtHd3I3MlJTbEc0SVEKFb764pOkVIyPdzVYTVNnfBb24OyxSzlV\n+D/gZnSlZHIEqKGhNr2nqjN8d/T4hDVPLL5nEP11UW+JZWSGe+W22g==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5VEY2Ykh6Z1BacTY3OWlO\nZDBEd090OWZFU2swMHNlOHVGQkNvV3Uxa2pNCk5vT1pEb2RrREgrUXFZQnJIZ3pi\nZSs3RzVjL2R5VDZkM0w0TEs1dHp1NHcKLS0tIEtFVVdqNm9tK2wrb1JHbGMyNGJT\nZFFOeUlobVVZaUNvY0xERllxL1hSSzAKvas55nnIeJrw2lQGrRXXWjF4XmCY2eKP\nYlisBF46n7DBIWg5UHlpYd+2Wl+VJ837JacuLm/GxEWOBm82B9/w4A==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-05T20:38:02Z",
+ "mac": "ENC[AES256_GCM,data:kflt/laP/0Q6iXqKe8pVBNdZxXH2SNFLsSLHHqhFpvdUlJIJDnC2v34HV74l1yWxjgOP2Vamaj7Pi8mx4/S8OrwcWfOBrGDRFpv8GBv6usT8VbzWGj281IQWy+8Zl0QMiCC2KhZbo6+R2V7CXg5PLSbDLhyPCeYKiG+HgfRVjy0=,iv:pVSrFsIjOSeMLOrYzsA2ry80gG85cfUrtTDjje6Iri8=,tag:+xE1NU5tWh60/jF1df/87Q==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-knot-astyanax.pub b/tnet/keys/wg-knot-astyanax.pub
new file mode 100644
index 0000000..0b8e3f0
--- /dev/null
+++ b/tnet/keys/wg-knot-astyanax.pub
@@ -0,0 +1 @@
+525whc+XR9Ap6LDokB2s1Thi4z4yoYTK1Ydt5eGL7UA= \ No newline at end of file
diff --git a/tnet/keys/wg-knot-astyanax.sops.key b/tnet/keys/wg-knot-astyanax.sops.key
new file mode 100644
index 0000000..f37cdef
--- /dev/null
+++ b/tnet/keys/wg-knot-astyanax.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:2TWTRIEcWiSV3JU5nRdtyLn9/YhTkvRub0DQdFmTAPGEyOMzVdH60O4KmJE=,iv:D16FvT1fe+iNSICjpTocedN7+n3OEKvDprhbV8gI+hM=,tag:uwrHeKTENoKFYDxct1kxUg==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzRDhNNmZyMmtreE1wRG1W\ndEdKT1NKMXpwdWVtS0ZtQmpiRWlZZ2pTUFNvCkRwSUVsZU93SmNDTStFR2xWcmlR\nMWh6Vno4UkgyUWhrL3ZURFF0dEVPclkKLS0tIGpYV2JCb2tTMkRKTUwvZXAvdVlP\nTTEwd2NlZDRXNkRSNm9pTW1TdWlUQWMK5P3HXSBQMdme204AMV+FN/4hCU/sTVCL\njFijpIH+caa05fX+DJyDTIYNof8w5i4G47/RbxW/3MEhhBiZki32ZA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwMVEvU0ZYeGhyQVNwNDhP\nMzN2VVlNWjVhWUVrK1ArMUtlMUZFb2RtRUhvCktSZi9qZUVuVTNMclNic3QyOXIy\nNHFDSGh1VXpnV3RjNXpLWkptdkJjQUEKLS0tIDF0bGQvYUkvWnhNS2w4Z1F2anNQ\nd0M3WXViRzE1YmFkREUwV1dzanJzZTQKh3dJMFnb/3xSi5I4+cciU6IbyCKHg51+\nGlZ9BAmartSdIngC1EBmJXijFJWGKKQFYAvJ6Xeux9yyNNx1sf+/mg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLLzZudHJvelRwL2x5clph\nMDZoY2hhS1dDT0Z6YWpPWHNoN0ZYY1d3WEhJCmVXZDhnQkZsWEI1dThKSnB0czVj\nVll0bTZsOUZ6MHU4WHVINTk3eSsvVFkKLS0tIGE3Y2FLMUxCUlRyNTRFYXJySHdn\nUTIvcUtGOENLeUtwVFZqM3daOFRtbkkKNMNwBZLRv/0lvT/Usb8oI/RlfHsTVK5k\nRZcTZ43j8q0X0XOs58CEsFCLYZ/kJrQOBYsigMXuNbIz3Hx9UuZRFQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-10T19:58:39Z",
+ "mac": "ENC[AES256_GCM,data:K41peTVBE1JJLtdX+mNcTbK62mwxIAfhf0XmVGQ7E+2ELWxaoCo/A4z54czcK08v4tK3BObYIRMLCY2bn69BnYFWB/vyoeBz4tBT8MHf7jgCTd3nfmFr1W/8f4Tl+qx1mtz8ZS5+tZ93N/9etcnwoQBwiGjZeKbtL7ZuKwsKU7w=,iv:W2AvDxha9G0ThAeSebRhYsT/iqTmoTCdRzVi4pEyq3k=,tag:lCQj5jdx2CNZtUi37HvEQw==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-knot-hash.pub b/tnet/keys/wg-knot-hash.pub
new file mode 100644
index 0000000..f45d6e5
--- /dev/null
+++ b/tnet/keys/wg-knot-hash.pub
@@ -0,0 +1 @@
+BXwzEhXje5q6I6KaW5K5hw9r1VIg5aTX2C69QHXclAM= \ No newline at end of file
diff --git a/tnet/keys/wg-knot-hash.sops.key b/tnet/keys/wg-knot-hash.sops.key
new file mode 100644
index 0000000..a16d2a4
--- /dev/null
+++ b/tnet/keys/wg-knot-hash.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:JoTKd/50zDFXaSNLX77GIUX3mICPU5i00PfGls0mhW/l6nxSwH/pNk5mHd4=,iv:N+veTN0KtS/1+xLVYw5uiR5eu6iD3TyVwhunJ2sHKVI=,tag:0DeTbaNJefz9xJETFNXMbA==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1UzNxYUVPaEpYcU5LVzFr\nQS81Y2FCZm5aeTRPa1dMamdyWFFGaVM2MEM4CnVjRjlPTC9ZZFVDNDBGbzM4cEJz\nUGhOR1lKd2QwMVFXT3BoblBjc0ljdVkKLS0tIElvVkFvV2toYkQ5V29YamFKd0ha\nMTFkTGhtV0QzaE1GcGNZODBzTWxxY0UKaoArs4gGtPCUgwSG+gjzWiG75BaOct0E\nYZ12bHoBrHzgWvhKT3aFTa9JPrimry1Ycc3b/bsOtst/RCZoLkWisg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRMkpsd3BQaWVnWk1malFz\nMGFCYlhRRDNlZ3V5U3FkQjZETk5NZDhhUVVFCnk5TnlHVHdHMjVCL1pKRTVpT0U1\nTDhNS2MyRlNOS3BPRVMvb1k0a1NHWUEKLS0tIGVzRzRIOEF1cDQ0eDRhOEtnOXFy\ndXpEWjBZWXhHbzVBdC9RWHR1WlRwcjgKtEFv/8FUGlO6Xc+dxAJxdYV7U5AvW0i1\n/z7Hel0tVqq5hTyZYwYWBm0/tj1bCPIhPisxu+6Eb1T4WuPGeylCpA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTUFBDY3lkTC9rajdYLzhO\ncldBNnVDNldBcGcya2dNNGZoVW5uNW1IOXl3CmU5MXZ3YUtwVDFyL2lTbCtHaytn\nUGYrYnVQOFU2YWlsejBZQ0hlZlNCK0UKLS0tIGRrRmlFbkJWMnRRZ2o5V28vSDV4\nSU9hNU1tdFJza2FqdjY1T0RCdHkxWFUKVRBnS2OCCfNko5E0qn1Iu28FKQJlR7oV\npP6k1npvtsCGMej37WANxoQt/zu0DM725nqYtxSnSzW73+3t6BbnXA==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-05T19:47:28Z",
+ "mac": "ENC[AES256_GCM,data:WRl6YpdJnJDGMnW2K09259uK3viVuVW2A2RaLs/NF3mVFIs+tTwUyQl5CN0b+9ajv28zjolrlzlKLR3eGsEtOmWXz/edrsOjjAif0k6G4mHdfYYgFbrSDo6zPZ1WGxMBFXY1UEnfW9QrObZnrQuCJu6NzsAsSXdxrCrkcVc82TY=,iv:OK8aZIgDI7mXcCtV8IqUca2kn3wtGd7K2xdJTL3ADEo=,tag:bCGVhQCotE5YbBY35Z5J9Q==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-knot-kv24ix.pub b/tnet/keys/wg-knot-kv24ix.pub
new file mode 100644
index 0000000..6a2c4a5
--- /dev/null
+++ b/tnet/keys/wg-knot-kv24ix.pub
@@ -0,0 +1 @@
+eF8DIAyneOlhEzyriFB528IUsnYqy/b5398i0SW06g4= \ No newline at end of file
diff --git a/tnet/keys/wg-knot-kv24ix.sops.key b/tnet/keys/wg-knot-kv24ix.sops.key
new file mode 100644
index 0000000..d016498
--- /dev/null
+++ b/tnet/keys/wg-knot-kv24ix.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:VxjIdJCQwGls2p5Jf+fzAbddlloSO0aE9O/4+Ppnt2bAOupWeJoJXyjVRrk=,iv:WCsLtYlHuMl7r5eiMSEG53QC+fhRavBcFsWX7m8AyJY=,tag:xHiF4qexD870jV8L+cMVxw==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsdFVDc0JuRVBJTHRYbDRr\ncWtmb2FiTVNWeHNBQ01SNXRsY0hvbHBYT3hJClRmREVMTWJBRWFFSWcxN3k3Zjh3\nWjZrU1B6N1IzVTBremxKVUlsU1piazgKLS0tIE0weXNvRUVoWHdzdEdNZFlmMFgy\nLzNBQWlBM3lrVWFnSlVXa09DNGwyaDAKK47W4d9/T8oDStAWosS7/hcLY1mbem2I\nqS0ucoZ4TMks89i0VjACQb3JQhPu0y+AYgcQPReubIJ4Dzmor1jBqA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjVXMrY0FheHdNOGxpbCtl\nVmtjMmlsTnlsejFhSnFtMjNTNTJZMWcwRW4wCmVVTnVDRGxxQVNiMGRuVVh4aWVh\nc2ZCUTFpT3hFMGZ2MTRaM2htU1NES3cKLS0tIHhRdDQybjRzclVDUXZVb2s5dWRG\naXVBTWN2Ri9pRVZGWkprYmI5WHNoYTgKX0m8jpah18hOXoADUmkFGJLJOubfIeF2\nmF1Zrn4X5oBbdx2btsS+hF87v0kAfud0PxAJ88RKLaaTKH1m8mWmUw==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSY1NrR3JaVjVQTDdRMmZY\nTXhMR0hyVk1SY3MxS3RVYjN4S0ZFNTliMlhRCjkwSmN0ZUZTc2JkK2JEQTk0cmVl\nb3NtUmVQSnB4anFkd3MyMzJEcnlEVEEKLS0tIGRFdDBJcDVvN1VYQ3VLck9MSndO\nNFFUbUhGVmJyK2w1MVlUMkI0eUtxc2MKshnjp8+4hmsMb2PWyRkm0qCSEwAsTDsJ\ndkg3+OcYgQbAgWClduqixOperyrFXq56em9Zqzp4U6PtsiOAXdJb0w==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-05T19:47:31Z",
+ "mac": "ENC[AES256_GCM,data:8EU4lmMji15AiqgWq3lcO0BFsJLTNag6mYnhzif2PgW3wdSOdS0h2LUuK6xmJT6shoxWesZJAJr52t1ZmbBkg/m3bLGmKqO1Sn/NwvCkMbusJQ3UT4eqjgFPXPHr/ANGdbjweqXiSRMUxv4VPFBBdC5q4B1yuLOxW2jrfW+4GqY=,iv:nsm4PtyVYvmSmBOFh3FEsEKrDIKA4DZly6oKWp2qD8U=,tag:GfM/qNtyJHCXWNV4L9ijjg==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-knot-lhn2ix.pub b/tnet/keys/wg-knot-lhn2ix.pub
new file mode 100644
index 0000000..aa9e6c3
--- /dev/null
+++ b/tnet/keys/wg-knot-lhn2ix.pub
@@ -0,0 +1 @@
+Up8+DhBlMp+/fpaxyGDQBnH/4tZnHojcAKZWCr5sSAk= \ No newline at end of file
diff --git a/tnet/keys/wg-knot-lhn2ix.sops.key b/tnet/keys/wg-knot-lhn2ix.sops.key
new file mode 100644
index 0000000..b1e94ae
--- /dev/null
+++ b/tnet/keys/wg-knot-lhn2ix.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:urDBiYxF67OouS2m+Ic0UwCr3ixjgLa5qQ/erLi3KNwE5bpQzBIWm/qJ0vk=,iv:CIshvfp8SB/hJSOc2usNLbkF8fZxG+hBBIbAZ6E/8Go=,tag:yxp28B7we/TOO5LPfs6rCQ==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4b2dGUmxFRGpSWitNOE5M\nbG95Q2xXUC9BOHBCdEgyZkRsNFR5T3oySENvClV5cGlocEVUZFFHRkY4MmJ6eldw\nTTdybzgwTHFrQXZkMGQ4YURQYlNHN3cKLS0tIDY0OWRoRVJuRVZQaFVhVTNTOHUy\nd29XaU9BVXF1Qk5aWHpHdVhIQnJaZFUKv51CGt19sYjlxvjHlDxA8xMEWqUnZLt7\nSNPwYJmU/M+RnzC275mf6r3Oir9MyJ/lRKk+f+3E5KGUXfJ4uMUYVA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4aG1MeC9DamQrYzJpZEhL\nK1NmNWtHLzFKSHRBdXdSM1pCV21XaFN0bEJFCnU5ZXNWSHA5U1Y4Znd5bjR1bVY0\nZGVDZUdZcnZIdG01Q05yUTNUbk1kQTQKLS0tIFVobGhWbyt4UU9DVU9TdWpWYzdC\nWjJjOFpRU1pnS1A1ZW4wSWJ6T094UEEKrZW1Xu2ksUKbVoEZ8jmGidqG1/KL/30h\nZcMyWksLEqsSjIgFNk2sijLm1SRu5b95aSRUdVwjz399XvGvOmOq8w==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYZ1Zpc0xPaUlna1NpZStj\nTXJHUmh4am9OaG1LUEc3SFRiY3FuL3ZsQ2gwCnQySVhQMFROZWU2Z0VyRmJvejRv\nTEtTRlBveUNJcXZQbHJQeER0N3dxT1EKLS0tIGVsWk8xeENkTEljbTVZcHl0c3Bi\nTXNQeW9UUGxaS21iTDluVno1cGpmLzAKqj/RqwN1wMV6w5jze7XN+eyJRFl5PgcV\n0Sjgvafd4ZLo0Z68eWiZhlFJjinZZRhRCeJkWoiyDF5OAYued4vgdQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-05T19:47:30Z",
+ "mac": "ENC[AES256_GCM,data:nIAGqjXRHc2+uetcePOujQ4ozRaWUnNg2PiUdvYsqy2ZNrwVNv1Ztg2Kq+PHRSeS8lVNFFCfX5e4XM855Rtxc+h39pvY+di6SGNwmegw0nwr0kiiTRgAJQ/eDzYDRa3HysMDQ/+bGsMcVIyQSbO6NAkbXpgP8YhfLSCmXHBhXL8=,iv:W8IpX4COziuawD9bD41/O7cLkP+WEo69UH18/s/idhk=,tag:6OFdJaTA95u5hoxDYRnqMw==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-knot-lhn2pi.pub b/tnet/keys/wg-knot-lhn2pi.pub
new file mode 100644
index 0000000..664046d
--- /dev/null
+++ b/tnet/keys/wg-knot-lhn2pi.pub
@@ -0,0 +1 @@
+thn+prYWRPGr2BCmAImAlFGVrg13Fc2oJaa29Z3kpC4= \ No newline at end of file
diff --git a/tnet/keys/wg-knot-lhn2pi.sops.key b/tnet/keys/wg-knot-lhn2pi.sops.key
new file mode 100644
index 0000000..9472949
--- /dev/null
+++ b/tnet/keys/wg-knot-lhn2pi.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:03CLCq+oq30zggntti0F6J2yuRfSGjiG8/HFj96L+I5bOahoxSYb5nYy4Nk=,iv:flQSnNjBrztGbuzfKGt84Zsza0Ba7Oe0c9xG+k4L9W4=,tag:sZm+tgA8OJr1v/tuNSS5gA==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBVjNnQ3lqdmcwU0Vpc0t6\nbTVCMVc2clBRdVZWZ0RtUi84NzFndUpZOERZCkFiY3R2VDJwSEM4ZTdUdWVKSzdu\nL2ZzOUNNKzVtUWVkamlGN2hKM2lWQXcKLS0tIEpjZ1Q5bTQ5QjcwN0NnQ0pPdlZp\nTTNGZUo1cEI3cXJwZkdxQWwzWStuK0UKRG0jI4q6zAGuWlTohiY41VURa8tZLMjK\nUIrNsGK7AZTTD7q5loiWyio7hvwADfbibQKmn0g3kcxP1ay/zZzlFw==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTeHdQUkJEWTlkQzIrNGpO\nbGVCSTFocjhiSXIxSEdOUC9mZ3B0WGZKc1ZJCmxlQlVMSGtrWkl4MUl6QUsvdFJK\nVTdrWFc0WlZUTjNQbzNVWnRySGkzVjQKLS0tIEFEYk10TmpkbGQ2Y2wyT3NkVmcx\nSWI0a3E4Vk5BSEs2SitvOURtYysvaE0KEByA6yjwCabCwUJz11Tf5KwTguqtoQcq\nYUa/+UF3zc28VXa75YiYJwp2cUBF+dhJ0u+RFjpZbYwcmYwu/qhpbw==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCS2F1YW01MUtJMm5PL2lK\nQUV5Y0xlenBVZkhFaVl5cjBmdi9nRzlRbGl3Ckp5aEpLcitpNTFDVW5UTXNvaFZI\naGR4NTIzMUNzSTF3MXkyUVl5WTMzRGcKLS0tIE40ZmNhbTVWOWhEVDNhU09HL2px\naG1CWENMbS9SRUVjL2NuV0ZjcVIvRncKCltU/czqpz86Dknj3tam8lM1jMjZ418d\nFCa76/7Zqg1XOrdZvoGTclb6gVhiIfqOfEfYNTNLuQsXL0J9xUpUJA==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-09T07:27:32Z",
+ "mac": "ENC[AES256_GCM,data:rO8+CxG+08F7eVP+AKDwoFXP0VM6agB9PX8ZL6yqYMjZbeRc+syKwTe5oZkzFFcsbnbDB1iu19csz2u8u2x1hAQiJMWHuKPB7t/mc0N4ZG4mxZPo5hdIbFEyb4LAkqvVYQqkjWeT58nXu45N00/ZwmGbJkw0Kfn0pGXIKHs3/FM=,iv:MxAEJjZbWvjR8uhjfwFUewvxoOHSuzhXQH93HMpAwPQ=,tag:5SZqAg9RGA2x/a9mGkl9bw==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-knot-node1.pub b/tnet/keys/wg-knot-node1.pub
new file mode 100644
index 0000000..1507a5f
--- /dev/null
+++ b/tnet/keys/wg-knot-node1.pub
@@ -0,0 +1 @@
+thONllLZCmXl09Fpj0hJXMC71RL5fBUWYL1pSvQFDhE= \ No newline at end of file
diff --git a/tnet/keys/wg-knot-node1.sops.key b/tnet/keys/wg-knot-node1.sops.key
new file mode 100644
index 0000000..7612836
--- /dev/null
+++ b/tnet/keys/wg-knot-node1.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:kDjtgcIJwZdtUmzeZ+HtEM2FPYF+W9gWCm55vdSxC3scA6MoxNBRSxw4uQg=,iv:4K18STAhTTxtpAnQCHaNYbVlg+M8iyxAX9sYbeetvWw=,tag:PcVWrkISwxvnBXSoFwJ0Bg==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0ZVdCNFdSd05jTHo0c1Fm\nYUpPcXA4ODJ6cUdHUGxNUVc3UVpMVmFjM0Y4CjN4ajB2aE9oVEc5blk2OEJaRW1y\nUjVxUlI2bUVvZGpEOWRpMTRGMnZGRWsKLS0tIDQySDlRU0lIdjExZkkrMTFaNTFs\nRnBrVXN1WUxBbTBjUm9BQ0pTOWRXMEkKmkogKiY+AN+6MTuu1cj8l9Xw/Jzt+sXC\njpnl99+hAp0WmUV5+tqq3jGyzURuYpkoG+qX19jcVxMhwCx0A+JJZg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUcGxKS0VCWk1NOTR5ZVB2\nZUpKaWMrbGVqREZLVG1mZk9WSU43YXhwVjBBCkJRc2QvcmhFNFUyaTFKbVhOc3RM\nY0RZTVY5TEJYQTEyM20wS2NJMDEyYWMKLS0tIGJZRE16a2pEb2Q1ZmFTNTJiWVo1\nb0ZGM0xMeC85bWM4VHU3RWhKczE3Z28Karpa7UyGJmwGcy+dTnie+tYRo99YME0h\n8c/0oWNIQYKuNU0LvmXLaCXfANWNoW++MEYcj8ctTH8stOScqZ20wA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6QnpkdytmUGpwM1ZHSXd5\neEpMM3VZK3p0YTdhN2QwazhMTThYYU50NFZnCjVmWWxsSHpSa2x1OHlSU2liOTUr\nVHJYWWpZbXlwVDc1N3NLODJtaTFjM2cKLS0tIEZ4TExVVDBiT0diL3dlL1JzNzdn\nbG1NS3lDQmJWSlNLamlhejVsU2MvWkUKi/LFKOdgK3SKTwP2LdiWd4egqYI5+xAi\nHOWnFQGnljXuQlRXBHv20fq0QwWm8wPJnzg7QK4wNVAWAjZwQXeMXg==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-11T08:37:28Z",
+ "mac": "ENC[AES256_GCM,data:5uwz5pswuas/97KI8n4fm/+sjshkNHdRlS3k28xRftcNRsTi/k9Z1omhfLlwKKL3D/955UyHnnV86XvZPQfCxPm/I/5HbpFMyqKP4g88wSxN7poI+CBM+PNCeN/HHb0oIbq7Z72vq3VTI4Prs2V3/i1E5LE+4Sx4IFE2lmP9gjI=,iv:XG4uF8aqGBjKN7yTNWptmQtQjT05eOE/J8zTrOD8dGw=,tag:HpOf1YyQl36SJw0DpgW//w==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-knot-node2.pub b/tnet/keys/wg-knot-node2.pub
new file mode 100644
index 0000000..8c9f071
--- /dev/null
+++ b/tnet/keys/wg-knot-node2.pub
@@ -0,0 +1 @@
+4shyuJgqiQsaRZG0zuD3WWEJP2eEzNSpt2vfcUXqikg= \ No newline at end of file
diff --git a/tnet/keys/wg-knot-node2.sops.key b/tnet/keys/wg-knot-node2.sops.key
new file mode 100644
index 0000000..3395667
--- /dev/null
+++ b/tnet/keys/wg-knot-node2.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:/yNbyRXzUhx5OJBiSsV0sGY4n85fBLV4wFBsbM2sHOO4FkvBQOKXRfEeNHI=,iv:x0Zcv+f17YYoGGN5lXSHBTta3+8eX8NrnmSeKf2t0gc=,tag:uBjDTRMrhuceisM0V0eH+g==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaT25BVjBxUk5IdlVRNmZS\ndXFRVTJkdFdRMEJMdnQ1eWxMcTMwSGRWMGpVCndNVm1seHJpSnk0R1A5TVB5bFlE\nbjdHK1owNm5Bc25PK2czdHJHMys5NUUKLS0tIDhZdUVybmNkN25XUU9wbVZxSHZ2\nenFxM0t3V2RXKzRWZ25sVzJaUU9Hd0UKIaW5AiVahrrVim0whQTFE4YjEh2Rel5r\nm5rgebK9IdjwG6iUWQlnC+xaZFcqSyp6S+rGLBg/Axg2aAJpCUVcIg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRTzhoMHlVcjBFdFAvRVpi\ndlpuTzFuOGNaaG5EbG0wNWRtY3ZBSEkwQ0RNCnM0V2JyNHZNblJCOXlOWFNYQTFm\nc2VtTmt4c21Ma2Z4VDdubm5YYkpkU3MKLS0tIEtlQStSR05Nb3h5L1FkcFJ2Tjd1\naStFTWlzMVBLVnAxSWRoYjZPdUN0UFkKVgByyiUXtgDi1Z1AivQsNA6lUKwB9iQM\nh7ch10JBPSNVrjXisdxU3qoBeuOKl9ZmTue/aR1clvJqkhDN5BzX8g==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWQ2FSZ0NocWlaemZPT3NW\nU3pwOFdZVlZzTGVsNHlMa2J2SzBleWJIdTM4CnZYTFVtdFErNyt4QnIzVGdsekxy\nZjZmR1lKZDRDbnZCQ3V4TEd1VTE1SVEKLS0tIGRPNGhnMjVKZnpwN2kvbkhNL1Nw\nOFN1azRiTVg3VndBWFREYVAzdFFEK0UKngv/lSquans6wzi3qEAaOXdTttWsayKb\nhicgFbKmwdcI6oW39PfkZLm9G+1/sBSDeEBCO/ysgygR5Qn2oG55dw==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-11T08:37:28Z",
+ "mac": "ENC[AES256_GCM,data:COfWtS5eOQ5cG9cqQyhwyjntpjbo7vzk5g/Gs7/wGZOInxp6eVSGMSxCr7hxaHNZDpcYgMYiAHOoo4GRCQIm0nalryzPd5oLPLZKzNlRdlnpvxQuk8JOB+WPXf3kz5SbjfMU3fLt1/msdGAafZ/sOB9agRozLOc7LBPX1XyTZ4o=,iv:Zw5/T/mSKbh8VSlfbx7xxx72e7j0AILCXx9UglqY+IE=,tag:ZzKtg5bpbz84dJt4lFprIA==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-kv24ix-knot.pub b/tnet/keys/wg-kv24ix-knot.pub
new file mode 100644
index 0000000..a284de0
--- /dev/null
+++ b/tnet/keys/wg-kv24ix-knot.pub
@@ -0,0 +1 @@
+NwSTfO3BMPW/td3XH3Gmdqp67AK342XpoBeytPvwFHE= \ No newline at end of file
diff --git a/tnet/keys/wg-kv24ix-knot.sops.key b/tnet/keys/wg-kv24ix-knot.sops.key
new file mode 100644
index 0000000..be0f038
--- /dev/null
+++ b/tnet/keys/wg-kv24ix-knot.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:4DNUBxKEICekLRDvs3lY01lg5jZzgXz8UODrnJdfKjeMfj0ga3mXrhnDd8g=,iv:gty+DdxQrrryx0ubslGhmbKdgIOhrPIvQPbljKnxGaU=,tag:s/DyEiQOuPD5f9ZR5Or/3A==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrRERlZEFTdnd4K3o3VjZr\neEpjeFZqU1VZRVJpeDBjczU1Y0FZMS9RdUdVCjJtVmx5YXNUUklYVWR2NktyMmtx\nT1BQVGNGY1VaRStIQ2RkZ0MwdE1YVE0KLS0tIEkrVDhpZFM2TGFaQlphanNXOXlV\nR1owNWtuTUh3cUNORzNESE1ZeWxPZ00KZgGhMQWRSWLxs4ckqZY7F2k9uOIO3yxm\nPIp/M7id+FWaDiIO3WbHxy3i5WJHZjGDc92gekXDmkHkqOElb/aSeA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5d0FGNVR0djV6U3BCdWRC\ndFBid2xxYVpjdEpRR3NCcHBPN0o1TTRxNVRjCmQ0NmY0Wk9FYUxlNEhWQmNMalhO\nOTFPNVkyQnAyU2NtY0JsZTBtYks0QTQKLS0tIE0wTUtNOHVSM3NwcG42cGwxYnZV\nNE91M3lJWVkrbFRlOGQzTlArWmQ4cWMKJHQV7bB+X4iViLB6abufC0fSEAeffVYb\nbIdmT5At0cEQ8KC/6q0nzs/l9Slq2BuctZU9+ilBolX30WOU0X5E7Q==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGWEU0QlRXN01nOUovV0U4\nUlA0cUllSTk3U0VRenp0LzRxQU45cU9HZVM0CmF2b2JWclg3cWFLWUswQlJ3SkxV\nQ0FQNTNJSjduekNZQVBPcWlBOHh0c1EKLS0tIGgxNkZLK0FQeFV1a0s0VkNRTzgv\nQys1MTA4Lzg3a0p3cDlXaGlNK3o5dm8K6evHsM38eJLrEwrxIFyhjZaStZ46K7eC\nabU1kSru8yi43sHCtvhAQIK6fiZsu2xpMV+3bPHJvWuzLL3M1enh4A==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-05T19:47:27Z",
+ "mac": "ENC[AES256_GCM,data:XrcylVlNHLGdsnTMBIDKO8WXX6ztkyPT3Nv9WeR2Oz7J1m5AZlO/q4NXzC+hxqau/Vm86xn1Ll5dURr8/s6sVK8osWNzCGXxDH6hwIpZ6phScWI7QYSmvcZ3qNNZPntRFhlCyGIk/Wq6hqJ/kDPUR8FF7nDA21Kxtgscyjm3vv8=,iv:KRuTisD2tK1qUP1bwCul5iLOsfhI+duPK+9w7xn784g=,tag:OmSv1HOpV4wgH97CaRfeZg==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-lhn2ix-knot.pub b/tnet/keys/wg-lhn2ix-knot.pub
new file mode 100644
index 0000000..089a618
--- /dev/null
+++ b/tnet/keys/wg-lhn2ix-knot.pub
@@ -0,0 +1 @@
+zgg36xUxWplgQc7TcxRlzKsF8yiJKNc+aip2iMAchwc=
diff --git a/tnet/keys/wg-lhn2ix-knot.sops.key b/tnet/keys/wg-lhn2ix-knot.sops.key
new file mode 100644
index 0000000..559ab65
--- /dev/null
+++ b/tnet/keys/wg-lhn2ix-knot.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:RymowvC3ItSfOeYddkVVz8lbhxffh1atHmgsGZuA7iqaU6byuatlEZ1Sm/+t,iv:n6QIROfhaKi5lR/2hXciPqf14Z1kPB25wCuvs1oM5L0=,tag:AiiOjawOYlXxygsa0AJDNw==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBORkowY3lmeExVZU9Mdklj\naDJnYWlKbmdzeDZRSXgyOEdrOUhHRWxXbkFNCkJ4S2E3M011ZVliUHU4amJVcENq\nMHpreE9sR0IwSStVQ281TFFLKzRmMG8KLS0tIGpPKzJIeTB3T05IeTVXRnp6S0s1\nQWdwRjdnMGZETTFPTVhIVHRKL2owSk0KKb7CzGkJmsvvcqPFopMAWbxfPc3m0WFE\nYTis7zioBu5GZsMSCeKsE5ZBV7c0zW0QqnKdJ1tb+QWwe2WaiSf+7A==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0MVIxcXA0NHRpT3hVK1d1\nRnRaTUQ5MWltMkdoWnZWWXBsRXpJWkdJdlRFCkZ1b0hUOVkvRUJ6ZklLWHhyQ2tJ\nTGRXMW5BQ3phci9XRHBrQ2E5Sytua2MKLS0tIDBHS08wYVpZbWh4OUZlNlpNVE9U\nRUNxTXlmTW93TDhPZE5DaHFEanBmK0EKrBzJy8wiUvWf1kLjmxPZf9EQO2n7pgTG\nbfINNQA9+Cg432ws8u1tE3xNiKJaCynAlzInVd7aaxteZKQ86dCthQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVVXNnb0VKRUdSYjlyZzBB\nZXJzSUltR3pubWUvWis5SEw5bjdSa2NTM1NVCkFDSEYra05Ibk9vRmpOVnJhY2Ux\nV1ZvVEFpUjhTMjNRbHAwK1ZKM1BTUTAKLS0tIHY0T2FuVTNQUDNlQ1RqV21XeFV0\nOWplbFRYMFNOZkdiSGt4NXJxM3ZTaUEKkkucGDCxRF6EdOm8Nj3DpU79mjcoshTQ\nFXb9w70edvYVf55ImFE2tsCbP/O/IBZcq5me6jwe7Dvomd2iTBCnGA==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-08T19:30:55Z",
+ "mac": "ENC[AES256_GCM,data:piTXwlYoyoQrAVY4hWpVeJoeNdLDphVbsMT6FeTN0wYh2JwzSey+wW2eSOdtgEEj4hUAs6BVAbeM4apZUHfOlJu0TNf89OV2dLEm08FPBzxFE3wvamzP7sUAEkyFnJOU+zIZES6UStm07OjzYDjxeQV7d6tvUj/YIOL01DuwjN0=,iv:VtOXxF37Gd2mQZhwY0XdLLBSYR6JairmSsat9QF8/84=,tag:7z5+egwADcLAkrsNbUxpdg==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-lhn2pi-hash.pub b/tnet/keys/wg-lhn2pi-hash.pub
new file mode 100644
index 0000000..56338bc
--- /dev/null
+++ b/tnet/keys/wg-lhn2pi-hash.pub
@@ -0,0 +1 @@
+ymXw3gfqTax/V3yjmgeTsbheI3W6csJx10Fbs9jENRs= \ No newline at end of file
diff --git a/tnet/keys/wg-lhn2pi-hash.sops.key b/tnet/keys/wg-lhn2pi-hash.sops.key
new file mode 100644
index 0000000..a7d5161
--- /dev/null
+++ b/tnet/keys/wg-lhn2pi-hash.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:u2rmEIA2HyZpALzVhgX5dbqbfITacWxKpAKuPcem5gfUBAFtqb2LcmifSlU=,iv:7yN2XDzm0t51laTNte+ShmtvS06a6MQE2Gby7l4/+sc=,tag:dr+YWAmL/F+PEmoTmBaWdQ==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3cG9qYXdHdVREeGx2V3hO\nam9zSlFyU3J2NWFGT2JPcGhpUDBMc0tsOFFJClZPeVNkWVJEOVRyaUFISWsrd09T\nSGViZEFaS2FHWXY4UXh1c2hGWDNhYm8KLS0tIHlnZ05vdnpJb3pzMnJjMGd3VVBn\nclU0WGwyVnhZeFMzZlI4TUdGbndhVFkKTu4buOBaZ6XExPBKYPF5px7paSde7Pfh\nOcz47kw1tUZULEfz/WWPyfTYIpA2Ma2fuI91eg+q60wd8hTN1YufCw==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsczZOR3E1QjFJN1dwa0xu\nQmZaRUFjWVd6RGdSajhsOXRmWDNxcWlPTjFRCmhEL2hFRzNPMW5OSERIeGI1VTBG\nU0RBSENPSUxqQjlnZndGdytIQUszOVUKLS0tIEJPR2RJNlNpZ296YUExMHd6SHJy\nOHkvNUI1bEpBb0tScHk4d3VWL04vZ3cK1SII823BAPLefSUAlPP5JlL66kfpRU42\nkf6ueQGTB7L98JsbMdEh87TBvJPwgkySWFMybqHXFP1DvBOPV8FXXA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLVEdtRElPM1JIYXRKUk9n\nOENtRVd4S25oQStEZHpBbDlPRVJRMnFjejNvCnh6ZFFqUGQ3NVFwREdyYzVUcVNa\nVkoyTFQxaityZDJRQkU3UUQ2WnVvUlUKLS0tIEY5c2tyc3RmSjJwY0RuVVljMURw\nSnVMMDBzajRuYWxOcXAybGlzbXhyR00KQ1Y5nIHHxnqTGrVEWzVQzDDhSdj7Pniw\nbIPsF8N/OVly1iXdFrmrMeaQnrGQzX3PaHzUlEaclWvqOQCWO/WDJQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-09T07:23:56Z",
+ "mac": "ENC[AES256_GCM,data:Ms7l1nRpNSLGBOvsPxYzaP7m13OtTc8TV32PS+LsX05TL+sPC5eeTq3k96qwbUQ4JTl7hdRQ01tKPuYLXZT+x7oL51DFvHvfrA0Ov2zQHsaxlltZ1GBzf40FPdSqpyjvUta641G0khy0ayTdiE5nP2QbUqIMoNXeQZCv80NTxb8=,iv:DyOjwzZr4zdLujmXLW1t8Sd6MQ3dcY2G6nSztbAkPLE=,tag:G0C7JmToaWihwFjbmJkBjQ==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-lhn2pi-knot.pub b/tnet/keys/wg-lhn2pi-knot.pub
new file mode 100644
index 0000000..84ce44a
--- /dev/null
+++ b/tnet/keys/wg-lhn2pi-knot.pub
@@ -0,0 +1 @@
+wSdMApZR9qy8bRFWJLA8ydI0ecnbBhldp2owuh2TDDI= \ No newline at end of file
diff --git a/tnet/keys/wg-lhn2pi-knot.sops.key b/tnet/keys/wg-lhn2pi-knot.sops.key
new file mode 100644
index 0000000..daf9c29
--- /dev/null
+++ b/tnet/keys/wg-lhn2pi-knot.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:7DEU5LGC62dhhlEd413UwUB7an1OrEp4RVB1f7mYVmrXqruM3wbwY7V8g3o=,iv:BfM9bBeHO8fYRsySkQXkn0DciXVDe7IbLLGmsmd2aok=,tag:NtVVLsL3Cr+WboBJVsTq/g==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrSk1ISVU5d0E0ald2NmhU\nS2dNazRRQVExODBPM0VGSjc4S1Q0NDhMYnlNCnhYb2Jvejc0YzNiMzFka0FvbWlH\nclNGb2MzMFRhY2t4TUFsb2dwREJ1aWsKLS0tIDNoUjFQNDVHeG5ia3NqRGdiQ1Fr\nVVhObTJ2WWEwS2NLQk9pQzQ2YWc1aGsKVoM3E9RfpliTkBlbol0zAcmS8+cvh0uu\nmvcDGC80IGGBP+YaMsQD+RJq+R+IEhX0EbGgqka+CeXaaNnKiW/hig==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNRFRKNjdzOW9SQXBWTDM1\nTzYvWWFzOGZPczN1cEMrY0tTVEROd2ljQjBJCjM1TTZVL3VFY1NTSXUvSkdlMHZX\nVTI2QmFqbW9qZkd0VmRBQURHYlI0UlUKLS0tIDdnYjNucTBWeTdPK2RDL0hVNWJk\nWGlwV2NqUGpRYzgzYVJ4QS8ydll5UXcKki5iqRKGTGYBZoFREqBCqXcEEkHTyHUM\nGKu6iNzl6TbEsAGZAle9S0xUVdA7aoVqkpzoLew3NMretlM3PoZ/og==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQZXpKOWx6b29jWE5TVEFH\nZHJOYko1WnBSWHNMNTFNYWRndHR5YXNWT0QwClpyOXJDWW5rN1RQTlE0ZDhleGVp\ncG1pV2t4eEpBZjE4cmhJQU1uclZzY1kKLS0tIEFjL3FoNkxiWnlSOW0yMFNEWURj\nZjM3cUs5elZodnJGajdEcGw3L2pTcXMKohaoY7MGQynLr1B1peUoEmipknyJlPEQ\nQRIsR4fFmhDa6yOo5uryG8y7Q83m7HrCij2N49o8svf4RQXoVoSzkg==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-09T07:23:53Z",
+ "mac": "ENC[AES256_GCM,data:fITkaXRTBzQvV4lFH2IZg3341xCF7WtoX4KXC7udRhjkwe09INMzGZX3hOihwIXljgZYGXqJW0MzfqbzvX2EKHURx7mmfJbWPSdhoGu2dEnJrpSVnlPhuAXaqBaRV3MyACZhvnmyjmoXyCaaIQCgd+RZP4tzmFgjFtu3M9uvg1U=,iv:odCTCemCSL/HQqb7pHGw2+WJodY8mb7VgqOeA8Qm7Ig=,tag:rTEpcebHPr4Vk0UPmIo18Q==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-node1-hash.pub b/tnet/keys/wg-node1-hash.pub
new file mode 100644
index 0000000..4bbd8e1
--- /dev/null
+++ b/tnet/keys/wg-node1-hash.pub
@@ -0,0 +1 @@
+/Ov197jncsnaBm2Yn3MBUBrrz5jheAVjgpxsNYoTRS0= \ No newline at end of file
diff --git a/tnet/keys/wg-node1-hash.sops.key b/tnet/keys/wg-node1-hash.sops.key
new file mode 100644
index 0000000..8e2c716
--- /dev/null
+++ b/tnet/keys/wg-node1-hash.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:j8LAzxtyd4SoVzi2ig/YtgW6G5pHKxrPD2N61SzXq3sFdFWANg/4l0EMg74=,iv:Pn3H7Fu3H2KPXWTM8ncWej3KZFGJ4x42aj61SRgCe9Y=,tag:D5mcZezJOnIYJW6ABc8iCw==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKc0drbURPT1lFQWRyL2FG\nME12VDEwODV6UFhCdXk4QlVVQXdiRjV0akFnCkdEK1NMMEt0QVlVVFkzeGRCRGQw\ncDkydzVsYjJBYU5SdnhmV1lybGtNclUKLS0tIHpwYnFrMFlHcVJEYXJqWXpwMjJu\nSUMxYVBoZUxTSVdKRWQ4RkNvOW1xUUEKy9gky3IgaDROuPRKrJ7dNiuXjWo0Gipa\nBJhtDg/emS1A12q1E5/801hAhksPXBZc5Cil46MnHsUBTgLcEsJQEQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBreEd5TENmck45dyt5ZFQ4\nbUJhdWZDaGpaUVNWT01BTytJT3l4czVrUWxjCkpJdlNUQ084UVd3T3JUdGs4RlVH\nenhLK2ZEY3IzM2ZQYy91R2tJcWlxSzAKLS0tIFlOSTdwUXk5K2FubFIwaFQ1RU1Y\nMkNKRG1hZG4yL0dhWGRNSEs5UVFIVXMKf1i8AR392jtJbDMLvJ7cIdv11mAENTuX\nTQSfD9RClRFsY03Imh8KYvZlwB0MI+q4pV/hgldU1c+7uX2ctOZoCw==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhOTBHWkwzcUU5WnRHM0xs\nMC9DVlQyQjJLMEUrQnQ1WjVYazJGbm8wRnh3Cm85VXRBMWtyZmpKdWFmWGoybWtO\nUzd4bkhWNGZtTlpuR3NJbERuQmxVVDAKLS0tIGxyeUdOaitVVzhIRGRvNjdNenF1\nZDdmZXlwdDU3ZFdvRVd3cWhUNmRVL2MKthry9brj6iurA3iO7eeIT3R44oFjzR8C\nLl6AxDwwURkoynefizdrjZ8xnIUbOeoCxPlWKZ0eZcGAX10ZV8nSvA==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-09T07:22:49Z",
+ "mac": "ENC[AES256_GCM,data:oiQs7BY1zwF6HAEwMkz4nWV4zv2c7shtABtFR4tiwfSs3nWm55OS2LaJ5Je59z3TI1CS2dbaaU0yV/MQS4rEjN4XJatXSLLGN3Xr0W6OoUKbwU6q3ktrEGH5PiRJ7dJeTWyHg+eP/7YIKoeani8kugwszG9e+b7JQY5DYfxi3JQ=,iv:M4qNz2Y9Xmj0QqfUT6w1p9onEqlJdR36RhOI0QE0JxE=,tag:g+WKOD3W14AB0fewTPbwOw==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-node1-knot.pub b/tnet/keys/wg-node1-knot.pub
new file mode 100644
index 0000000..3c4833d
--- /dev/null
+++ b/tnet/keys/wg-node1-knot.pub
@@ -0,0 +1 @@
+kE+eMVy+NoPlM+i70ZGg369Aef/OdaMFk2WrWYxXyyc= \ No newline at end of file
diff --git a/tnet/keys/wg-node1-knot.sops.key b/tnet/keys/wg-node1-knot.sops.key
new file mode 100644
index 0000000..80ede02
--- /dev/null
+++ b/tnet/keys/wg-node1-knot.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:jtxfzs0fHZ74yo+e5yZ2X9CVGrJj7yTegBM/C3TreWRGPgQBnVlN4xKu0LM=,iv:DInwhViiCiLmO62/VlUQ1N4zLFGrqD9Gy78ytzGh2V4=,tag:YHiupWOq3Rdhu+JbjpnO2g==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtQTdNeWdBMWc0TEttWmZS\nWTlSbDlKWFFwZUhtMkVuNWxTM1M2S2I0TG1vCmpQS2IyOTRxV3c5VU5ySGFVeXIr\namJUWnhRZjNYakcveFllUjRmVVllaE0KLS0tIGZ5ZTlGWXRDLzdqcElIUGhUZlY1\nRHdRdW0yTklQNmtZby9GUGE1NlZZamcKSiZ1FJDWp6zu/eDDX0fL7zAyGm/McOND\nPjrzrNgE7f1s2DokO9JlpXd0FOFARbXzBkui7I8z9L+kK3cVKFZnJg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMcHdaQWRiRGsxY29nQ0Vt\nZHpMMlhQYXpHc1hmc0IwN1RKek9lRnVScHk0CmpGRWR5bFBzdDRyOVMyMWRQdDBi\nekkxZ2JLb1FVZVgvUnRCbVYxZGFlVlUKLS0tIGpwMHNxR0tpTUMzbE9rTEdSTy9k\nNXdYbnN6MmdPcng5UDM5b3hDL3lnbGMKxET/pWHXjGsqW7MMGGGHrTNxSyZbVHkW\nujtaVvOiFaDvuMXDH4M5F/XB6xI5b2nayhKllWEv796hec8IWtgAtQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhVHNzTXdHTnQ0dW9HcFJR\nQ0tqMVBHMERzKzM2UzRoU2VLTnJOY1VIQXlzCnZSb3ZvK2hBT1RwaWh5VXBGKzhR\na3E1VjhrdnhyVUxCRDkvUit2MG9yT1EKLS0tIDhDMmlKeVZ2d29xYWF3blh1a0Qz\nZllCbTJNQlRLVWxnTm8xL2ovckRBc2cKj+1pGlPM8jKI2V4FtPuu97und33proBZ\nl/++XfhOZ2sJw+1cawn85wIKcDW+YxQNqoN2hXCzsIadq4YvMTLtvg==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-09T07:22:46Z",
+ "mac": "ENC[AES256_GCM,data:89f44cS/RHP+/LSfmkycZcpytNvijGC2KSqxr000eORdOBBCtL6F2YjfrTXYcZBUm6ROqPeRXJXiswJ5uDevCuc78nIfMASzrDLKWJSxxv551uB98hlJ3/dtDoBvAH2tDdN9Yn0dpTmIcL/uHyFMDLCQ6we1GBMcp3WwN99FlWM=,iv:/39nYzPAdEyaivjX+uVTbCZP25RpZ92eCsRJ9YXhWcM=,tag:B1KF0htZ4wYJ+QMM8Pi8XA==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-node2-hash.pub b/tnet/keys/wg-node2-hash.pub
new file mode 100644
index 0000000..5ee38e6
--- /dev/null
+++ b/tnet/keys/wg-node2-hash.pub
@@ -0,0 +1 @@
+PuATSsueI3tabhX2r93zMrP0mF4uK298xBbWl8CnAXo= \ No newline at end of file
diff --git a/tnet/keys/wg-node2-hash.sops.key b/tnet/keys/wg-node2-hash.sops.key
new file mode 100644
index 0000000..1ba1b96
--- /dev/null
+++ b/tnet/keys/wg-node2-hash.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:mgxmsY9tfZZrpG4/6F8tIompGg5oenEs7V7X4Ndqly4Li/fzusVYjVzRZ6A=,iv:sqT9EyzDvm2MaJyLMST1m4yngm+sQGU6F9TelVHG0/A=,tag:4u6a0vfZ0RS2ENpXE0/yFw==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuaGwySHA0Sno2KzU0NWFo\nc0Fxbmg5bUJtN2hyKzlHS1dLNGVWQ09kbHk0CmtwdnY5VHRtdDBKYVQybks1R2tu\nU3JLZFhRUEZ4NkVDSDIvWDlyNTRKT1UKLS0tIExMaC9yRjFiSnhsU3NVVk5IVW1p\nNmJ4TGdYMXhWZjVRVm1LTHZ1RzhiLzAKG9Iw3faSAxtr0+snH1rGQuUql8PdDd1w\nmzxBg4jssFbypm6iIPNhQaU6xdVEGRxIPbODSF+Lf0kQm7cMcmLsjw==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCZFQyMG5DeldiSFYrNTlt\ncmU1OXkzZ0dvazNWTHhaMmVqbzJ4cU5ZS0MwCkhSMFE2Vk1CSXBHUWlGTWRzQnND\nRlhBeWgzRjEwOHlwNUNBN3QxSmZwQTQKLS0tIFpiTURTSU85WkN5QmlyTDhNdzVj\nR0QwbkJrTHo0S0lka0pXZEFpRzA5aFEKJFlLoumD5lerCGD/mQ9Y7U9CIvFAIYFe\nMeEZifwKVh63qfiyLeki5Mu2OA0NllAb/VvDgjheayxa6DTQcGhzYg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMZmp6RWZBSXp2RjdOQlhq\naGpDaCtpamJ2ZUxzOEtHT0JqMXNHYTJxTVRvCmJDd0wwYUpsb3hNMDZKS3o5cE9q\nWm8xcEF6VDhjRENHUWJqN1lPYWE0MnMKLS0tIEwwdVFXbG5Qd1Y0cTlJT0Y2Y1gw\nS3ZFV1RrOE5aUDlQcittd012ak5EUmcK0LQKyh4/KAe9z0jVQftMi1Va+jAebYHF\nNVenCd0b5BkcaTxNAJX5aci3w/u75B5Pr5Rvsi8Ey9OVZxw/EtWZzg==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-09T07:22:49Z",
+ "mac": "ENC[AES256_GCM,data:cSJEkxCIBe3V6ZHlSMLW9ucjCaVpcVOw18dkWrFoy4lVDYWEFOIZM4r8FPfvOd/gOLBTh4c69+vCZwtY//flmCv9qK1VgQoNp93N/v9jvaYn30nMSDkIJ7NfIaGCXIGlpf4492fkloIZU0pp8zDyOtVy0aDFyveMMtZO4Mdqzlg=,iv:8G7k6MofjgKuXNFMkWhhU1JfTovoGteGKSUqgkSnuCM=,tag:+RjxDwLL7funW159CyEEKg==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-node2-knot.pub b/tnet/keys/wg-node2-knot.pub
new file mode 100644
index 0000000..5163617
--- /dev/null
+++ b/tnet/keys/wg-node2-knot.pub
@@ -0,0 +1 @@
+DNO7GiwgVGQlFN7eZd4da/X61rjVOhqzsw1wp2ZExC8= \ No newline at end of file
diff --git a/tnet/keys/wg-node2-knot.sops.key b/tnet/keys/wg-node2-knot.sops.key
new file mode 100644
index 0000000..1e10145
--- /dev/null
+++ b/tnet/keys/wg-node2-knot.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:qNS/hJSIEX56fBLqIHdYqfuJnXhAdHCquWjIbbiYWyK4qer8nHUiN/ECEDY=,iv:nGN1fZ5IUwE/lnc40lpVPsO1eWdZJNM6a7tdEMuvzB4=,tag:cKnpRqGF60L5rJyc5JdOTA==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBVmR2aE9WaStDOUlYSTdD\nQldoaENPU3E1VllKUlNiRFc3L3ZDNkJVaXpZClR6ZFZyNVdvVTJhbCtOTnJuK2ls\nVzA3dGt4MXgzeHJtbzZoQlJMVzNsMkUKLS0tIE9oMllEVmpwV1dGSUhya3lTY1NS\nZjZWQkFnczJqN0huemw4cktDY25RT3MKWp1XKVo1VoyOqmJYID0VcWsUtybtsZXV\n2XCVXdnMsgNPHwOj9z9XYJW4bYmrLqwGmy49rHPk4MVD17PqIFOHPA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsYWJKOVIrY0FsWWppdFdI\nZmFpTHgzUnUzbCtLMVdiVjRMTlRmOTdzcmtZCkZENHBtYUk5WUMvN0JBTTFpQk0v\nSmlGZDhFNWs0VXBmTUdWd1lZRkRJTmcKLS0tIEh0NTlwOFp3eUhvbVRZa2lXc1hF\neHVyWks5OTFrK0FmQTdzaWdJV2RhbmsK0u9aewnuhSLJ1dnrB7xVy7MyTPxHZUMl\nA7KA6YStAlZ1j1IRkhWATbcA20NMPvlBrdfhXSsTUPOapRKywoIrQg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQVy9VOUk3b3N4L3g0UXNa\namtxaTZYRE0zUE1SWG13Q0hqdjBWK3hsTEdzCjBMc3hWRmE4Z3dhdWdVU2xMTGtY\nUXA2dlFRU2hYemZFN1g2d1JJNjJsQVUKLS0tIEczdEtoVGhVVnI0YVJ5TXBDRUsz\nTXFtYlpQY25nRlA1Mm9TSkFkYk1Xb1UKgNrWy+yhx6/GnQuRqAX7Ylvgw2plfzE3\nk9UVn2YK8QuG2ztskc9ONooFXj2xFaHuhKz77nOY8uKjya9X5sG49A==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-09T07:22:46Z",
+ "mac": "ENC[AES256_GCM,data:FsyFuwmYnMXY7QkOqrJH99fCsnuH3uMJxiZQHt05PuPAI9lBEpTMtm3bY4jjC/EH+RE2qdAM49Nx6KwSXJenbQtz6rHNV0nChA3ThP2eW0KweG8MVtAC1icwFVijErNmPqkiWoVhLUT61sLDY2cwEvKR7e0gNOO9EH4fBw1exPA=,iv:hsJknC0oki5iKcqbEDPRxjxviYmJKqtNVACptJQqMbI=,tag:5eh6owOTs9P01eUtnUYL6w==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/templates/bird-tnet-pre.conf.j2 b/tnet/templates/bird-tnet-pre.conf.j2
new file mode 100644
index 0000000..ba012cf
--- /dev/null
+++ b/tnet/templates/bird-tnet-pre.conf.j2
@@ -0,0 +1,7 @@
+define tnet = fdb1:4242:3538::/48;
+define tnet_router = fdb1:4242:3538:ffff::/64;
+
+function is_tnet() -> bool
+{
+ return net ~ tnet && ! (net ~ tnet_router);
+}
diff --git a/tnet/templates/bird-tnet.conf.j2 b/tnet/templates/bird-tnet.conf.j2
new file mode 100644
index 0000000..57e557a
--- /dev/null
+++ b/tnet/templates/bird-tnet.conf.j2
@@ -0,0 +1,39 @@
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ password "trygvis";
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ print proto, ": import accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": import reject, reason=not tnet"; reject;
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ print proto, ": export accept, net=", net, ", from=", from, ", gw=", gw;
+ accept;
+ }
+ print proto, ": export reject, reason=not tnet"; reject;
+ };
+ };
+}
+{% for p in tnet_bird_peers|default([])|sort %}
+
+protocol bgp tnet_{{ p }} from tnet_tpl {
+ neighbor {{ hostvars[p].tnet_wg[inventory_hostname].address }};
+ interface "tnet-{{ p }}";
+{% if tnet_bird_peers[p].rr_client|default(False) %}
+
+ rr client;
+{% endif %}
+}
+{% endfor %}
diff --git a/tnet/wg-keys-genkey.yml b/tnet/wg-keys-genkey.yml
new file mode 100644
index 0000000..fe0e976
--- /dev/null
+++ b/tnet/wg-keys-genkey.yml
@@ -0,0 +1,26 @@
+- set_fact:
+ priv: "{{ lookup('community.sops.sops', 'keys/wg-{{ inventory_hostname }}-{{ item.key }}.sops.key', empty_on_not_exist=true) }}"
+- when: priv == ""
+ block:
+ - name: wg genkey
+ shell: wg genkey
+ register: new_priv
+
+ - name: wg pubkey
+ shell:
+ cmd: wg pubkey
+ stdin: "{{ new_priv.stdout }}"
+ register: new_pub
+
+ - debug:
+ msg: "{{ new_pub.stdout }}"
+
+ - name: Save Wireguard key
+ community.sops.sops_encrypt:
+ path: "keys/wg-{{ inventory_hostname }}-{{ item.key }}.sops.key"
+ content_text: "{{ new_priv.stdout }}"
+
+ - name: Save Wireguard public key
+ copy:
+ dest: "keys/wg-{{ inventory_hostname }}-{{ item.key }}.pub"
+ content: "{{ new_pub.stdout }}"
diff --git a/tnet/wg-keys.yml b/tnet/wg-keys.yml
new file mode 100644
index 0000000..1980b97
--- /dev/null
+++ b/tnet/wg-keys.yml
@@ -0,0 +1,12 @@
+- name: Generate Wireguard keys
+ hosts: tnet
+ connection: local
+ gather_facts: False
+ tasks:
+# - debug:
+# msg: |
+# ansible_host={{ ansible_host }}
+# inventory_hostname={{ inventory_hostname }}
+ - name: Create Wireguard keys
+ loop: "{{ tnet_wg|default([])|dict2items }}"
+ include_tasks: wg-keys-genkey.yml
diff --git a/tnet/wg-links-link.yml b/tnet/wg-links-link.yml
new file mode 100644
index 0000000..6f1bb87
--- /dev/null
+++ b/tnet/wg-links-link.yml
@@ -0,0 +1,53 @@
+- notify: systemctl restart systemd-networkd
+ become: yes
+ file:
+ path: "/etc/systemd/network/50-tnet-{{ inventory_hostname }}-{{ item.key }}.netdev"
+ state: absent
+
+- name: "Make netdev for {{ inventory_hostname }} -> {{ item.key }}"
+ notify: systemctl restart systemd-networkd
+ become: yes
+ copy:
+ dest: "/etc/systemd/network/50-tnet-{{ item.key }}.netdev"
+ owner: systemd-network
+ group: adm
+ mode: 0640
+ content: |
+ [NetDev]
+ Name=tnet-{{ item.key }}
+ Kind=wireguard
+ Description=tnet link to {{ item.key }}
+
+ [WireGuard]
+ PrivateKey={{ lookup('community.sops.sops', 'keys/wg-{{ inventory_hostname }}-{{ item.key }}.sops.key') }}
+ {% if item.value.port is defined %}
+ ListenPort={{ item.value.port }}
+ {% endif %}
+
+ [WireGuardPeer]
+ PublicKey={{ lookup('file', 'keys/wg-{{ item.key }}-{{ inventory_hostname }}.pub') }}
+ AllowedIPs=::/0
+ {% if item.value.endpoint is defined %}
+ Endpoint={{ item.value.endpoint }}
+ PersistentKeepalive=60
+ {% endif %}
+
+- notify: systemctl restart systemd-networkd
+ become: yes
+ file:
+ path: "/etc/systemd/network/50-tnet-{{ inventory_hostname }}-{{ item.key }}.network"
+ state: absent
+
+- name: "Make network for {{ inventory_hostname }} -> {{ item.key }}"
+ notify: systemctl restart systemd-networkd
+ become: yes
+ copy:
+ dest: "/etc/systemd/network/50-tnet-{{ item.key }}.network"
+ owner: systemd-network
+ group: adm
+ content: |
+ [Match]
+ Name=tnet-{{ item.key }}
+
+ [Network]
+ Address={{ item.value.address }}/64
diff --git a/tnet/wg-links.yml b/tnet/wg-links.yml
new file mode 100644
index 0000000..a050547
--- /dev/null
+++ b/tnet/wg-links.yml
@@ -0,0 +1,12 @@
+- name: Install Wireguard links
+ hosts: tnet
+ tasks:
+ - loop: "{{ tnet_wg|default([])|dict2items }}"
+ include_tasks: wg-links-link.yml
+ handlers:
+ # Has to be restart for now, hash doesn't support reloading networkd
+ - name: systemctl restart systemd-networkd
+ become: yes
+ systemd:
+ name: systemd-networkd
+ state: restarted