aboutsummaryrefslogtreecommitdiff
path: root/tnet
diff options
context:
space:
mode:
Diffstat (limited to 'tnet')
-rw-r--r--tnet/README.md8
-rw-r--r--tnet/bird-deploy.yml25
-rw-r--r--tnet/bird-gen-password.yml1
-rw-r--r--tnet/bird-gen.yml16
-rw-r--r--tnet/bird-install.yml11
-rw-r--r--tnet/group_vars/all/bird.sops.yml46
-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/conflatorio/bird.yml5
-rw-r--r--tnet/host_vars/conflatorio/wg.yml7
-rw-r--r--tnet/host_vars/coregonus/bird.yml4
-rw-r--r--tnet/host_vars/coregonus/wg.yml5
-rw-r--r--tnet/host_vars/hash/bird.yml12
-rw-r--r--tnet/host_vars/hash/wg.yml25
-rw-r--r--tnet/host_vars/knot/bird.yml23
-rw-r--r--tnet/host_vars/knot/wg.yml39
-rw-r--r--tnet/host_vars/kv24ix/bird.yml2
-rw-r--r--tnet/host_vars/kv24ix/wg.yml3
-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.yml5
-rw-r--r--tnet/host_vars/lhn2pi/wg.yml7
-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-conflatorio-hash.pub1
-rw-r--r--tnet/keys/wg-conflatorio-hash.sops.key28
-rw-r--r--tnet/keys/wg-conflatorio-knot.pub1
-rw-r--r--tnet/keys/wg-conflatorio-knot.sops.key28
-rw-r--r--tnet/keys/wg-coregonus-knot.pub1
-rw-r--r--tnet/keys/wg-coregonus-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-conflatorio.pub1
-rw-r--r--tnet/keys/wg-hash-conflatorio.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-conflatorio.pub1
-rw-r--r--tnet/keys/wg-knot-conflatorio.sops.key28
-rw-r--r--tnet/keys/wg-knot-coregonus.pub1
-rw-r--r--tnet/keys/wg-knot-coregonus.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-knot-rtdbts_l1.pub1
-rw-r--r--tnet/keys/wg-knot-rtdbts_l1.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/keys/wg-routedbits_lon1-knot.pub1
-rw-r--r--tnet/keys/wg-rtdbts_l1-knot.pub1
-rw-r--r--tnet/templates/akili/bird-tnet-pre.conf20
-rw-r--r--tnet/templates/akili/bird-tnet.conf48
-rw-r--r--tnet/templates/astyanax/bird-tnet-pre.conf20
-rw-r--r--tnet/templates/astyanax/bird-tnet.conf48
-rw-r--r--tnet/templates/bird-tnet-pre.conf.j220
-rw-r--r--tnet/templates/bird-tnet.conf.j292
-rw-r--r--tnet/templates/conflatorio/bird-tnet-pre.conf20
-rw-r--r--tnet/templates/conflatorio/bird-tnet.conf48
-rw-r--r--tnet/templates/coregonus/bird-tnet-pre.conf20
-rw-r--r--tnet/templates/coregonus/bird-tnet.conf42
-rw-r--r--tnet/templates/hash/bird-tnet-pre.conf20
-rw-r--r--tnet/templates/hash/bird-tnet.conf76
-rw-r--r--tnet/templates/knot/bird-tnet-pre.conf20
-rw-r--r--tnet/templates/knot/bird-tnet.conf121
-rw-r--r--tnet/templates/lhn2pi/bird-tnet-pre.conf20
-rw-r--r--tnet/templates/lhn2pi/bird-tnet.conf48
-rw-r--r--tnet/templates/node1/bird-tnet-pre.conf20
-rw-r--r--tnet/templates/node1/bird-tnet.conf48
-rw-r--r--tnet/templates/node2/bird-tnet-pre.conf20
-rw-r--r--tnet/templates/node2/bird-tnet.conf48
-rw-r--r--tnet/wg-keys-genkey.yml29
-rw-r--r--tnet/wg-keys.yml12
-rw-r--r--tnet/wg-links-link.yml62
-rw-r--r--tnet/wg-links.yml12
120 files changed, 2183 insertions, 0 deletions
diff --git a/tnet/README.md b/tnet/README.md
new file mode 100644
index 0000000..d65106e
--- /dev/null
+++ b/tnet/README.md
@@ -0,0 +1,8 @@
+Generating link-local ULA address:
+
+ echo fe80:$(uuid -v4|cut -c1-4):$(uuid -v4|cut -c1-4):$(uuid -v4|cut -c1-4):$(uuid -v4|cut -c1-4):$(uuid -v4|cut -c1-4):$(uuid -v4|cut -c1-4):$(uuid -v4|cut -c1-4)
+
+Generating Wireguard link keys:
+
+ from=conflatorio to=knot; wg genkey | tee keys/wg-$from-$to.sops.key | wg pubkey > keys/wg-$from-$to.pub; sops -e -i keys/wg-$from-$to.sops.key
+
diff --git a/tnet/bird-deploy.yml b/tnet/bird-deploy.yml
new file mode 100644
index 0000000..9759c01
--- /dev/null
+++ b/tnet/bird-deploy.yml
@@ -0,0 +1,25 @@
+- hosts: tnet_bird
+ tasks:
+ - become: yes
+ template:
+ src: "{{ inventory_hostname }}/{{ item }}"
+ dest: "/etc/bird/{{ 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-password.yml b/tnet/bird-gen-password.yml
new file mode 100644
index 0000000..501c5ef
--- /dev/null
+++ b/tnet/bird-gen-password.yml
@@ -0,0 +1 @@
+- tasks:
diff --git a/tnet/bird-gen.yml b/tnet/bird-gen.yml
new file mode 100644
index 0000000..74a83b1
--- /dev/null
+++ b/tnet/bird-gen.yml
@@ -0,0 +1,16 @@
+- name: Generate Bird configuration
+ hosts: tnet_bird
+ connection: local
+ gather_facts: False
+ tasks:
+ - name: rmdir files/$hostname
+ file:
+ path: files/{{ inventory_hostname }}
+ state: absent
+ changed_when: False
+ - template:
+ src: "{{ item }}.j2"
+ dest: "templates/{{ 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/group_vars/all/bird.sops.yml b/tnet/group_vars/all/bird.sops.yml
new file mode 100644
index 0000000..334634f
--- /dev/null
+++ b/tnet/group_vars/all/bird.sops.yml
@@ -0,0 +1,46 @@
+bgp_password:
+ conflatorio-knot: ENC[AES256_GCM,data:PBE4TnHXDw==,iv:Kj6SnVvwsYUrKt0Vqd76j6IaxufLP0Rf+Bw3i1M/3tI=,tag:9jPWHiqqTHSG8BMQ/k4pEw==,type:str]
+ coregonus-knot: ENC[AES256_GCM,data:WgO2B0FQVQ==,iv:zhaCbX6M7fMMHr63KgIrOcpnI9dmPJLTOlXJVqYkFb0=,tag:Y2H+RjuPGBMUFJJFEeL5Yw==,type:str]
+ hash-knot: ENC[AES256_GCM,data:SI2yYLIepg==,iv:Icky8rMsLQj77zu5vdqCZBWoHiYlNbIwlAvD5m+DH7A=,tag:9PImx9SXYuusNhZeWVPV7g==,type:str]
+ knot-kv24ix: ENC[AES256_GCM,data:z7SG+zuQ7g==,iv:APPjOs+MH9c0xfxmGEMoAQq00i847jGdbpoSkgwbpY0=,tag:jkgb7PlAF/kb50+i+3WEGw==,type:str]
+ knot-lhn2pi: ENC[AES256_GCM,data:k/pQyjnQyA==,iv:oW9t8Pruu/k/qIG6uG8Ex61QHerYhU09Ns0AI8NKkJA=,tag:H0A4jr/hBcGTuKeNV2zB1Q==,type:str]
+ knot-node1: ENC[AES256_GCM,data:rY0x5yu9zw==,iv:TyyhW1IwtkcU2q2y6ACgEqNEqMJ64PyMQ/kkkyCJB8E=,tag:fepqIEhEbrNFUr9f1iOMAQ==,type:str]
+ knot-node2: ENC[AES256_GCM,data:EE/JkIj23g==,iv:Gv1kd+lOFPir3z0TTlRdeOMffCQreBA5HiCHHwOUu+M=,tag:hwmABQCkbvQ6kSVchUZ6+g==,type:str]
+sops:
+ kms: []
+ gcp_kms: []
+ azure_kv: []
+ hc_vault: []
+ age:
+ - recipient: age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxb2RRcHh2UVN0U0ljeFgr
+ VndTMkRRR0Fzd042R0F5RnZpelZRNmVIcG1jCklHMkFoVjBhb3NrMjB5c3dMcjYv
+ Zkw5c3hIeElQOW54WDJ6a1MySDc2bGMKLS0tIEt3TTdLVkx4UFRCOU5WcWxjbXky
+ b05uMC94dUtxWE1qWHRTbVlubWQ4N1UKcPsMrAWryuaHar6qF/JL40hMkhkGoVsv
+ fj1FGz2xoI1FOtnqU8/LCOZF7ncUjzJS0m2GxiA/WDRLeLSWAi84vg==
+ -----END AGE ENCRYPTED FILE-----
+ - recipient: age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6MEJWVjF4cm04UU44bU9N
+ VEpmVnVDN1VIcm5RVk1VcThqNjFQQ3EzNkdjCnFGcVBMb0NiTzFSUm1qckkzRjNR
+ WEo1ai95L1B2bEpCYnB2blNyOFBwR0kKLS0tIFEyWlRZbUZWdnR0dzVCc0NraHpj
+ OUxUbWp4T1E2TTBTN0NRSDdKaXlJd2cKMwUjax16RyxnQRpxtZDjnrJx7CX06Z37
+ T5GfLprSS4vXGfQkuJTDn7a/v8DfftOBL9ubclIet9cOD8YzIcAiZw==
+ -----END AGE ENCRYPTED FILE-----
+ - recipient: age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmZEdhUlBEV1FBeGhSNVNG
+ YkQ1dmlieWlVMmMvUERNTnJlcVpmV3lBa0JjCnBJUWJmUmp2d01ZdFRlR3M1ZUI0
+ NHhnMmxYNmlHeFFGbjJnK0w4QU5HenMKLS0tIHd6aUk1NWR2SnFCMENzSGFES0hi
+ VzVzNmtJampuZ2tKQnU3Y3FTZFFhdkUKej0Hy9kOYDqg+8B+slMdGE2Krcvqr4uJ
+ X7GxDCdLV7sllK6OlHe2aQkXb16oT0iGG7N61LCzWBDOfx0hzdyFPA==
+ -----END AGE ENCRYPTED FILE-----
+ lastmodified: "2024-10-19T18:22:33Z"
+ mac: ENC[AES256_GCM,data:Gm09oBu15JksqrK3H1TabhshiOShqwZLYFon6aqd8MmNQU0ufItZARU2K32Gu09dmDerE5Kbrq5u5U4fJXDkFRVYcFktIlD5FcCN2DlG7pB9rbpMZEHUt89wMAX6uvFat+66PUbE56Cio3Hlv88sB98VIKSratK2E0mlFB0oqYY=,iv:QaG4djyDGv+bpSz3+q6BTWAZyuUtNSkdG79/HciQlVE=,tag:TZ/qUmvWadnHYW/B00oEmQ==,type:str]
+ pgp: []
+ unencrypted_suffix: _unencrypted
+ version: 3.9.1
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/conflatorio/bird.yml b/tnet/host_vars/conflatorio/bird.yml
new file mode 100644
index 0000000..a976306
--- /dev/null
+++ b/tnet/host_vars/conflatorio/bird.yml
@@ -0,0 +1,5 @@
+tnet_bird_peers:
+ hash:
+ knot:
+
+birdv: 2015
diff --git a/tnet/host_vars/conflatorio/wg.yml b/tnet/host_vars/conflatorio/wg.yml
new file mode 100644
index 0000000..087441b
--- /dev/null
+++ b/tnet/host_vars/conflatorio/wg.yml
@@ -0,0 +1,7 @@
+tnet_wg:
+ knot:
+ endpoint: knot.inamo.no:51010
+ address: fe80:47fc:660:b91f:1063:a6ae:46bb:7588
+ hash:
+ endpoint: hash.trygvis.io:51007
+ address: fe80:4540:476c:d432:2f32:818b:811b:bb60
diff --git a/tnet/host_vars/coregonus/bird.yml b/tnet/host_vars/coregonus/bird.yml
new file mode 100644
index 0000000..816b95a
--- /dev/null
+++ b/tnet/host_vars/coregonus/bird.yml
@@ -0,0 +1,4 @@
+tnet_bird_peers:
+ knot:
+
+birdv: 2015
diff --git a/tnet/host_vars/coregonus/wg.yml b/tnet/host_vars/coregonus/wg.yml
new file mode 100644
index 0000000..0d80a18
--- /dev/null
+++ b/tnet/host_vars/coregonus/wg.yml
@@ -0,0 +1,5 @@
+tnet_wg:
+ knot:
+ endpoint: knot.inamo.no:51011
+ address: fe80:ba82:77f0:f96d:7a85:a7fa:ef6f:37d3
+
diff --git a/tnet/host_vars/hash/bird.yml b/tnet/host_vars/hash/bird.yml
new file mode 100644
index 0000000..2b4bb51
--- /dev/null
+++ b/tnet/host_vars/hash/bird.yml
@@ -0,0 +1,12 @@
+tnet_bird_peers:
+ conflatorio:
+ rr_client: true
+ interface: tnet-confltrio
+ knot:
+ rr_client: true
+ lhn2pi:
+ 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..5754f57
--- /dev/null
+++ b/tnet/host_vars/hash/wg.yml
@@ -0,0 +1,25 @@
+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
+ conflatorio:
+ if_name: confltrio
+ port: 51007
+ address: fe80:4540:476c:d432:2f32:818b:811b:bb61
diff --git a/tnet/host_vars/knot/bird.yml b/tnet/host_vars/knot/bird.yml
new file mode 100644
index 0000000..94c610a
--- /dev/null
+++ b/tnet/host_vars/knot/bird.yml
@@ -0,0 +1,23 @@
+tnet_bird_peers:
+ conflatorio:
+ rr_client: true
+ interface: tnet-confltrio
+ coregonus:
+ rr_client: true
+ hash:
+ rr_client: true
+ kv24ix:
+ rr_client: true
+ node1:
+ rr_client: true
+ node2:
+ rr_client: true
+ lhn2pi:
+ rr_client: true
+ routedbits_lon1:
+ policy: dn42
+ as: 4242420207
+ address: fe80::207
+ interface: tnet-rtdbts_l1
+
+birdv: 2015
diff --git a/tnet/host_vars/knot/wg.yml b/tnet/host_vars/knot/wg.yml
new file mode 100644
index 0000000..9ad867e
--- /dev/null
+++ b/tnet/host_vars/knot/wg.yml
@@ -0,0 +1,39 @@
+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: fe80:fef1:078a:5b64:efd3:ae7b:d286:d7ce
+ akili:
+ port: 51004
+ address: fdb1:4242:3538:ffff:59d7:cf77:8b5d:761a
+ lhn2pi:
+ port: 51005
+ address: fe80:d83a:350b:2162:6eda:1cc1:9cd7:80e8
+ 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
+ rtdbts_l1:
+ port: 51009
+ address: fe80::621b:7ccf:ff44:c42c
+ endpoint: router.lon1.routedbits.com:53538
+ conflatorio:
+ if_name: confltrio
+ port: 51010
+ address: fe80:47fc:0660:b91f:1063:a6ae:46bb:7589
+ coregonus:
+ if_name: coregonus
+ port: 51011
+ address: fe80:ba82:77f0:f96d:7a85:a7fa:ef6f:37d2
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..99c54b6
--- /dev/null
+++ b/tnet/host_vars/kv24ix/wg.yml
@@ -0,0 +1,3 @@
+tnet_wg:
+ knot:
+ address: fe80:fef1:078a:5b64:efd3:ae7b:d286:d7cf
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..564c993
--- /dev/null
+++ b/tnet/host_vars/lhn2pi/bird.yml
@@ -0,0 +1,5 @@
+tnet_bird_peers:
+ hash:
+ knot:
+
+birdv: 2008
diff --git a/tnet/host_vars/lhn2pi/wg.yml b/tnet/host_vars/lhn2pi/wg.yml
new file mode 100644
index 0000000..c94745c
--- /dev/null
+++ b/tnet/host_vars/lhn2pi/wg.yml
@@ -0,0 +1,7 @@
+tnet_wg:
+ knot:
+ endpoint: knot.inamo.no:51005
+ address: fe80:d83a:350b:2162:6eda:1cc1:9cd7:80e9
+ 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-conflatorio-hash.pub b/tnet/keys/wg-conflatorio-hash.pub
new file mode 100644
index 0000000..8a27ee5
--- /dev/null
+++ b/tnet/keys/wg-conflatorio-hash.pub
@@ -0,0 +1 @@
+9o91CH8mx6OhTYer+gTMzwEfp94O4dSEOFuEKy/B+Ew=
diff --git a/tnet/keys/wg-conflatorio-hash.sops.key b/tnet/keys/wg-conflatorio-hash.sops.key
new file mode 100644
index 0000000..8c17e7c
--- /dev/null
+++ b/tnet/keys/wg-conflatorio-hash.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:4wFMiJhThT4ORoE/AdIRiN9EHr5NbSwysfhWCJxsLN6o7W3cMPA15E6ABnzk,iv:ib383CRTa7gCsC+RYAaJYV6TN8WMAPDJlQmlA2yUVow=,tag:LhhzRZGgYyviy7UTEeJbaQ==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaMDhIREx3emlWdUgvQ0RW\nRnEvV0g4OWJkMmVSSHZaNzRLQTkvS1R0d1JnCk8xM0hMbWdEWlVhRklLeTNJYk9i\ncGtOL0huM29aU3dSNG92elJlV0k4ZncKLS0tIDVGcDBLbTI5Y1lUeFFJeGMrMm80\nQlFoTjRiVEh6UndoMHkvS3ptN3ZYc0EKfjcibzyYgYbZDTkz5g+FyxFFIFlU5LLL\nWGtyCal+2zl+h3z3vn4WUyHcj6BTqe3ks2zeyYWwiNuoTb1tSzj94Q==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzaFIwSDg0ZFNPZXdNOUxh\nSGdqYk1CaUpmVGg3YW1waTJFaUNtUHloTGtvClAxdmJnK1FLNStKdzBNTXo0TEpL\nbTZhcTVMR202QXBkV2VTcDJ6Z2Fqak0KLS0tIG9hb2M0b1NaRWMwaGl3UXZKWTU0\nN0lyM0dudDJsSm9HRzlxempMWEdlcncK4OG+Qrsn06Dl+wxk6SCg5dULZvZpDemE\n+MT6qbu74mgcS07PuzrCguueCC5mNBsjy8WanPQDRnzWqX+DzBxeDQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnMVp2SGdMTWFVd2U0MjVq\ndksvVFJvYUp3U2RyZHhOSERxNXZtSTBpSW5jClJWTkt0QmF1RU9hRExJb0wyNGxt\nK2ZzTnpOcU1BcElXT2wxd1o1R1VyTHcKLS0tIEJqOUVwY0h3VWxrc3F5aHluTHJJ\nckNlVzJJMHJkRXZPbER6ZXg5Z2xVa0kKByXn7yYIHY8Ckhr83tBYv062UDyBOYMS\nJ+dfYZ0ouT58l5CyatLURhyEDohAvQI95eKsIM1KkPgpzvV97Uq31Q==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-08-11T19:04:11Z",
+ "mac": "ENC[AES256_GCM,data:TroGIp1ZphoyDZXYxPbMpnCbq8i3v4eaT/8jlPnlFbCcHWqId2Tp2sBLlwuaq3E+vhvmN1K7ndbevCUhWmJW4oyWiEWXGUC3TUtVwc2nw3En/jsXFX9Yp7opF+a3iR+NLCbGTxm2CcQPoxuayAUIIp78ITB61SSF9QzIuAAhmcw=,iv:E3yB6yF3TDN8WPP+Kq78bK36Qw70Oz4Hl9lc7vhstnM=,tag:94udYmA1spcHcZMzylNA0w==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-conflatorio-knot.pub b/tnet/keys/wg-conflatorio-knot.pub
new file mode 100644
index 0000000..053a7d6
--- /dev/null
+++ b/tnet/keys/wg-conflatorio-knot.pub
@@ -0,0 +1 @@
+T6Gst6C4i8c1JDEdlWL4EMnkabEjUBfj9Ii6RiLU30c=
diff --git a/tnet/keys/wg-conflatorio-knot.sops.key b/tnet/keys/wg-conflatorio-knot.sops.key
new file mode 100644
index 0000000..973726d
--- /dev/null
+++ b/tnet/keys/wg-conflatorio-knot.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:X2V545B0R61+kZty3UEsBH83JytzpPCLMLpvgbct8+818EItkbhCiowJj01t,iv:ADEd0FZUSQPWuza8lL5Ld12j3nRfrewNxjMqwOfwA0Q=,tag:t/2Yg8XxOpCovgRn6zwztA==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvTTdzekJDdEhuKzhEUitG\nSU5qYVI3TURHTXUySk5Xenowc2FpczFDM3lJClI0L1huRVhGWjB3N0ZzQ2VoNEI1\nWVJtRCtJWmkyb0c5M2RVeS9IaytmU0EKLS0tIHdUNExJTGhqckVvSzhhTFFFTDhE\nQXY4NzlwM0FJbW41RFlRTXZIcnlBZ00KFN8m0pMUkNUoaUGTforKg4VMDL0qbs/J\nsPVXbJf9n+GTEn7qeqOvMDHW9hj5s8zQOyeNNt8k1PkmNjHbxNNolw==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4RjNEdWQ5dnlzY2dubU5a\nTVN0ZFhOd2RrcGVrYjRKZzRBRVk5dHVSdDI4ClgyS1ZJUDVYQ2MzN2haWEZ4VTJj\nem5jYWdnYmpWMWhjREdBcHltTWV5YmsKLS0tIG5yVkt3em8weUVZTzY4N2JBOFo2\neUQ0M1JCL2RXTTlCc1RxakpjQzBXZDAKa+gNtS/eL3rdNp7Jl52EHcVfBzdVcezL\n8VawKcdVaFU8pXi2wSRjSJlVf4jESjTFC9dip3hAxM7R/V9M/SxXkg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpdlNaM2RPYWZMMDh4V1Ew\nMkRIM2dTNktpYUxPWC9jcFFYeHcraTV1b2tvCk11RVZxMkdvd21ORWlXKzdrUm5w\nYUdZVTB2dmk3ZjFiaUlzdG54dmJpMDgKLS0tIDJwYWFGQmp2YXh6Z1BUMGdkWFNR\nemcwUHp1MjRobjh4ZEkyZjRzWDBFaGcK1EIKbWoR7dBHy/r0o2V9VxYaN9XJx5x4\n1fLZALfTA5C3kJgcuJbzhNUqvIwcKJ0LXpENidEHbAuZBTDzl0lYTQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-08-11T19:04:13Z",
+ "mac": "ENC[AES256_GCM,data:czGSSuK2RW0cIeJ4WRyu87EINudH8/tlwAxuALcTuvMWnzJ2B4kap9BAesCOw5FuZHzc4dGulmzrVbbH1pBg8REaWvy7989ELvNDFLyFqOc54XPfDuDMjT6D2SGw+2y6mB3kg0r1ajd3SASfhvc1q/8K1R2NZiO5xSG1ybbqlUM=,iv:VJVsV+xpL0gvXnlZjpZeljtqcJgLXl/+Rtkj0iBmBQ0=,tag:cqEbeEp4uc/vTjNaASnkDQ==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-coregonus-knot.pub b/tnet/keys/wg-coregonus-knot.pub
new file mode 100644
index 0000000..181fd56
--- /dev/null
+++ b/tnet/keys/wg-coregonus-knot.pub
@@ -0,0 +1 @@
+uOqXlYKRgwBXVKPAaPn2fx4YtMHCH5M2qQ3hs/tZwms=
diff --git a/tnet/keys/wg-coregonus-knot.sops.key b/tnet/keys/wg-coregonus-knot.sops.key
new file mode 100644
index 0000000..b3c6239
--- /dev/null
+++ b/tnet/keys/wg-coregonus-knot.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:aPPYaRDzczKgMZxWKJXE5X7JC0pQxs9W0d3UZjY8QYLhxmxk8L+RpX6zWscR,iv:CE+JgwUMdkbFDrkk53ow77ehm3GEmeJFnVM5jbWXZIY=,tag:mlnV5SNhIOnU/+TnOWiU0g==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMWml3V0dCRStJY0RsUEN5\nSVhya1dXYW5GQ0R1a1h3NVJMV09LbVV1eXhNCmFMS2JYVzVPbS95TmwxWG04emtO\nd3B5QUtxWGVaWTlpUDN4ZVErZ1BqcEEKLS0tIE9iTjJaN0RaZjJQeG5Zd1Z5Ylp1\nYkwxS0JqVzNLNHBkSjM0b2owcURZN1UKj5i3uMAwhcqM/vB6faF2vq3ndEYGEOAn\nH1m4LdRj0b03BOtz5vz5oeF+nW3e8rGwhq84N7UFdI4W+9w3ZCI2AQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMVGdPaERQRWNodnpmOUFM\nWG1QSGhJUmoyamplMFFsK3krNzd4ZHVvdlY0Cit3UHNzNUVIVWlZakNsTUFNVlA1\neE9rNTliWmZ0a295UVJZUXo3dk9WTkkKLS0tIDE2SjE1bXFVdno5NkwwQk15UGZY\nczBPTTUwdTBJT0laWWJsWmJmNDFuUG8KRlCmMio144qdPuPXuxc2AEHhdUxbJT8W\nDp7Atk0G57V57tX/zk1RaXjp+ORStvwpgDAdCwmikt1PW78Y6x77tQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpYWlHRUVTV1RreFExcDBj\nYmI3OTBpRnEwd0FBTDdPTHI1OVhRYmlZMGdFCjlHTWJPY0lSRVhPSTQyNEgxYkMy\nY3ljMnhKeURSL2JwcDd3dmlubW15bFEKLS0tIEZHUG9NUmNnUlh2NjlTd1RsYytR\nVDI0OVhZeGhyWFVFcU9URE1NRXpnR00KUO2W8ab2RehPhEAjFlOXWrr2rn55gBR5\neSvOtAPEEV1lWO+O0r3jOFpnUI/ahgPeBhMoLFOdionm3GPrYzf8aQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-08-20T22:51:59Z",
+ "mac": "ENC[AES256_GCM,data:4haVcOm18uCW8LK06wURyf32qr9ZXnjc6feJHf4T85C0COrmZ7AmxUZKt5Mi9YoPO7dTMpjcvnxhEVEP4x6/wBc3SB5RpRSWU25GZ4/ofnqR/xBH0R1edirQtuhsDJeR3rYnTYeMjRltf9zpZknED907GRmmddaO15xsWtU8/t8=,iv:wXMIQRj4mV7SNnUqC3XVM/8mEhbPMwL1Z4/LrIBqpcs=,tag:i6CSlmj2449GgMqosa8e0A==,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-conflatorio.pub b/tnet/keys/wg-hash-conflatorio.pub
new file mode 100644
index 0000000..bf16a1c
--- /dev/null
+++ b/tnet/keys/wg-hash-conflatorio.pub
@@ -0,0 +1 @@
+oGEr7UWht1fUQ92hRu5r9SdRPfqj462behU34s6500o=
diff --git a/tnet/keys/wg-hash-conflatorio.sops.key b/tnet/keys/wg-hash-conflatorio.sops.key
new file mode 100644
index 0000000..c78eebc
--- /dev/null
+++ b/tnet/keys/wg-hash-conflatorio.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:LLC57pLBVZNEOTDdSEF4JgjGS8nLm/ef4ds71IFRJOX5tnnC9D/0hgbjdncF,iv:OU8/eGbM0axRajBOplvycs5rr100QPMv4RXYTv5NJMs=,tag:7IH46V36BbbhvCs5ze4UJQ==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBEdjRCWlQ5OVI0cTkwL3Ey\nWG5tYUdNSks1UkpROU0wVUVVMlhwWEdweXpvCmFQYTE2bkZlV1BlZXg2d3pia0Jr\nVFhQVElXUjJCVGRXS2R4aEhBdzFBNU0KLS0tIEUzaHQxbzQ4aml0VHBaU0MyMjhJ\ncHo4L0doL1NKa0VOc21PanhhdUh2UGcKetAIpPpINd6UgrHYvTh/o5w4DlTlNY2c\n94zKEsWGShRZDOJ2EWiYR+47+OLTZjRKpt/oyXBhnyTa4gBSsNwHHg==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCeTBwdU9iOGhaWThqOVN2\ndG1qUW43eW83NS9sQ0ExbnlIY0s3TlVQdlJJClJHeDloOTk2WFBPNitZQ3BXaFR0\nNVNCTncyV0RqVFJ4S2ZGWUt0RThHYWsKLS0tIDBxaVBXNjdlTXRsYlN5aWhnQkJ5\nd3pyS3preFRBWVF1eUE3eUYrZ2F6aDQKU447p1FB1bX98Ni3oQnhkRdM1al0ySvk\nSeApyf3gKO5BhtQkQKuMF2lRGQEJ8Vh4H0mxf8cTspCn4rld0T2P7w==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXMjYwbHpkT0xWTDhzd3ZD\nRko0NXlZU1MwcmhCdGtCdFJ5SnAvVU1VK244CkY5VWRDVFhZUUdzMFpFR00vMlRv\nNmxUYjg2azcrRnBkQ09BVXlxeTYzRkkKLS0tIGljOTFnMll2RE1TWmpvMld2RWxu\nU2d0d2xwbWtZa3NoSUlXc3pnSHMraDQKYc02UngnR+mCVRKDxZy1VqiOW1AA9mEf\nf8XNX9CARGaAbXesOnj8ADKswErDOHrca4f1CbrgOWd9UM1qk6HyTw==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-08-11T19:04:03Z",
+ "mac": "ENC[AES256_GCM,data:ja8qprE1psQHAQ+hw8UDXxFqDg+K3tSBq+Hvef4z4nKd4+v8lhIBjCXTE7b+ovmFzJhV4jEd761ugHsxkLUcThAWkuaVy82dmF8idgKwTxg1NKmn3dBGC1fRjOXGPmOvO6Y6dCbL2L1e7z3EoQP2SzgcVa1/g+QgtnWEcTkvXKk=,iv:062sBg8V5nSq10VbFNZ3z7+FZLwXvKyXGbZEpdCjpM0=,tag:DM0zH1chw7pn8d9LwLh1Gg==,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-conflatorio.pub b/tnet/keys/wg-knot-conflatorio.pub
new file mode 100644
index 0000000..dfbd2b3
--- /dev/null
+++ b/tnet/keys/wg-knot-conflatorio.pub
@@ -0,0 +1 @@
+N3BmA8j6VuY7hmB/lWN3OjUK9cgNoMSOZiPiuSAytgQ=
diff --git a/tnet/keys/wg-knot-conflatorio.sops.key b/tnet/keys/wg-knot-conflatorio.sops.key
new file mode 100644
index 0000000..4565d73
--- /dev/null
+++ b/tnet/keys/wg-knot-conflatorio.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:hDq6uKsf4/ZaLBtR+vW+ldTnupF0wGKYh1NwFuraHEs//9muJIcRwQ93Zhhd,iv:c/U1BRw2PdhWWFle7zYNOfjsvl7BYCbj2cKsc/vaHHI=,tag:pABhOJxuO7ARyfuCuqMwoA==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkb2ppbEY3SVZqL1pLM1h6\nWUJaZE5IQlRGUWlSNHBDeVpHSDBrT0Ztb1hzCjVOUEMyUm5JN1lBaTEvRlRHL1BT\nOTV0aGtXRnAvNWNNTWJiNGMwaU9CWncKLS0tIC9ySXdyOURsODRXODVNbkFyZlVm\nUXFwWFI4RzIrZUVUV1MvVlJyYTlCeDQKnZuwumgHUEwiAMtEEarlPEMAFYBQDGeD\n6oRPWB3lkVl4C7RAGjG/vkvgSf7Wq71Fv24YDRtJddYgnqWRTp+d9w==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNVStFYkUwNVVUUG9mRHFp\nazZValA1d08rcWlyeVdFTFBSVEJmUGFZQjNnCmtTQW5oeVNmWW4rR3liZjRJRDBi\nbEQ1VVFRajluSXUzcUtObm0ySUZYMjgKLS0tIHcweUVNendleGl5WlY1eVN0ZFFF\nRGs0enc1b2MxV2RBQnljdHR6N0dMTWsKKERcoegcxCLeAc07a/H5+jA9NopzyYfD\nlZ3tsursdaZKWsCRgPpQJfqtZVbin61zDrxgGJRpVsVkmGtqFZHfyQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkUThmR0xCOE9NN2xHTm9j\naGxpUVVQRXRTMzM5d2R4Mk84RkVScFdRZ3hZCk10TWtwZ09zWkl4TTU3ZDhDNWxp\nVEErYk5ucUpvNUordGdiRWsyS04zY1kKLS0tIEcwSTVZdU1HNFRVS2NTbjM3bGxB\ndGZreWNNWnFGd3JCM3VHeTJDZi83TzAK+y28heVBf2Tl+9X8sgKuAcyzrHn038RM\nzTFnhy0sn5FmmPeAt+DaTI5L23d4h9rs9kMuqkyWFvZH5L1ZKPMC6Q==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-08-11T19:04:05Z",
+ "mac": "ENC[AES256_GCM,data:Wo9zqglEVWtnfqK9X513PexmbrHEVbcgWSIfvdBAGVT4SAT26yvWVoPzBH1Nt11iePBwkLSjut5+G0Zf5XvhCnWwM3oGqGFhXAJqx3ta3mJIAFwD8E8DDEzvsVy5KM9AZkPv+YFSz33OgtrgSX/8sKfcVYO0DzivwTXiYKEeS1M=,iv:qTyug6kkZCF16oAL6uFsMsMG4aTh5nN8L4+Z0m844LE=,tag:JKXI0oi8D+X0PVVFMInoag==,type:str]",
+ "pgp": null,
+ "unencrypted_suffix": "_unencrypted",
+ "version": "3.7.3"
+ }
+} \ No newline at end of file
diff --git a/tnet/keys/wg-knot-coregonus.pub b/tnet/keys/wg-knot-coregonus.pub
new file mode 100644
index 0000000..7fc1905
--- /dev/null
+++ b/tnet/keys/wg-knot-coregonus.pub
@@ -0,0 +1 @@
+lTuzdN+En+Jc8v9+cTx2U455mw6v+fl/QsWWxO7ZYgI=
diff --git a/tnet/keys/wg-knot-coregonus.sops.key b/tnet/keys/wg-knot-coregonus.sops.key
new file mode 100644
index 0000000..6acb9ef
--- /dev/null
+++ b/tnet/keys/wg-knot-coregonus.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:NhASCvnUd1DDdo8qQ8MNY+KXMa9fACx7DNEwNwwLgjuwSu+bV42z/OYTY6Ck,iv:z0mGt+HuBwuS+WnbuomGwqReCXqEfIC+qPOuz+JciSw=,tag:sCUW0nXWJWgxYEAbkp+7JQ==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOTWY3a0xxbzJnVm1GRHdU\nZU1IcnhKQkdEVjBtNFRIb0swWHlqdldFSUR3Ckg4dGlERkV4Ly93YVRwSjBJdzB0\nS1hmSkNQY2ROdDBZVTVmODRUR2Z4bmMKLS0tIFh0ZDJ1d2ViMFVwNlRkY3d6eU5E\nbHVhSXVCRWI2b2NKVVI1cGVjL3RGaVEKgFzmd42NmzH4GH4Vuklcd1jkCJnngloO\nN4Q5/NdHij8fXWnhkuV/8xX7KnBXEGX5uHo9pYd1aYzyZTUD40rDyw==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0TmJ4UjZBN2pFU2dBZXdG\naDNtQUhGdkFnYkh5OXVlYTZ6c1N0YWpaTnpNCnZMWFgrWFpNd0tqVGpyN2NIZnlo\ncTRlQ1Q4UGJySm16TThwS0V1dW1nTlUKLS0tIGgzWjQvZ0hETW15TTV4S0Q1K1V5\naDFMODFVcVB4cmxnYXR5RTRnanQ0bVkKPZ/caVVhPQ/0I5X3A70czYnMNgw/l39W\nrf75d5RK5x5FcgZenz23l00g+AUt8uNfct+3YHc15OjL+vOrtm1NCQ==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjalBWcXg5NVlFS3Bjb0Vt\nUXlhNVNxMmtIMVhEdC8rb2h5UEJxUVpUckI0Ci9BaUM3YWJSczI1RVNQWGtIZllI\nQmhuK2dyMUwvRlpORUZDK2thWldUdFkKLS0tIDA2UVBzbTQ3aDEwcXNHcjRoMkNW\nRXhmZ3hmUlhVR0xzaWU1MDZBUW1zcTAKkkyLoqodk7FWwZV07wlkttEs115/v9ZI\nOVfi+VzkI++jLW2KzL1S1i1N+/BHnfXDnzNDaIqUTRrFi5jhd1kk0A==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-08-20T23:20:12Z",
+ "mac": "ENC[AES256_GCM,data:l4s7OdTHRqBXVGHpCQMo/k6nwwPEcWK8J47n1b8pQSDuO4DFcB/ApI8rNKgFAujXLUwB10YeRwp0bcLdlGREt7PhcHhddNB5yRYx/8djqYpm0w3rSAN9p4IW5CNB5LmfdxQk2dI0Ow8wxw8UzTVO08T7cDNeYRZdQTJLd+VUhCo=,iv:Ffv/pz30FwLaho3Y2HlMO11jKIl71GUpKMe1cSMNOwo=,tag:Qo3ZSTnJa26jYdwJtGvmyQ==,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-knot-rtdbts_l1.pub b/tnet/keys/wg-knot-rtdbts_l1.pub
new file mode 100644
index 0000000..4be8cef
--- /dev/null
+++ b/tnet/keys/wg-knot-rtdbts_l1.pub
@@ -0,0 +1 @@
+x/cvEG6uyatJEao1ob2aPGi7QGqY+2ShdtB/FTGlmAs= \ No newline at end of file
diff --git a/tnet/keys/wg-knot-rtdbts_l1.sops.key b/tnet/keys/wg-knot-rtdbts_l1.sops.key
new file mode 100644
index 0000000..e40eba9
--- /dev/null
+++ b/tnet/keys/wg-knot-rtdbts_l1.sops.key
@@ -0,0 +1,28 @@
+{
+ "data": "ENC[AES256_GCM,data:u95NnCXihKwyPP/ZujqZlCMgTI7j5DmTaFqrDa9Y3yc2uNystrCqdSqHZIQ=,iv:U6pvVRkDNx392kh3ofdfUVQ5Sf9hwa/HKNukkG5BvWg=,tag:Kb+uplrA41vB/FefskN5bA==,type:str]",
+ "sops": {
+ "kms": null,
+ "gcp_kms": null,
+ "azure_kv": null,
+ "hc_vault": null,
+ "age": [
+ {
+ "recipient": "age13wv3rp0varlg4nvt3tca48fq8u9q3mc6yfdekjeapcmc7kaq4dysrzcmv3",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmYy9GNDJWVkQ4MFpMQkFG\nRHZhemFySDFQUy9jR0ZaUkpXcTVNSkFid3p3ClZ0azRFUW82UjFyckNoM0RRNUhm\nMUpyNG04RVROQ0NibDRwb2ZxanYyMWMKLS0tIGVXdVJ2a1g1SU5LcFNMY1hVUU5X\nV0VYZ2pLNHpyUWEwSHJnTEdaWDFnV1UKi1U6BjgEjQT9KOMLajdDViKmb4XBSj1+\noTmdC1ZV2B4a/tlwRQjO0Rr3UoprPy+s4sKDIJNpbz9RcqxSU/voig==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1mvh832crygenu5tu5njtraraet656rzwnawuasjggvs999dc9ueqj9qclw",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBodGhUSnZZS0FpY1VqV0g3\nYVV0VW5OQUptckx1dVAwZjNLUHdtU3Q0S1dFCnh3RWlieU50a2c4SnRFYkFWcGNC\nOERSdG15VnQ4ZVZDZ3ErTW1nWGJQRVkKLS0tIHJPM3h6bEtwMGI3SGdHTFJiWFoy\nQUVGRm9JZzYwRkdmT0QzdUY5Z3F4V2cK7JhYdWfI3/PRKCyNCTbLj6gm9OkbkNzR\nVtLStGD0goqVNo1rpMecZxSqsypJgTmypbFl6tYClNKp5Ti33ptXqA==\n-----END AGE ENCRYPTED FILE-----\n"
+ },
+ {
+ "recipient": "age1teasctdpkatekpsa47q58d3ugwyyqcuj5v9udtusk7ca9sfv694sw057a5",
+ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHSzJ3cm45MXF0TEFPUHds\nVG9aSmd5REFweDdIbURhbU9HYmxURWV5WEhrCitXaFAvRFJ5eGk2cVB1YXAwRDNj\nMnFOaXFWd1VCdEl3SThqQ2N4U0pValUKLS0tIGdPK01VbFJac2JMMVlvWHNSd3lI\nbzVWRmZJTEpQamQ0Y2xXdk9aN3VPTTAKRtaOSu5GSw6lxG7ogYTx9AilqdeEcYGb\ngrWXPYPNfs7ePcItFSUiDiuS38eXpKCdfqjZmekBCxGCJQnuhMZZ6A==\n-----END AGE ENCRYPTED FILE-----\n"
+ }
+ ],
+ "lastmodified": "2024-06-16T20:30:33Z",
+ "mac": "ENC[AES256_GCM,data:SIbpVs2mmMlp8mfPr0vXI8ZSENuwIAslEcZHfFg7YfC9gcEHHFYq/ngeB62/8YBcOsYnhO9Sip3VvEg2MsdQe6if8asew67D0udPATrfHRhk55PIxLLb1DszlI8edAhH7PzcNRFSYy72mKvxK2eDeDw71sfBr73254jD6ud699s=,iv:6RUG4ZUGXWpV2CYGgFVI6SRSZRzNbNNQlbwLb0TS15c=,tag:KY0WAn+rW/xJjBUpHPq1Tw==,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/keys/wg-routedbits_lon1-knot.pub b/tnet/keys/wg-routedbits_lon1-knot.pub
new file mode 100644
index 0000000..dd12e17
--- /dev/null
+++ b/tnet/keys/wg-routedbits_lon1-knot.pub
@@ -0,0 +1 @@
+vlqNoUSJ4T2sORBHusdwr9rCtQfdsIJvjV3Y/qBUcgY=
diff --git a/tnet/keys/wg-rtdbts_l1-knot.pub b/tnet/keys/wg-rtdbts_l1-knot.pub
new file mode 100644
index 0000000..dd12e17
--- /dev/null
+++ b/tnet/keys/wg-rtdbts_l1-knot.pub
@@ -0,0 +1 @@
+vlqNoUSJ4T2sORBHusdwr9rCtQfdsIJvjV3Y/qBUcgY=
diff --git a/tnet/templates/akili/bird-tnet-pre.conf b/tnet/templates/akili/bird-tnet-pre.conf
new file mode 100644
index 0000000..74c981d
--- /dev/null
+++ b/tnet/templates/akili/bird-tnet-pre.conf
@@ -0,0 +1,20 @@
+define tnet = fdb1:4242:3538:2000::/52;
+
+function is_tnet()
+{
+ return net ~ tnet;
+}
+
+roa6 table dn42_roa;
+
+protocol static {
+ roa6 { table dn42_roa; };
+ include "/etc/bird/dn42_roa_bird2_6.conf";
+};
+
+function dn42_is_valid_network()
+{
+ return net ~ [
+ fd00::/8{44,64} # ULA address space as per RFC 4193
+ ];
+}
diff --git a/tnet/templates/akili/bird-tnet.conf b/tnet/templates/akili/bird-tnet.conf
new file mode 100644
index 0000000..d306fcc
--- /dev/null
+++ b/tnet/templates/akili/bird-tnet.conf
@@ -0,0 +1,48 @@
+# Set to true if this peer is directly connected to a dn42 peer
+define is_dn42_peer = true;
+# If we are connected directly to dn42, we don't want the dn42 routes from others
+define import_dn42 = !is_dn42_peer;
+define export_dn42 = is_dn42_peer;
+
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if import_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": import reject, reason=not tnet";
+ }
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) export accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if export_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": export reject, reason=not tnet";
+ }
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fdb1:4242:3538:ffff:ca85:f812:3935:5fba;
+ interface "tnet-hash";
+ password "{{ bgp_password['akili-hash'] }}";
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fdb1:4242:3538:ffff:59d7:cf77:8b5d:761a;
+ interface "tnet-knot";
+ password "{{ bgp_password['akili-knot'] }}";
+}
diff --git a/tnet/templates/astyanax/bird-tnet-pre.conf b/tnet/templates/astyanax/bird-tnet-pre.conf
new file mode 100644
index 0000000..74c981d
--- /dev/null
+++ b/tnet/templates/astyanax/bird-tnet-pre.conf
@@ -0,0 +1,20 @@
+define tnet = fdb1:4242:3538:2000::/52;
+
+function is_tnet()
+{
+ return net ~ tnet;
+}
+
+roa6 table dn42_roa;
+
+protocol static {
+ roa6 { table dn42_roa; };
+ include "/etc/bird/dn42_roa_bird2_6.conf";
+};
+
+function dn42_is_valid_network()
+{
+ return net ~ [
+ fd00::/8{44,64} # ULA address space as per RFC 4193
+ ];
+}
diff --git a/tnet/templates/astyanax/bird-tnet.conf b/tnet/templates/astyanax/bird-tnet.conf
new file mode 100644
index 0000000..496cebe
--- /dev/null
+++ b/tnet/templates/astyanax/bird-tnet.conf
@@ -0,0 +1,48 @@
+# Set to true if this peer is directly connected to a dn42 peer
+define is_dn42_peer = true;
+# If we are connected directly to dn42, we don't want the dn42 routes from others
+define import_dn42 = !is_dn42_peer;
+define export_dn42 = is_dn42_peer;
+
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if import_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": import reject, reason=not tnet";
+ }
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) export accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if export_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": export reject, reason=not tnet";
+ }
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fe80:a0fd:89e4:42c6:f617:7398:abf4:b516;
+ interface "tnet-hash";
+ password "{{ bgp_password['astyanax-hash'] }}";
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fe80:6728:53fc:fc81:40b3:9beb:8336:ba56;
+ interface "tnet-knot";
+ password "{{ bgp_password['astyanax-knot'] }}";
+}
diff --git a/tnet/templates/bird-tnet-pre.conf.j2 b/tnet/templates/bird-tnet-pre.conf.j2
new file mode 100644
index 0000000..e762cd5
--- /dev/null
+++ b/tnet/templates/bird-tnet-pre.conf.j2
@@ -0,0 +1,20 @@
+define tnet = {{ ipam6.networks.tnet_dn42.range }};
+
+function is_tnet(){{ " -> bool" if birdv >= 2015 }}
+{
+ return net ~ tnet;
+}
+
+roa6 table dn42_roa;
+
+protocol static {
+ roa6 { table dn42_roa; };
+ include "/etc/bird/dn42_roa_bird2_6.conf";
+};
+
+function dn42_is_valid_network(){{ " -> bool" if birdv >= 2015 }}
+{
+ return net ~ [
+ fd00::/8{44,64} # ULA address space as per RFC 4193
+ ];
+}
diff --git a/tnet/templates/bird-tnet.conf.j2 b/tnet/templates/bird-tnet.conf.j2
new file mode 100644
index 0000000..1185014
--- /dev/null
+++ b/tnet/templates/bird-tnet.conf.j2
@@ -0,0 +1,92 @@
+# Set to true if this peer is directly connected to a dn42 peer
+define is_dn42_peer = true;
+# If we are connected directly to dn42, we don't want the dn42 routes from others
+define import_dn42 = !is_dn42_peer;
+define export_dn42 = is_dn42_peer;
+
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if import_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": import reject, reason=not tnet";
+ }
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) export accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if export_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": export reject, reason=not tnet";
+ }
+ };
+ };
+}
+{% for p in tnet_bird_peers|default([])|sort %}
+{% set peer = tnet_bird_peers[p] %}
+{% set policy = peer.policy | default("tnet") %}
+
+{% if policy == "tnet" %}
+protocol bgp tnet_{{ p }} from tnet_tpl {
+ neighbor {{ hostvars[p].tnet_wg[inventory_hostname].address }};
+{% if peer.interface is defined %}
+ interface "{{ peer.interface }}";
+{% else %}
+ interface "tnet-{{ p }}";
+{% endif %}
+{% if inventory_hostname < p %}
+{% set password_var = inventory_hostname + "-" + p %}
+{% else %}
+{% set password_var = p + "-" + inventory_hostname %}
+{% endif %}
+ password "{{ "{{ bgp_password['" + password_var + "'] }}" }}";
+{% if peer.rr_client|default(False) %}
+
+ rr client;
+{% endif %}
+}
+{% elif policy == "dn42" %}
+protocol bgp {{ p }} {
+ local as 4242423538;
+ neighbor {{ peer.address }};
+ neighbor as {{ peer.as }};
+{% if peer.interface is defined %}
+ interface "{{ peer.interface }}";
+{% endif %}
+
+ ipv6 {
+ import filter {
+ if dn42_is_valid_network() && (net !~ tnet) then {
+ # Check when unknown or invalid according to ROA
+ if (roa_check(dn42_roa, net, bgp_path.last) = ROA_VALID) then {
+ accept;
+ } else {
+ reject proto, "[dn42] ROA check failed for ", net, " ASN ", bgp_path.last;
+ }
+ } else {
+ reject proto, "[dn42] invalid dn42 network ", net, " ASN ", bgp_path.last;
+ }
+ };
+ export filter {
+ if net ~ tnet then {
+ accept proto, "[dn42] accepting export tnet: ", net;
+ } else {
+ reject proto, "[dn42] rejecting export: ", net;
+ }
+ };
+ };
+}
+{% endif %}
+{% endfor %}
diff --git a/tnet/templates/conflatorio/bird-tnet-pre.conf b/tnet/templates/conflatorio/bird-tnet-pre.conf
new file mode 100644
index 0000000..d60e8df
--- /dev/null
+++ b/tnet/templates/conflatorio/bird-tnet-pre.conf
@@ -0,0 +1,20 @@
+define tnet = fdb1:4242:3538:2000::/52;
+
+function is_tnet() -> bool
+{
+ return net ~ tnet;
+}
+
+roa6 table dn42_roa;
+
+protocol static {
+ roa6 { table dn42_roa; };
+ include "/etc/bird/dn42_roa_bird2_6.conf";
+};
+
+function dn42_is_valid_network() -> bool
+{
+ return net ~ [
+ fd00::/8{44,64} # ULA address space as per RFC 4193
+ ];
+}
diff --git a/tnet/templates/conflatorio/bird-tnet.conf b/tnet/templates/conflatorio/bird-tnet.conf
new file mode 100644
index 0000000..4ffcc7f
--- /dev/null
+++ b/tnet/templates/conflatorio/bird-tnet.conf
@@ -0,0 +1,48 @@
+# Set to true if this peer is directly connected to a dn42 peer
+define is_dn42_peer = true;
+# If we are connected directly to dn42, we don't want the dn42 routes from others
+define import_dn42 = !is_dn42_peer;
+define export_dn42 = is_dn42_peer;
+
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if import_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": import reject, reason=not tnet";
+ }
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) export accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if export_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": export reject, reason=not tnet";
+ }
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fe80:4540:476c:d432:2f32:818b:811b:bb61;
+ interface "tnet-hash";
+ password "{{ bgp_password['conflatorio-hash'] }}";
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fe80:47fc:0660:b91f:1063:a6ae:46bb:7589;
+ interface "tnet-knot";
+ password "{{ bgp_password['conflatorio-knot'] }}";
+}
diff --git a/tnet/templates/coregonus/bird-tnet-pre.conf b/tnet/templates/coregonus/bird-tnet-pre.conf
new file mode 100644
index 0000000..d60e8df
--- /dev/null
+++ b/tnet/templates/coregonus/bird-tnet-pre.conf
@@ -0,0 +1,20 @@
+define tnet = fdb1:4242:3538:2000::/52;
+
+function is_tnet() -> bool
+{
+ return net ~ tnet;
+}
+
+roa6 table dn42_roa;
+
+protocol static {
+ roa6 { table dn42_roa; };
+ include "/etc/bird/dn42_roa_bird2_6.conf";
+};
+
+function dn42_is_valid_network() -> bool
+{
+ return net ~ [
+ fd00::/8{44,64} # ULA address space as per RFC 4193
+ ];
+}
diff --git a/tnet/templates/coregonus/bird-tnet.conf b/tnet/templates/coregonus/bird-tnet.conf
new file mode 100644
index 0000000..2d2a573
--- /dev/null
+++ b/tnet/templates/coregonus/bird-tnet.conf
@@ -0,0 +1,42 @@
+# Set to true if this peer is directly connected to a dn42 peer
+define is_dn42_peer = true;
+# If we are connected directly to dn42, we don't want the dn42 routes from others
+define import_dn42 = !is_dn42_peer;
+define export_dn42 = is_dn42_peer;
+
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if import_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": import reject, reason=not tnet";
+ }
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) export accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if export_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": export reject, reason=not tnet";
+ }
+ };
+ };
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fe80:ba82:77f0:f96d:7a85:a7fa:ef6f:37d2;
+ interface "tnet-knot";
+ password "{{ bgp_password['coregonus-knot'] }}";
+}
diff --git a/tnet/templates/hash/bird-tnet-pre.conf b/tnet/templates/hash/bird-tnet-pre.conf
new file mode 100644
index 0000000..74c981d
--- /dev/null
+++ b/tnet/templates/hash/bird-tnet-pre.conf
@@ -0,0 +1,20 @@
+define tnet = fdb1:4242:3538:2000::/52;
+
+function is_tnet()
+{
+ return net ~ tnet;
+}
+
+roa6 table dn42_roa;
+
+protocol static {
+ roa6 { table dn42_roa; };
+ include "/etc/bird/dn42_roa_bird2_6.conf";
+};
+
+function dn42_is_valid_network()
+{
+ return net ~ [
+ fd00::/8{44,64} # ULA address space as per RFC 4193
+ ];
+}
diff --git a/tnet/templates/hash/bird-tnet.conf b/tnet/templates/hash/bird-tnet.conf
new file mode 100644
index 0000000..d9c52b0
--- /dev/null
+++ b/tnet/templates/hash/bird-tnet.conf
@@ -0,0 +1,76 @@
+# Set to true if this peer is directly connected to a dn42 peer
+define is_dn42_peer = true;
+# If we are connected directly to dn42, we don't want the dn42 routes from others
+define import_dn42 = !is_dn42_peer;
+define export_dn42 = is_dn42_peer;
+
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if import_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": import reject, reason=not tnet";
+ }
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) export accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if export_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": export reject, reason=not tnet";
+ }
+ };
+ };
+}
+
+protocol bgp tnet_conflatorio from tnet_tpl {
+ neighbor fe80:4540:476c:d432:2f32:818b:811b:bb60;
+ interface "tnet-confltrio";
+ password "{{ bgp_password['conflatorio-hash'] }}";
+
+ rr client;
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fe80:3b20:4cb0:5315:22a:c7de:a45b:8a7c;
+ interface "tnet-knot";
+ password "{{ bgp_password['hash-knot'] }}";
+
+ rr client;
+}
+
+protocol bgp tnet_lhn2pi from tnet_tpl {
+ neighbor fe80:6195:1d43:9655:35f7:9dba:798c:26b9;
+ interface "tnet-lhn2pi";
+ password "{{ bgp_password['hash-lhn2pi'] }}";
+
+ rr client;
+}
+
+protocol bgp tnet_node1 from tnet_tpl {
+ neighbor fe80:a026:6ec2:b356:21c5:b51:22b9:a1df;
+ interface "tnet-node1";
+ password "{{ bgp_password['hash-node1'] }}";
+
+ rr client;
+}
+
+protocol bgp tnet_node2 from tnet_tpl {
+ neighbor fe80:a7a6:c1a8:c261:232e:7d67:fc27:7c8d;
+ interface "tnet-node2";
+ password "{{ bgp_password['hash-node2'] }}";
+
+ rr client;
+}
diff --git a/tnet/templates/knot/bird-tnet-pre.conf b/tnet/templates/knot/bird-tnet-pre.conf
new file mode 100644
index 0000000..d60e8df
--- /dev/null
+++ b/tnet/templates/knot/bird-tnet-pre.conf
@@ -0,0 +1,20 @@
+define tnet = fdb1:4242:3538:2000::/52;
+
+function is_tnet() -> bool
+{
+ return net ~ tnet;
+}
+
+roa6 table dn42_roa;
+
+protocol static {
+ roa6 { table dn42_roa; };
+ include "/etc/bird/dn42_roa_bird2_6.conf";
+};
+
+function dn42_is_valid_network() -> bool
+{
+ return net ~ [
+ fd00::/8{44,64} # ULA address space as per RFC 4193
+ ];
+}
diff --git a/tnet/templates/knot/bird-tnet.conf b/tnet/templates/knot/bird-tnet.conf
new file mode 100644
index 0000000..699c0f2
--- /dev/null
+++ b/tnet/templates/knot/bird-tnet.conf
@@ -0,0 +1,121 @@
+# Set to true if this peer is directly connected to a dn42 peer
+define is_dn42_peer = true;
+# If we are connected directly to dn42, we don't want the dn42 routes from others
+define import_dn42 = !is_dn42_peer;
+define export_dn42 = is_dn42_peer;
+
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if import_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": import reject, reason=not tnet";
+ }
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) export accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if export_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": export reject, reason=not tnet";
+ }
+ };
+ };
+}
+
+protocol bgp tnet_conflatorio from tnet_tpl {
+ neighbor fe80:47fc:660:b91f:1063:a6ae:46bb:7588;
+ interface "tnet-confltrio";
+ password "{{ bgp_password['conflatorio-knot'] }}";
+
+ rr client;
+}
+
+protocol bgp tnet_coregonus from tnet_tpl {
+ neighbor fe80:ba82:77f0:f96d:7a85:a7fa:ef6f:37d3;
+ interface "tnet-coregonus";
+ password "{{ bgp_password['coregonus-knot'] }}";
+
+ rr client;
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fe80:3b20:4cb0:5315:22a:c7de:a45b:8a7d;
+ interface "tnet-hash";
+ password "{{ bgp_password['hash-knot'] }}";
+
+ rr client;
+}
+
+protocol bgp tnet_kv24ix from tnet_tpl {
+ neighbor fe80:fef1:078a:5b64:efd3:ae7b:d286:d7cf;
+ interface "tnet-kv24ix";
+ password "{{ bgp_password['knot-kv24ix'] }}";
+
+ rr client;
+}
+
+protocol bgp tnet_lhn2pi from tnet_tpl {
+ neighbor fe80:d83a:350b:2162:6eda:1cc1:9cd7:80e9;
+ interface "tnet-lhn2pi";
+ password "{{ bgp_password['knot-lhn2pi'] }}";
+
+ rr client;
+}
+
+protocol bgp tnet_node1 from tnet_tpl {
+ neighbor fe80:58eb:3930:1815:2a6d:8918:70c9:96f3;
+ interface "tnet-node1";
+ password "{{ bgp_password['knot-node1'] }}";
+
+ rr client;
+}
+
+protocol bgp tnet_node2 from tnet_tpl {
+ neighbor fe80:9dd8:abac:cf05:aea3:dc03:4c74:32db;
+ interface "tnet-node2";
+ password "{{ bgp_password['knot-node2'] }}";
+
+ rr client;
+}
+
+protocol bgp routedbits_lon1 {
+ local as 4242423538;
+ neighbor fe80::207;
+ neighbor as 4242420207;
+ interface "tnet-rtdbts_l1";
+
+ ipv6 {
+ import filter {
+ if dn42_is_valid_network() && (net !~ tnet) then {
+ # Check when unknown or invalid according to ROA
+ if (roa_check(dn42_roa, net, bgp_path.last) = ROA_VALID) then {
+ accept;
+ } else {
+ reject proto, "[dn42] ROA check failed for ", net, " ASN ", bgp_path.last;
+ }
+ } else {
+ reject proto, "[dn42] invalid dn42 network ", net, " ASN ", bgp_path.last;
+ }
+ };
+ export filter {
+ if net ~ tnet then {
+ accept proto, "[dn42] accepting export tnet: ", net;
+ } else {
+ reject proto, "[dn42] rejecting export: ", net;
+ }
+ };
+ };
+}
diff --git a/tnet/templates/lhn2pi/bird-tnet-pre.conf b/tnet/templates/lhn2pi/bird-tnet-pre.conf
new file mode 100644
index 0000000..74c981d
--- /dev/null
+++ b/tnet/templates/lhn2pi/bird-tnet-pre.conf
@@ -0,0 +1,20 @@
+define tnet = fdb1:4242:3538:2000::/52;
+
+function is_tnet()
+{
+ return net ~ tnet;
+}
+
+roa6 table dn42_roa;
+
+protocol static {
+ roa6 { table dn42_roa; };
+ include "/etc/bird/dn42_roa_bird2_6.conf";
+};
+
+function dn42_is_valid_network()
+{
+ return net ~ [
+ fd00::/8{44,64} # ULA address space as per RFC 4193
+ ];
+}
diff --git a/tnet/templates/lhn2pi/bird-tnet.conf b/tnet/templates/lhn2pi/bird-tnet.conf
new file mode 100644
index 0000000..f755c3b
--- /dev/null
+++ b/tnet/templates/lhn2pi/bird-tnet.conf
@@ -0,0 +1,48 @@
+# Set to true if this peer is directly connected to a dn42 peer
+define is_dn42_peer = true;
+# If we are connected directly to dn42, we don't want the dn42 routes from others
+define import_dn42 = !is_dn42_peer;
+define export_dn42 = is_dn42_peer;
+
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if import_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": import reject, reason=not tnet";
+ }
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) export accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if export_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": export reject, reason=not tnet";
+ }
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fe80:6195:1d43:9655:35f7:9dba:798c:26b8;
+ interface "tnet-hash";
+ password "{{ bgp_password['hash-lhn2pi'] }}";
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fe80:d83a:350b:2162:6eda:1cc1:9cd7:80e8;
+ interface "tnet-knot";
+ password "{{ bgp_password['knot-lhn2pi'] }}";
+}
diff --git a/tnet/templates/node1/bird-tnet-pre.conf b/tnet/templates/node1/bird-tnet-pre.conf
new file mode 100644
index 0000000..74c981d
--- /dev/null
+++ b/tnet/templates/node1/bird-tnet-pre.conf
@@ -0,0 +1,20 @@
+define tnet = fdb1:4242:3538:2000::/52;
+
+function is_tnet()
+{
+ return net ~ tnet;
+}
+
+roa6 table dn42_roa;
+
+protocol static {
+ roa6 { table dn42_roa; };
+ include "/etc/bird/dn42_roa_bird2_6.conf";
+};
+
+function dn42_is_valid_network()
+{
+ return net ~ [
+ fd00::/8{44,64} # ULA address space as per RFC 4193
+ ];
+}
diff --git a/tnet/templates/node1/bird-tnet.conf b/tnet/templates/node1/bird-tnet.conf
new file mode 100644
index 0000000..bafb6de
--- /dev/null
+++ b/tnet/templates/node1/bird-tnet.conf
@@ -0,0 +1,48 @@
+# Set to true if this peer is directly connected to a dn42 peer
+define is_dn42_peer = true;
+# If we are connected directly to dn42, we don't want the dn42 routes from others
+define import_dn42 = !is_dn42_peer;
+define export_dn42 = is_dn42_peer;
+
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if import_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": import reject, reason=not tnet";
+ }
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) export accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if export_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": export reject, reason=not tnet";
+ }
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fe80:a026:6ec2:b356:21c5:b51:22b9:a1de;
+ interface "tnet-hash";
+ password "{{ bgp_password['hash-node1'] }}";
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fe80:58eb:3930:1815:2a6d:8918:70c9:96f2;
+ interface "tnet-knot";
+ password "{{ bgp_password['knot-node1'] }}";
+}
diff --git a/tnet/templates/node2/bird-tnet-pre.conf b/tnet/templates/node2/bird-tnet-pre.conf
new file mode 100644
index 0000000..74c981d
--- /dev/null
+++ b/tnet/templates/node2/bird-tnet-pre.conf
@@ -0,0 +1,20 @@
+define tnet = fdb1:4242:3538:2000::/52;
+
+function is_tnet()
+{
+ return net ~ tnet;
+}
+
+roa6 table dn42_roa;
+
+protocol static {
+ roa6 { table dn42_roa; };
+ include "/etc/bird/dn42_roa_bird2_6.conf";
+};
+
+function dn42_is_valid_network()
+{
+ return net ~ [
+ fd00::/8{44,64} # ULA address space as per RFC 4193
+ ];
+}
diff --git a/tnet/templates/node2/bird-tnet.conf b/tnet/templates/node2/bird-tnet.conf
new file mode 100644
index 0000000..8a7b887
--- /dev/null
+++ b/tnet/templates/node2/bird-tnet.conf
@@ -0,0 +1,48 @@
+# Set to true if this peer is directly connected to a dn42 peer
+define is_dn42_peer = true;
+# If we are connected directly to dn42, we don't want the dn42 routes from others
+define import_dn42 = !is_dn42_peer;
+define export_dn42 = is_dn42_peer;
+
+template bgp tnet_tpl {
+ local as 4242423538;
+ neighbor internal;
+
+ direct;
+
+ ipv6 {
+ next hop self;
+ import filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if import_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": import reject, reason=not tnet";
+ }
+ };
+ # newer bird's only
+ # import keep filtered;
+ export filter {
+ if is_tnet() then {
+ accept proto, ": (tnet) export accept, net=", net, ", from=", from, ", gw=", gw;
+ } else if export_dn42 && dn42_is_valid_network() then {
+ accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
+ } else {
+ reject proto, ": export reject, reason=not tnet";
+ }
+ };
+ };
+}
+
+protocol bgp tnet_hash from tnet_tpl {
+ neighbor fe80:a7a6:c1a8:c261:232e:7d67:fc27:7c8c;
+ interface "tnet-hash";
+ password "{{ bgp_password['hash-node2'] }}";
+}
+
+protocol bgp tnet_knot from tnet_tpl {
+ neighbor fe80:9dd8:abac:cf05:aea3:dc03:4c74:32da;
+ interface "tnet-knot";
+ password "{{ bgp_password['knot-node2'] }}";
+}
diff --git a/tnet/wg-keys-genkey.yml b/tnet/wg-keys-genkey.yml
new file mode 100644
index 0000000..c974a1d
--- /dev/null
+++ b/tnet/wg-keys-genkey.yml
@@ -0,0 +1,29 @@
+- set_fact:
+ key: "keys/wg-{{ inventory_hostname }}-{{ item.key }}.sops.key"
+ pub: "keys/wg-{{ inventory_hostname }}-{{ item.key }}.pub"
+- set_fact:
+ priv: "{{ lookup('community.sops.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: "{{ key }}"
+ content_text: "{{ new_priv.stdout }}"
+
+ - name: Save Wireguard public key
+ copy:
+ dest: "{{ 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..c1c520b
--- /dev/null
+++ b/tnet/wg-links-link.yml
@@ -0,0 +1,62 @@
+- set_fact:
+ if_name: tnet-{{ item.value.if_name|default(item.key) }}
+
+#- debug:
+# msg: |
+# if_name {{ if_name }}
+# item.value.if_name {{ item.value.if_name|default("NOT SET") }}
+# item.key {{ item.key }}
+
+- 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-{{ if_name }}.netdev"
+ owner: systemd-network
+ group: adm
+ mode: 0640
+ content: |
+ [NetDev]
+ Name={{ if_name }}
+ 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-{{ if_name }}.network"
+ owner: systemd-network
+ group: adm
+ content: |
+ [Match]
+ Name={{ if_name }}
+
+ [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