Compare commits
3 commits
960315d182
...
28150818a7
| Author | SHA1 | Date | |
|---|---|---|---|
|
28150818a7 |
|||
|
866005c055 |
|||
|
50cf34e3f3 |
43 changed files with 1671 additions and 0 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
skip_list:
|
skip_list:
|
||||||
- "yaml[line-length]"
|
- "yaml[line-length]"
|
||||||
- "name[casing]"
|
- "name[casing]"
|
||||||
|
- "yaml[brackets]"
|
||||||
|
|
||||||
exclude_paths:
|
exclude_paths:
|
||||||
- .forgejo/
|
- .forgejo/
|
||||||
|
|
|
||||||
198
inventories/z9/host_vars/rt1.sops.yaml
Normal file
198
inventories/z9/host_vars/rt1.sops.yaml
Normal file
|
|
@ -0,0 +1,198 @@
|
||||||
|
secrets__secrets:
|
||||||
|
- name: ENC[AES256_GCM,data:MmqDXUKy+U67JZFmKJTGLYAJcYPClQ8M2w==,iv:/eDx++bJCzdKXYB8YipB/GB6aM421JR3sy8i5trBKxk=,tag:/zTklys9bN839iT1qOH0UQ==,type:str]
|
||||||
|
content: ENC[AES256_GCM,data:2ljp324rAsF2zk2631TI7bV1xKxdFr4u4NxrsPYnjWsL0PX0n0KhJ1qvJCs=,iv:0+DxsTTiNLOg5iH83bFT/d+0uW2rn6bATSm3xc5PEdE=,tag:XbBDrrjriXPedyT4+sBBwA==,type:str]
|
||||||
|
- name: ENC[AES256_GCM,data:9i4hZU7Hv/IMlI/1oYthx8g57nrst9LHZQk=,iv:IQanD/CA64A+hVyTQBiTvWdXyY8qNF9BpehWZxI5a9c=,tag:RiY0OJe2xbFPG6wfe5XjiA==,type:str]
|
||||||
|
content: ENC[AES256_GCM,data:lrwHaNvHkh5E94ziiQsd8ua9YvuwmhZ6iIGZS0oFnZdYKuyNh7egWOoii2o=,iv:LLRKhbiJl1GwK/SfqNdNrrJuDF17YXw3hHmuhlyI87w=,tag:DbR/a7jfy1+4yswSdYfOFA==,type:str]
|
||||||
|
- name: ENC[AES256_GCM,data:2lJUcDJ7ECJ1bF4Fg1VwOR2tBIQ77ZvDAbFF8w==,iv:HrPWIetjN/lOyQ7Mvk0sM1w+bWldlNfWhvw7/sfqKN8=,tag:AJL0s+f0O/yR4G3RVd1IHQ==,type:str]
|
||||||
|
content: ENC[AES256_GCM,data:68GUwG1Q2s2jH92HS0FQWrcMHJP8fHjrOqr21gsdswxKekQrpxX5B3BBFfM=,iv:HOsNUAKE5rOmKgZft2JK1NnZUuhk261d9WYWJS22nLM=,tag:3husFvB57AGVFzF7hKzLpw==,type:str]
|
||||||
|
- name: ENC[AES256_GCM,data:ESxpEp9k9BdD1GJv+af+U3ny0+RPuaJjWDhQ,iv:DxsZLiDF8F+ixepbUdlitMJ7DLHjGNFNuxRwLl7efo8=,tag:STnv/oLzbchdiwXfKP3fow==,type:str]
|
||||||
|
content: ENC[AES256_GCM,data:W2h5AcoT85OkekPeRkrf1m0bDdBjG/YNSbWlrcZtP7FjaPh/F+cx+J6oRRI=,iv:CLVXTqfstpIU3BX/Zdcnp9w0gWxeGDI/G1MNl6xr4ZU=,tag:yCqN4r1MV/VTWQvZ6COfIw==,type:str]
|
||||||
|
- name: ENC[AES256_GCM,data:IRwwy+WQxgQ8cDpB8HaCLpKwJj7oC87p0XOxWRo=,iv:BLXNMcigvaOeY6y4NlLPMMWQt9XFi6nodRwIYFgAAnU=,tag:OdQalmujOgrzW8oi64xMRg==,type:str]
|
||||||
|
content: ENC[AES256_GCM,data:C5oIcuEYtODsvjQZnbqbWVfP63mQzcRuh8f5rlBCyjwSq2mZiYGQe9t0T78=,iv:sITUDo9SKZTSwPfsMv4m4U0ruuVCcaxu7SUT52U4FSE=,tag:4CsSMJWQQPAIeK8DwUDBqg==,type:str]
|
||||||
|
- name: ENC[AES256_GCM,data:r0sbpjaGjezoNlyl1khy+Dly+8xbbfQZNB8om/E4/tj9lmM=,iv:MLrglBJA6BrHGmFRprlQcf5/Hqh952e5OyQQ9nPxumY=,tag:Se05kMBkSQ7TRxzij7Fo8A==,type:str]
|
||||||
|
content: ENC[AES256_GCM,data:/c1nRf1eZhbUmoQWvcj8yDaVPtyAN7Uu+S054q3C1/kXlQ7CgOe4CrMXnmk=,iv:ppar0aCKuIU3DOjwAoliZ5TOL199Z+Ffo4pCktjs0W8=,tag:nfaGutK+5KnlWBKU1MTxkQ==,type:str]
|
||||||
|
- name: ENC[AES256_GCM,data:7mwuykEqbGISOa2n+pWb6INLsHYdjyf2HxTtWpAr5xP1,iv:NMcg+L2DFtBO1nhyPid31yzLr+ZX7DUGl/WxV1MnrqU=,tag:65/BiUEI8v5oMlQqpKNDRg==,type:str]
|
||||||
|
content: ENC[AES256_GCM,data:SObbA3D/sGN5/i5ps4Zz3alygIXKbSgptFjfPHlwC8G588O+gKAkvKQwU/s=,iv:PY2vLfI3gInFeQbse49KC2/zZ9O4jeXAQ0fpP84GHHE=,tag:214Mb8hIYDkQ4+UkRWtc9w==,type:str]
|
||||||
|
- name: ENC[AES256_GCM,data:bES9O6JI4wTnuZsup9gflfaozeUDkfjVGNIFn8RnZQ==,iv:98kigM3KZIN5qXNdgfLg5WLmxzAsYCjNqVzyUPco/BI=,tag:1fwEtwQ6i9QQC3OCewN0eA==,type:str]
|
||||||
|
content: ENC[AES256_GCM,data:flO3Nb4u2WfWNVhn8k5Bgo3LmsHo2cVnLCsrz8ST9Ip7gO9FY9d27FQgphM=,iv:aiDoq+41cSjwcCZRaIPLtbltkOpc7FeuNN7swPqkHXQ=,tag:OhzcY2xKKJF2jZVRseXCFg==,type:str]
|
||||||
|
- name: ENC[AES256_GCM,data:ERsggezMBbs1YwbIgwzKSAEHWWOWYxap8IDdn2YtEKvZexqu,iv:XbObLp2QERgt57tc/Cpha1CWXi+GttcIU8hJFGSp8e8=,tag:FqCuSbvLRERpVnQTzQsfpQ==,type:str]
|
||||||
|
content: ENC[AES256_GCM,data:QPoZA71CwE8EFE0I+6z0z0O1bUCMQDDDG7wGNoxXKt3ovLkFt21r8WG7VhA=,iv:InX6A71f3DGTg1wO4G0ECf488+FnKgTHffVwvJ9hHQ0=,tag:EVxwJlneN1CbMLXto7uLFw==,type:str]
|
||||||
|
sops:
|
||||||
|
lastmodified: "2026-05-23T21:19:38Z"
|
||||||
|
mac: ENC[AES256_GCM,data:Ded0VfGn8H2qGMk5LDyqF1gW8hajKc9FgvCynHPQkWkhMSdaHYbFwf//gWi2TjIO22HD5sPw1w9KAjPy53b57RwBCjXfMMq0JCPvuePLK40NC8uCAi+wr5Er0fAWz1JiaA+dowposoi6RxBtyHCaNHMDVGMLh1j+IL+pTOyi6fk=,iv:gssOMmR0DDQC4WjMVXTD/zqbQa8qlBr9ZZWF15W0WnE=,tag:DORTxQfCmpVjDjyGSNH7dw==,type:str]
|
||||||
|
pgp:
|
||||||
|
- created_at: "2026-05-23T20:58:22Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQIMAxK/JaB2/SdtAQ//bbr0oza/X6GG43ay9coZbb+0aptj3pGzQqT1ND6nsI34
|
||||||
|
iY3IZaMZIti+j/BS5kEfmRn56WZSx6EcbSrlbiyL5NZw9R4/bGRd848rOLwMvuYO
|
||||||
|
8Usei9jHdpHiPvKBZnZXaXGU8E27L0Y/LCxSIFOXbyHzHogjz3JmtJQsYpSC+ue6
|
||||||
|
mIRrSAJPALrqEL+DZ2bl5UYlBIRXdtIe/jL1CFCJhULt+EjJw72T62DZK/jaNZTj
|
||||||
|
eint63+IFZSxx5e5vrAeQB+p2EDsp6c5NbDrlgQWb8/J1q/G5bG4KxBs/0hum7OW
|
||||||
|
/sSsIDb4Qb8U/axt5LduV6AkMXXsclNLQU/LbFAbBRcV8Lvh11f0U3V/UnqUdmvp
|
||||||
|
efesb5VQh1x0uWjzobxaioLEV/YYbWx8binvuJ3MBHKp6E2xj7IrBTVl0MWgjEou
|
||||||
|
ZbQDF8DvxA49xEnJyOviL2/zjnV1kXy+Q+BKZga3pr8AnBHA8Ftbsvmk6CyDEM0R
|
||||||
|
i4FAUOVa9VWiszoOaqyn1Fl02YlweFmgzuFjd3wi74Tbi6RE37rN/vBKySbnRQYl
|
||||||
|
rFUU3SQlztxd4UBAXBo6gQKTz5B4rehvKVye2mmqEE9bas/lCWAKVJ7+3+0NQdA2
|
||||||
|
lp/X7h7DRSD2Qkd35SzxkJz7P86rd0LM1aOu87psxYavEWw6vFs2ErDkSeqDn1DU
|
||||||
|
aAEJAhDb1s+jpDUa3GvVZjoiiCyutI018jfJU1vi12PGktg4KJcXBx66R/nLItO2
|
||||||
|
ba6o66scIiAJZ+jYymW6RbJTI7XRHJp4Cs8COhpMRQeOGwEHFGGL2rpGd3KrOLQe
|
||||||
|
0/C6EmrJvGpl
|
||||||
|
=atNE
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: EF643F59E008414882232C78FFA8331EEB7D6B70
|
||||||
|
- created_at: "2026-05-23T20:58:22Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQEMA1QflAioE8i3AQf+NkUGCBrTCkkyl+iBb6P1IWLDGqAY8s20mBZ7G3plKE/J
|
||||||
|
UrIe947letj/8EA+yoN0uzjwEkh3rDLtZrOLTSgflq1GMpdVhdaTbS71fD3kghJQ
|
||||||
|
P9tz0zDQEgXHBi+2q7iRrEETx/cu7UDNkSCNvQbWvDmo8MfbSBy+VFCknfupdQxj
|
||||||
|
9hlq4kBA0pckPCY8V7E05nDhQntS8wpXIEO1SWiSuiGg+p4yFlvNzWNfhLyEFHxL
|
||||||
|
BZHVVIU/mzyClMajjLJWjKI1LSgHXXIa28tgdrtiBZOsF+CWveYqJlRJh9NUepJI
|
||||||
|
ZSeFNhyWmnS9ZkQu5BUyb7+oRxfq2NY51T76Xbo8gNJeAZWwyr1sj1wjubuVeNMF
|
||||||
|
aU6FiynYWr3I35JRVghTMJ93CnPl+NTpWnQuHpq1bzEGe2u8BMFhgrTu2yMD23VQ
|
||||||
|
eGien6SqfEbA/wAiz9ZaUgTQH8UyHpliteZ8/SQgkw==
|
||||||
|
=UJvq
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: 21C9579E6503CA815A68ABD8541F9408A813C8B7
|
||||||
|
- created_at: "2026-05-23T20:58:22Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQIMAz5uSgHG2iMJAQ/+O5JOJfDp/BuBCuXDQVUgJagspQO6LZ/MLrl9qH282AMf
|
||||||
|
MdgN5M/WjbOv6WZDCMg4nfXps1XgzUEiaA/1m4PxHlMmxjEoQHAE51GMcxsXg+B1
|
||||||
|
lM+8uJ1+js1sdDX4xsZtJpbVxJKIbPuhF7oM950oDlL2+UKhUbPlCoxeOihlkVGa
|
||||||
|
RqHJ/M74xkyKH281oRI5bllJaAroBnXVSFIvbCxA7ts/O7YJPKBowTIj62Kye9Ra
|
||||||
|
aHC11bPy2RlJCcFZJjPSdnXvzUMpfzEd6O72VUtMBBQZn/in7efutC8FwpRYuUW7
|
||||||
|
vSofxUN5n6Mtb8A1XSMFD/nfXVc/pM6Cu7kdtHSwSKgbKKf6mrCeVgaM9xcG0t2W
|
||||||
|
9yEtWvkdvOOSqz/vd1vkftbBWcCejX7bktfmD408CJAs1bjzz5CyrDoWcnYmbxFY
|
||||||
|
6N4rhMDRMTe19VH2UQ4EvSjQjmmYCspnUW3/78zi5kU1ijyQy13UpbgwulU7tSGc
|
||||||
|
KKtBjPoy6mLIVl0YhnEJZWD/XPIRWyW+0s+7m70YXCWSVipvCelEE8oPWjf8PLaE
|
||||||
|
J85crlZGkSRcRO7yOP/YtB9ZnajgaF33zJU3ZWr0C/IXj2TeepZp/JUteD2H/LRf
|
||||||
|
9YJzOFYDOFIWcdmaTzJLBEaefWcDjT6wkIf6TBqQRMLsu8JUwy9VwFcsi/d5aMXS
|
||||||
|
XgEQqSxYb1B39OR0sS1Xpw0/CFe4imBPuG3w0tOAyM3DbPWYY1kZYIRZenV1ZIOS
|
||||||
|
aRZJh086kuWgHYB76VoNzDK3QperWvHL/8CT2g3HuPiVGSrrXwxCYXk5+UXB9bQ=
|
||||||
|
=Xx91
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: 18DFCE01456DAB52EA38A6584EDC64F35FA1D6A5
|
||||||
|
- created_at: "2026-05-23T20:58:22Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hF4DsZXvxFXTXoQSAQdA0rZTVdySF9nUiz7ZyFJgq1tojyLojGTgE4UIEJzFSTUw
|
||||||
|
9y4kbGn1cWMpAqr+sE3WHV9p7v6kgm/XdUjXGN4DadpUbiYx6sQW2Jov6Km2EYhq
|
||||||
|
0l4BawupjX25wi7c2yR5iGdxYS8oCYVmGgcAB3T96v8VsXpkAOYQAOOh7B9GQIxm
|
||||||
|
hB3cFQLCy2un3VvBsiKGFMA2FhZYBOuaEwP/KmWnPv0IPIRH4by6LDB0xgq8MUNz
|
||||||
|
=xoVE
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: 9633412309CCB83BFA39BA5F2FEF746201D7FCFE
|
||||||
|
- created_at: "2026-05-23T20:58:22Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hF4DerEtaFuTeewSAQdAgcGcZ3BT6lsJ8FxkMghxg5/PZLtIzNeJaEUbxN0EFhsw
|
||||||
|
uM+Lec3k9BJSUJK8GeVmesYxQh8vP6Yi/+m2LnGjHXzkQg8Bx1HJzuC/Ap36rC6N
|
||||||
|
0l4Bxj1URTsRD4yILEA3TY4Dn9St9uOtodJcf5YdAKvmeb3Uwy//huNnA1eK7b+v
|
||||||
|
WRHcU2K+GgkSzLiRLZTc/nMrrCQ/P5HzwYHmP2rypFX7kxXlPd3K6yMZWTiSgYZd
|
||||||
|
=gZLQ
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: 057870A2C72CD82566A3EC983695F4FCBCAE4912
|
||||||
|
- created_at: "2026-05-23T20:58:22Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQIMAxjNhCKPP69fAQ//YGOLOFtORNbOu+KFCtGcJBXQMy6Ej3/tePVuDi2vmqLD
|
||||||
|
3Dz6stB9D+BmBbcgbFlDA+g7Vi6DD+zcze9wM10iuc9t9ucAuQ7B/ymSvJc4MrYn
|
||||||
|
MJFvQv5IYgWJmzXLYEFYYpmZPGG3hSHSgWIPs+574wEA/L867ktguW6ZD3ZuMn3E
|
||||||
|
yjCTeT/ZkGjuIpGqMu2/o9Wvc+RYgWlCB69D8kTHtnbFzbqEzvKU5/zte5ThchA+
|
||||||
|
QZwFd/gk3o1G/7WOYJJ6CbBSOQaSrfm0mnb6sppNPdOAQtqHVSFVX5vX96gXsht/
|
||||||
|
AkrvD6/2R5eNzbqRaU83cg7c5far49xoBbL6czreWY3D56yK4BJbrrg9mK7oCEfO
|
||||||
|
GaRDFFD7R4LJPfVx2xDoIQ3Hyp4E3dz4nyJx0Kg7NSEt7soOb5MnZ+04LLAiHbaT
|
||||||
|
qZr618V530uw3qaCsYcgHy+WsZXXlqXQey3A7jphi3u9Kvn9UjeegjNvpOrMk6g1
|
||||||
|
RhGzv72G0wjZnzjTjPlzeROHaQ6RPgfpkZjEcVZNZkfAgAbB3XPgCFGKz4qvx9MP
|
||||||
|
4eHIlBSJizLzSi519o+0i5PwrZdEf9L4RUVxgQgdJXMh1JaydVh5DOU+xomdStD5
|
||||||
|
Maymkt8fSgYgDaS953YA2e04PrkXCH0EHZ62T9EMxreEoU3nYTmw/TGx7RfU+wzS
|
||||||
|
XgEuQkLWSToJ40/Ir3obDA246yv7J2FpmPwG4oFypkM5xe1WjlMlk90b9RBhUgXk
|
||||||
|
ylRXXLBzau6mtbPOa7LGdVyVs2DClWQo9BoK+dxEsnW+TR144O4UmZEfifJXvgQ=
|
||||||
|
=ympd
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: F38C9D4228FC6F674E322D9C3326D914EB9B8F55
|
||||||
|
- created_at: "2026-05-23T20:58:22Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQIMA46L6MuPqfJqARAAshm2x7wX/9g3XJtSN0AnSeCwSHO1I4+ebLKOsB7zcXh8
|
||||||
|
hrVO3694jQcU9L01H7jGYw4lNNzBd61/uVE5AvMq4Sqn9iH3MFNESbAEOWVV+TRf
|
||||||
|
53JMg9C/aZfde8gHgHPaiVXlCBVEVY9CqHpUXUKDmEE7iRb5P4DuMxOmybDYZGzY
|
||||||
|
4c5Ke1MFMkGRmAtsT1qLrT2vh+F0CX4JwpMkxCmOzSWAXbwrVOigJ35l5zM6vme4
|
||||||
|
5EQu9jI8FApTxVchZbr0v3UOKxp5OebqC0jGeznZNf4qb0qnsvuowY6IIw5Tl3/q
|
||||||
|
H4TLq5EUOVqTC1voIWY/gMjieiW1gtr6vASy4MvbswsZLc26YVE9IbHzAOUWDN2o
|
||||||
|
f2iQ3aZYuINvniD23XtM0TKepDXWq5eF+AJpmyP/LL8sYvSnWFD+muK3O657djEu
|
||||||
|
yGZs2EFTrkiUvhBq3apOOYiU0eOi4Aq6UeEbOsLENnQrBRXuHEm4KUSwzOitVwJ1
|
||||||
|
ByxQTu7wzY727SOR2hzjMC0LI602WGpEQU7ech5L4uWqtMFwaBP9HnUamcofKqqt
|
||||||
|
1vI2BevsJfQ0rtTE6GWseHt702lllTGe3RnHWc6YsMWLwUfRdBPggMW37hAPPcfO
|
||||||
|
ytbU3RJIxx4vImRtXhkI5yvbpFQrooz1zSeXWaitPE5jmmiKe9IRStLnfiq9E2TS
|
||||||
|
XgFVuQM8K0LgUYEoAipvafhnC3ohfGsM2AYd36EoaMNLeQ2ZZEiV06/Y3EWoI0iM
|
||||||
|
aqRLwyBvTuDOc5BK32nCbAgUbbPJjPhqWaoNp5ymCBV76oW613gApkzoUF+OIUU=
|
||||||
|
=KKaI
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: 8996B62CBD159DCADD3B6DC08BB33A8ABCF7BC4A
|
||||||
|
- created_at: "2026-05-23T20:58:22Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hF4DQrf1tCqiJxoSAQdA8YKD21h5POTLPf04KvGN93omFgkYO+Y8Kc0jM0vdqm8w
|
||||||
|
3zYRaLsDjdh8Zd89/HhHJUfLrTp/IJ0n81sK0ZjznbXKxgkseGthMzof+L7BnPAp
|
||||||
|
0l4BnAs9iZS4q2LZVS7ySBP89xLmF97qhK2jagMNSAwq8Afxbcw8oQAVQmeyYfxx
|
||||||
|
X59irIHjI1ugO4o1WnTN67nTQjU5msbVBs0eALrw3jobzFHRL67fS0a4Soa59LTY
|
||||||
|
=ZHIU
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: B71138A6A8964A3C3B8899857B4F70C356765BAB
|
||||||
|
- created_at: "2026-05-23T20:58:22Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hF4DzAGzViGx4qcSAQdAN7rRlv3dMoFOfj9eHgf+0H8521b32nWqySUdriEy6Tcw
|
||||||
|
gjuReMBpKQOgUfuhIiWkHIKNtNgMrYWiC20ESOXX5b9uYZNpqHCgHQPlX0lEeGim
|
||||||
|
0lgBOieL7mSEq4wkWLCSv4sBAmkQA+dnugBeF+TrlqKQTZsbe/Z+jNG4ZrHRvdqi
|
||||||
|
4I5It+uaRV9Vrul1c6H7fNreRPUd4hNyJwU7gZQ+vU2WyAmgqerxE1Wb
|
||||||
|
=gplT
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: D2E9C0807BF681F5E164DAFC5EE1B61CD90954CD
|
||||||
|
- created_at: "2026-05-23T20:58:22Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQIMA2pVdGTIrZI+ARAAjWK8mU99VcnM/Ckzm+YsZFTwnz4PDAenDDdZ1OOz5IXe
|
||||||
|
tS4SQPcQlSSOuXEkFLJMmm8QVxtUC3Gh4nF7o+7OygT+0ZXOrB7jFgg10+v/KVA9
|
||||||
|
hSlqBdsMxcC0OzBtkGyAOXOxqnTVubuHEGyGpIryHt1/lthUUZHBbjgw7P0Tw2/U
|
||||||
|
sYK5j5YbqhyBl20gyZorkTTq7pHfVXDVtpe75+ZkqbOg4S6HgW3/dl+v6N0TLfRs
|
||||||
|
GVl0fUlWIK/akGCB71zdwJs2I1qTeMTlL6v+XSUdXj0YV+5fjh3wf8qzN9geIjQK
|
||||||
|
ybxGFWDKCAgTMnqoFF5BCL23hFtnCbTtLN1wQT7/m7zpjaBKHOBXZOGXYZCMGZui
|
||||||
|
sBsUvPANgNdfOse9H2aABQvUQh8WqFw8S73GasvrZHAwEmvnXzocMJd+kUovzmQu
|
||||||
|
9FBk5UkcgXfmxeamoP8C700vh4zI+sKz6uEW0+AuVtLlLVqlb2w21kTc+ArZW52n
|
||||||
|
HLolH5q3Wj6pKuuFCWKr6UgLFcq2w4QngB2p+UABHU3RbwXIra7prDXCUcNC5iCn
|
||||||
|
ElRFY7OZ3nbHOf9oaW/MitcfszVLyl0ueoay6qxdlIGdXKRGpqxHqqr+92INV/iz
|
||||||
|
6CRoAsTqVq1a7ZuAaUdJPvfKVAHHEHjPwlrOc9cXvykG0iQKsRzgqiOtPiGQShnU
|
||||||
|
aAEJAhDSqCwywHDnQ7X9ZWIzPjwvqyHpEVez8zYh3vpgKpsLb9uL+JizZjV02HMe
|
||||||
|
nhiL+4o/aNjJgGJWph1uPFhU4wO4AavnNBsHbJSiL/1yTS96hdf8d+gB41yVLU3e
|
||||||
|
kBkDFLKkIBkU
|
||||||
|
=aRLd
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: 878FEA3CB6A6F6E7CD80ECBE28506E3585F9F533
|
||||||
|
- created_at: "2026-05-23T20:58:22Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hF4DKKbvh61jX5USAQdABId/P8ozRgJ4ItF1zvxp98aH+g3LZ6UGnxjYjtDxjEIw
|
||||||
|
VmyerznjOLnpz0EobXRRoot1Lo82Va64HQmXt26LG3gFY1HVp0WOnIZXa/CUoUb8
|
||||||
|
1GgBCQIQloFxKcgFTiRidaJfN7hSeQLleiEe3aifZUyJj8niTmBaY29t+CSoA46N
|
||||||
|
xZzX1AlxVjfmputhYdTyOYSJtGrj7otmnUN2P+55pjz4L2qCYAEKi1+ibqgpmJh/
|
||||||
|
bETQsT6WKJ8FXA==
|
||||||
|
=Ci7L
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: 41FFAF3D519CF5C039FBD8414BCC213729AF0E49
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.13.1
|
||||||
7
inventories/z9/host_vars/rt1.yaml
Normal file
7
inventories/z9/host_vars/rt1.yaml
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
systemd_networkd__config_dir: 'resources/z9/rt1/systemd_networkd/'
|
||||||
|
systemd_networkd__global_config: "{{ lookup('ansible.builtin.file', 'resources/z9/rt1/systemd_networkd_global_config.conf') }}"
|
||||||
|
nftables__config: "{{ lookup('ansible.builtin.file', 'resources/z9/rt1/nftables/nftables.conf') }}"
|
||||||
|
ansible_pull__timer_on_calendar: "*-*-* 04:00:00 Europe/Berlin"
|
||||||
|
ansible_pull__timer_randomized_delay_sec: 0min
|
||||||
|
unbound_access_control: [ "10.89.208.0/20" ]
|
||||||
|
kea_dhcp__include_vars: resources/z9/rt1/kea_dhcp.yaml
|
||||||
|
|
@ -14,6 +14,9 @@ all:
|
||||||
yate:
|
yate:
|
||||||
ansible_host: yate.ccchh.net
|
ansible_host: yate.ccchh.net
|
||||||
ansible_user: chaos
|
ansible_user: chaos
|
||||||
|
rt1:
|
||||||
|
ansible_host: rt1.ccchh.net
|
||||||
|
ansible_user: chaos
|
||||||
certbot_hosts:
|
certbot_hosts:
|
||||||
hosts:
|
hosts:
|
||||||
dooris:
|
dooris:
|
||||||
|
|
@ -35,6 +38,7 @@ infrastructure_authorized_keys_hosts:
|
||||||
light:
|
light:
|
||||||
waybackproxy:
|
waybackproxy:
|
||||||
yate:
|
yate:
|
||||||
|
rt1:
|
||||||
nginx_hosts:
|
nginx_hosts:
|
||||||
hosts:
|
hosts:
|
||||||
dooris:
|
dooris:
|
||||||
|
|
@ -46,11 +50,24 @@ ola_hosts:
|
||||||
proxmox_vm_template_hosts:
|
proxmox_vm_template_hosts:
|
||||||
hosts:
|
hosts:
|
||||||
thinkcccore0:
|
thinkcccore0:
|
||||||
|
systemd_networkd_hosts:
|
||||||
|
hosts:
|
||||||
|
rt1:
|
||||||
|
nftables_hosts:
|
||||||
|
hosts:
|
||||||
|
rt1:
|
||||||
|
unbound_hosts:
|
||||||
|
hosts:
|
||||||
|
rt1:
|
||||||
|
kea_dhcp_hosts:
|
||||||
|
hosts:
|
||||||
|
rt1:
|
||||||
alloy_hosts:
|
alloy_hosts:
|
||||||
hosts:
|
hosts:
|
||||||
light:
|
light:
|
||||||
yate:
|
yate:
|
||||||
dooris:
|
dooris:
|
||||||
|
rt1:
|
||||||
ansible_pull_hosts:
|
ansible_pull_hosts:
|
||||||
hosts:
|
hosts:
|
||||||
dooris:
|
dooris:
|
||||||
|
|
@ -59,3 +76,4 @@ ansible_pull_hosts:
|
||||||
yate:
|
yate:
|
||||||
secrets_hosts:
|
secrets_hosts:
|
||||||
hosts:
|
hosts:
|
||||||
|
rt1:
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,20 @@
|
||||||
tags:
|
tags:
|
||||||
- nftables
|
- nftables
|
||||||
|
|
||||||
|
- name: Ensure unbound deployment on unbound_hosts
|
||||||
|
hosts: unbound_hosts
|
||||||
|
roles:
|
||||||
|
- unbound
|
||||||
|
tags:
|
||||||
|
- unbound
|
||||||
|
|
||||||
|
- name: Ensure kea_dhcp deployment on kea_dhcp_hosts
|
||||||
|
hosts: kea_dhcp_hosts
|
||||||
|
roles:
|
||||||
|
- kea_dhcp
|
||||||
|
tags:
|
||||||
|
- kea_dhcp
|
||||||
|
|
||||||
- name: Ensure deployment of infrastructure authorized keys
|
- name: Ensure deployment of infrastructure authorized keys
|
||||||
hosts: infrastructure_authorized_keys_hosts
|
hosts: infrastructure_authorized_keys_hosts
|
||||||
roles:
|
roles:
|
||||||
|
|
|
||||||
293
resources/z9/rt1/kea_dhcp.yaml
Normal file
293
resources/z9/rt1/kea_dhcp.yaml
Normal file
|
|
@ -0,0 +1,293 @@
|
||||||
|
kea_dhcp__dns_servers:
|
||||||
|
v4:
|
||||||
|
- 185.161.129.134
|
||||||
|
v6:
|
||||||
|
- 2a07:c481::1:2
|
||||||
|
|
||||||
|
kea_dhcp__dhcp4:
|
||||||
|
enable: true
|
||||||
|
interfaces: [ "netlan.51", "netlan.52", "netlan.54" ]
|
||||||
|
control-sockets:
|
||||||
|
- socket-name: /var/run/kea-dhcp4-ctrl-agent.sock
|
||||||
|
socket-type: unix
|
||||||
|
lease-database:
|
||||||
|
type: memfile
|
||||||
|
persist: true
|
||||||
|
option-data:
|
||||||
|
- name: "domain-name-servers"
|
||||||
|
code: 6
|
||||||
|
csv-format: true
|
||||||
|
data: "{{ kea_dhcp__dns_servers.v4 | join(',') }}"
|
||||||
|
subnets:
|
||||||
|
- id: 1
|
||||||
|
subnet: 10.89.208.0/22
|
||||||
|
pools:
|
||||||
|
- pool: "10.89.208.32 - 10.89.211.250"
|
||||||
|
reservations:
|
||||||
|
- ip-address: 10.89.208.11
|
||||||
|
hostname: beamer
|
||||||
|
hw-address: "ac:87:a3:18:9e:01"
|
||||||
|
- ip-address: 10.89.208.12
|
||||||
|
hostname: Brother-CCCHH
|
||||||
|
hw-address: "00:80:77:04:3a:55"
|
||||||
|
- ip-address: 10.89.208.13
|
||||||
|
hostname: muzak
|
||||||
|
hw-address: "00:11:24:5f:4f:80"
|
||||||
|
- ip-address: 10.89.208.14
|
||||||
|
hostname: Big-Room-Beamer
|
||||||
|
hw-address: "64:d2:c4:db:08:5c"
|
||||||
|
- ip-address: 10.89.208.16
|
||||||
|
hostname: dooris
|
||||||
|
hw-address: "bc:24:11:b3:93:9c"
|
||||||
|
- ip-address: 10.89.208.17
|
||||||
|
hostname: hmdooris-ccu
|
||||||
|
hw-address: "bc:24:11:5f:2d:b1"
|
||||||
|
- ip-address: 10.89.208.27
|
||||||
|
hostname: cisco-slm248p
|
||||||
|
hw-address: "00:23:eb:b0:fc:3f"
|
||||||
|
- ip-address: 10.89.208.47
|
||||||
|
hw-address: "6c:df:fb:0b:34:21"
|
||||||
|
- ip-address: 10.89.208.48
|
||||||
|
hw-address: "6c:df:fb:0d:91:63"
|
||||||
|
- ip-address: 10.89.209.28
|
||||||
|
hostname: hp-color
|
||||||
|
hw-address: "3c:52:82:29:21:79"
|
||||||
|
- ip-address: 10.89.209.29
|
||||||
|
hostname: dooris-ng
|
||||||
|
hw-address: "6c:4b:90:19:21:a1"
|
||||||
|
- ip-address: 10.89.209.166
|
||||||
|
hostname: encoder-ccchh
|
||||||
|
hw-address: "00:4e:01:a2:40:d7"
|
||||||
|
- ip-address: 10.89.209.254
|
||||||
|
hostname: ki10
|
||||||
|
hw-address: "dc:a6:32:a9:ff:82"
|
||||||
|
option-data:
|
||||||
|
- name: routers,
|
||||||
|
csv-format: true
|
||||||
|
data: 10.89.208.1
|
||||||
|
- id: 2
|
||||||
|
subnet: 10.89.212.0/24
|
||||||
|
pools:
|
||||||
|
- pool: "10.89.212.32 - 10.89.212.250"
|
||||||
|
reservations:
|
||||||
|
- ip-address: 10.89.212.3
|
||||||
|
hostname: prusamk3
|
||||||
|
hw-address: "10:9c:70:2e:59:3e"
|
||||||
|
- ip-address: 10.89.212.4
|
||||||
|
hostname: prusamk4
|
||||||
|
hw-address: "10:9c:70:2e:6e:f0"
|
||||||
|
- ip-address: 10.89.212.11
|
||||||
|
hostname: Ziggy
|
||||||
|
hw-address: "44:17:93:53:65:57"
|
||||||
|
- ip-address: 10.89.212.12
|
||||||
|
hostname: legacy
|
||||||
|
hw-address: "00:15:65:a1:ed:98"
|
||||||
|
- ip-address: 10.89.212.23
|
||||||
|
hostname: foobarpay
|
||||||
|
hw-address: "f4:f2:6d:09:a6:73"
|
||||||
|
- ip-address: 10.89.212.24
|
||||||
|
hostname: foobackup
|
||||||
|
hw-address: "bc:24:11:20:1a:a8"
|
||||||
|
- ip-address: 10.89.212.27
|
||||||
|
hostname: ender3v2-sonic-pad
|
||||||
|
hw-address: "fc:ee:91:00:0e:14"
|
||||||
|
- ip-address: 10.89.212.31
|
||||||
|
hostname: octopi
|
||||||
|
hw-address: "b8:27:eb:0f:d8:09"
|
||||||
|
- ip-address: 10.89.212.32
|
||||||
|
hostname: 433mhz-bridge
|
||||||
|
hw-address: "0c:b8:15:fe:e3:34"
|
||||||
|
- ip-address: 10.89.212.33
|
||||||
|
hostname: wled-kueche
|
||||||
|
hw-address: "30:ae:a4:7a:8d:a0"
|
||||||
|
- ip-address: 10.89.212.34
|
||||||
|
hostname: wled-serverschrank
|
||||||
|
hw-address: "18:fe:34:a6:64:76"
|
||||||
|
- ip-address: 10.89.212.35
|
||||||
|
hostname: wled-couch
|
||||||
|
hw-address: "64:b7:08:40:ab:c0"
|
||||||
|
- ip-address: 10.89.212.36
|
||||||
|
hostname: laser
|
||||||
|
hw-address: "b8:27:eb:be:38:fa"
|
||||||
|
- ip-address: 10.89.212.37
|
||||||
|
hostname: laser-eth
|
||||||
|
hw-address: "b8:27:eb:eb:6d:af"
|
||||||
|
- ip-address: 10.89.212.42
|
||||||
|
hostname: t-mix
|
||||||
|
hw-address: "40:a5:ef:d9:eb:93"
|
||||||
|
- ip-address: 10.89.212.86
|
||||||
|
hostname: fritz-fon
|
||||||
|
hw-address: "00:1f:3f:c9:e5:b2"
|
||||||
|
- ip-address: 10.89.212.211
|
||||||
|
hostname: hauptraum-esphome
|
||||||
|
hw-address: "e8:db:84:e8:18:d2"
|
||||||
|
- ip-address: 10.89.212.212
|
||||||
|
hostname: werkstatt-esphome
|
||||||
|
hw-address: "3c:71:bf:26:42:32"
|
||||||
|
- ip-address: 10.89.212.213
|
||||||
|
hostname: ir-bridge-beamer
|
||||||
|
hw-address: "8c:ce:4e:51:93:dd"
|
||||||
|
- ip-address: 10.89.212.215
|
||||||
|
hostname: pi-dmx-werkstatt
|
||||||
|
hw-address: "b8:27:eb:65:e5:31"
|
||||||
|
- ip-address: 10.89.212.227
|
||||||
|
hostname: SIP-T46S
|
||||||
|
hw-address: "80:5e:c0:09:bf:55"
|
||||||
|
- ip-address: 10.89.212.230
|
||||||
|
hostname: SIP-T46S
|
||||||
|
hw-address: "80:5e:c0:22:33:08"
|
||||||
|
- ip-address: 10.89.212.232
|
||||||
|
hostname: staubi
|
||||||
|
hw-address: "b8:4d:43:98:51:2b"
|
||||||
|
- ip-address: 10.89.212.233
|
||||||
|
hostname: staubiv2
|
||||||
|
hw-address: "70:c9:32:82:25:b2"
|
||||||
|
- ip-address: 10.89.212.234
|
||||||
|
hostname: AtemMini
|
||||||
|
hw-address: "7c:2e:0d:13:72:a8"
|
||||||
|
- ip-address: 10.89.212.235
|
||||||
|
hostname: okilaser
|
||||||
|
hw-address: "2c:ff:65:22:b4:63"
|
||||||
|
- ip-address: 10.89.212.236
|
||||||
|
hw-address: "b8:27:eb:29:bd:77"
|
||||||
|
option-data:
|
||||||
|
- name: routers,
|
||||||
|
csv-format: true
|
||||||
|
data: 10.89.212.1
|
||||||
|
- id: 3
|
||||||
|
subnet: 10.89.213.0/24
|
||||||
|
pools:
|
||||||
|
- pool: "10.89.213.32 - 10.89.213.250"
|
||||||
|
reservations:
|
||||||
|
- ip-address: 10.89.213.2
|
||||||
|
hostname: sw-rack-1
|
||||||
|
hw-address: "F0:9F:C2:10:C3:AA"
|
||||||
|
- ip-address: 10.89.213.3
|
||||||
|
hostname: sw-rack-2-peo
|
||||||
|
hw-address: "44:d9:e7:06:69:5d"
|
||||||
|
- ip-address: 10.89.213.4
|
||||||
|
hostname: sw-main-1
|
||||||
|
hw-address: "a8:9c:6c:16:df:cc"
|
||||||
|
- ip-address: 10.89.213.5
|
||||||
|
hostname: sw-main-2
|
||||||
|
hw-address: "a8:9c:6c:16:e8:86"
|
||||||
|
- ip-address: 10.89.213.6
|
||||||
|
hostname: sw-shop-1
|
||||||
|
hw-address: "C0:4A:00:FB:DA:C5"
|
||||||
|
- ip-address: 10.89.213.7
|
||||||
|
hostname: sw-shop-2-peo
|
||||||
|
hw-address: "f4:e2:c6:bf:20:ee"
|
||||||
|
- ip-address: 10.89.213.8
|
||||||
|
hostname: sw-shop-3-peo
|
||||||
|
hw-address: "d8:b3:70:85:72:76"
|
||||||
|
- ip-address: 10.89.213.11
|
||||||
|
hostname: pve01
|
||||||
|
hw-address: "38:05:25:30:80:35"
|
||||||
|
- ip-address: 10.89.213.12
|
||||||
|
hostname: pve02
|
||||||
|
hw-address: "b8:85:84:b1:57:b6"
|
||||||
|
- ip-address: 10.89.213.13
|
||||||
|
hostname: pve03
|
||||||
|
hw-address: "98:fa:9b:a2:ed:e8"
|
||||||
|
- ip-address: 10.89.213.15
|
||||||
|
hostname: pbs
|
||||||
|
hw-address: "BC:24:11:D6:2C:81"
|
||||||
|
- ip-address: 10.89.213.21
|
||||||
|
hostname: unifi
|
||||||
|
hw-address: "BC:24:11:25:77:60"
|
||||||
|
- ip-address: 10.89.213.22
|
||||||
|
hostname: club-assistant
|
||||||
|
hw-address: "7a:55:61:c3:a2:89"
|
||||||
|
- ip-address: 10.89.213.23
|
||||||
|
hostname: automation
|
||||||
|
hw-address: "f2:20:75:5a:2f:8c"
|
||||||
|
- ip-address: 10.89.213.24
|
||||||
|
hostname: yate
|
||||||
|
hw-address: "bc:24:11:73:3e:f7"
|
||||||
|
- ip-address: 10.89.213.25
|
||||||
|
hostname: ptouch-print-server
|
||||||
|
hw-address: "bc:24:11:f2:cf:8f"
|
||||||
|
- ip-address: 10.89.213.26
|
||||||
|
hostname: mqtt
|
||||||
|
hw-address: "bc:24:11:48:85:73"
|
||||||
|
- ip-address: 10.89.213.27
|
||||||
|
hostname: factorio
|
||||||
|
hw-address: "bc:24:11:a3:43:7f"
|
||||||
|
- ip-address: 10.89.213.28
|
||||||
|
hostname: light
|
||||||
|
hw-address: "72:61:ea:e6:49:e3"
|
||||||
|
- ip-address: 10.89.213.29
|
||||||
|
hostname: homematic
|
||||||
|
hw-address: "fe:3a:42:77:3a:be"
|
||||||
|
- ip-address: 10.89.213.30
|
||||||
|
hostname: proxmox-backup-server
|
||||||
|
hw-address: "8a:48:dd:a3:22:40"
|
||||||
|
option-data:
|
||||||
|
- name: routers,
|
||||||
|
csv-format: true
|
||||||
|
data: 10.89.213.1
|
||||||
|
|
||||||
|
kea_dhcp__dhcp6:
|
||||||
|
enable: true
|
||||||
|
interfaces: [ "netlan.51", "netlan.52", "netlan.54" ]
|
||||||
|
control-sockets:
|
||||||
|
- socket-name: /var/run/kea-dhcp6-ctrl-agent.sock
|
||||||
|
socket-type: unix
|
||||||
|
lease-database:
|
||||||
|
type: memfile
|
||||||
|
persist: true
|
||||||
|
option-data:
|
||||||
|
- name: "dns-servers"
|
||||||
|
code: 23
|
||||||
|
csv-format: true
|
||||||
|
data: "{{ kea_dhcp__dns_servers.v6 | join(',') }}"
|
||||||
|
subnets:
|
||||||
|
- id: 1
|
||||||
|
subnet: "2a07:c481:1:33::/64"
|
||||||
|
pools:
|
||||||
|
- pool: "2a07:c481:1:33::1:1 - 2a07:c481:1:33::FFFF:FFFF"
|
||||||
|
- id: 2
|
||||||
|
subnet: "2a07:c481:1:34::/64"
|
||||||
|
pools:
|
||||||
|
- pool: "2a07:c481:1:34::1:1 - 2a07:c481:1:34::FFFF:FFFF"
|
||||||
|
- id: 3
|
||||||
|
subnet: "2a07:c481:1:36::/64"
|
||||||
|
pools:
|
||||||
|
- pool: "2a07:c481:1:36::1:1 - 2a07:c481:1:36::FFFF:FFFF"
|
||||||
|
reservations:
|
||||||
|
- ip-address: "2a07:c481:1:36::2"
|
||||||
|
hostname: sw-rack-1
|
||||||
|
hw-address: "F0:9F:C2:10:C3:AA"
|
||||||
|
- ip-address: "2a07:c481:1:36::3"
|
||||||
|
hostname: sw-rack-2-peo
|
||||||
|
hw-address: "44:d9:e7:06:69:5d"
|
||||||
|
- ip-address: "2a07:c481:1:36::4"
|
||||||
|
hostname: sw-main-1
|
||||||
|
hw-address: "a8:9c:6c:16:df:cc"
|
||||||
|
- ip-address: "2a07:c481:1:36::5"
|
||||||
|
hostname: sw-main-2
|
||||||
|
hw-address: "a8:9c:6c:16:e8:86"
|
||||||
|
- ip-address: "2a07:c481:1:36::6"
|
||||||
|
hostname: sw-shop-1
|
||||||
|
hw-address: "C0:4A:00:FB:DA:C5"
|
||||||
|
- ip-address: "2a07:c481:1:36::7"
|
||||||
|
hostname: sw-shop-2-peo
|
||||||
|
hw-address: "f4:e2:c6:bf:20:ee"
|
||||||
|
- ip-address: "2a07:c481:1:36::8"
|
||||||
|
hostname: sw-shop-3-peo
|
||||||
|
hw-address: "d8:b3:70:85:72:76"
|
||||||
|
- ip-address: "2a07:c481:1:36::b"
|
||||||
|
hostname: pve01
|
||||||
|
hw-address: "38:05:25:30:80:35"
|
||||||
|
- ip-address: "2a07:c481:1:36::c"
|
||||||
|
hostname: pve02
|
||||||
|
hw-address: "b8:85:84:b1:57:b6"
|
||||||
|
- ip-address: "2a07:c481:1:36::d"
|
||||||
|
hostname: pve03
|
||||||
|
hw-address: "98:fa:9b:a2:ed:e8"
|
||||||
|
- ip-address: "2a07:c481:1:36::f"
|
||||||
|
hostname: pbs
|
||||||
|
hw-address: "BC:24:11:D6:2C:81"
|
||||||
|
- ip-address: "2a07:c481:1:36::14"
|
||||||
|
hostname: unifi
|
||||||
|
hw-address: "BC:24:11:25:77:60"
|
||||||
114
resources/z9/rt1/nftables/nftables.conf
Normal file
114
resources/z9/rt1/nftables/nftables.conf
Normal file
|
|
@ -0,0 +1,114 @@
|
||||||
|
#!/usr/sbin/nft -f
|
||||||
|
|
||||||
|
## Variables
|
||||||
|
|
||||||
|
# Hosts
|
||||||
|
|
||||||
|
|
||||||
|
# Interfaces
|
||||||
|
define if_netwan = "netwan"
|
||||||
|
define if_netlan = "netlan"
|
||||||
|
define if_wg55_management = "wg55"
|
||||||
|
define if_netwan_400_fux_uplink = "netwan.400"
|
||||||
|
define if_netlan_51_clients = "netlan.51"
|
||||||
|
define if_netlan_52_iot = "netlan.52"
|
||||||
|
define if_netlan_53_public = "netlan.53"
|
||||||
|
define if_netlan_54_management = "netlan.54"
|
||||||
|
|
||||||
|
# Interface Groups
|
||||||
|
define wan_ifs = { $if_netwan_400_fux_uplink }
|
||||||
|
define lan_ifs = { $if_netlan_51_clients,
|
||||||
|
$if_netlan_52_iot,
|
||||||
|
$if_netlan_53_public,
|
||||||
|
$if_netlan_54_management }
|
||||||
|
define v4_exposed_ifs = { $if_netlan_53_public }
|
||||||
|
define v6_exposed_ifs = { $if_netlan_53_public }
|
||||||
|
define v4_nat_ifs = { $if_netlan_51_clients,
|
||||||
|
$if_netlan_52_iot,
|
||||||
|
$if_netlan_54_management }
|
||||||
|
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
|
||||||
|
table inet reverse-path-forwarding {
|
||||||
|
chain rpf-filter {
|
||||||
|
type filter hook prerouting priority mangle + 10; policy drop;
|
||||||
|
|
||||||
|
# Only allow packets if their source address is routed via their incoming interface.
|
||||||
|
# https://github.com/NixOS/nixpkgs/blob/d9d87c51960050e89c79e4025082ed965e770d68/nixos/modules/services/networking/firewall-nftables.nix#L100
|
||||||
|
fib saddr . mark . iif oif exists accept
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table inet host {
|
||||||
|
chain input {
|
||||||
|
type filter hook input priority filter; policy drop;
|
||||||
|
|
||||||
|
iifname "lo" accept comment "allow loopback"
|
||||||
|
|
||||||
|
ct state invalid drop
|
||||||
|
ct state established,related accept
|
||||||
|
|
||||||
|
ip protocol icmp accept
|
||||||
|
# ICMPv6
|
||||||
|
# https://datatracker.ietf.org/doc/html/rfc4890#autoid-24
|
||||||
|
# Allowlist consisting of: "Traffic That Must Not Be Dropped" and "Traffic That Normally Should Not Be Dropped"
|
||||||
|
# Error messages that are essential to the establishment and maintenance of communications:
|
||||||
|
icmpv6 type { destination-unreachable, packet-too-big } accept
|
||||||
|
icmpv6 type { time-exceeded } accept
|
||||||
|
icmpv6 type { parameter-problem } accept
|
||||||
|
# Connectivity checking messages:
|
||||||
|
icmpv6 type { echo-request, echo-reply } accept
|
||||||
|
# Address Configuration and Router Selection messages:
|
||||||
|
icmpv6 type { nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert } accept
|
||||||
|
# Link-Local Multicast Receiver Notification messages:
|
||||||
|
icmpv6 type { mld-listener-query, mld-listener-report, mld-listener-done, mld2-listener-report } accept
|
||||||
|
# SEND Certificate Path Notification messages:
|
||||||
|
icmpv6 type { 148, 149 } accept
|
||||||
|
# Multicast Router Discovery messages:
|
||||||
|
icmpv6 type { 151, 152, 153 } accept
|
||||||
|
|
||||||
|
# Allow SSH access.
|
||||||
|
tcp dport 22 accept comment "allow ssh access"
|
||||||
|
|
||||||
|
# Allow WireGuard access.
|
||||||
|
udp dport 51820 accept comment "allow WireGuard access"
|
||||||
|
|
||||||
|
# Allow DHCP server access.
|
||||||
|
iifname { $lan_ifs } udp dport 67 accept comment "allow dhcp server access"
|
||||||
|
|
||||||
|
# Allow DNS server access from lan_ifs
|
||||||
|
iifname { $lan_ifs, $if_wg55_management } udp dport 53 accept comment "allow dns server access from lan_ifs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table ip v4nat {
|
||||||
|
chain prerouting {
|
||||||
|
type nat hook prerouting priority dstnat; policy accept;
|
||||||
|
}
|
||||||
|
|
||||||
|
chain postrouting {
|
||||||
|
type nat hook postrouting priority srcnat; policy accept;
|
||||||
|
|
||||||
|
iifname { $v4_nat_ifs, $if_wg55_management } oifname $wan_ifs masquerade
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table inet forward {
|
||||||
|
chain forward {
|
||||||
|
type filter hook forward priority filter; policy drop;
|
||||||
|
|
||||||
|
ct state invalid drop
|
||||||
|
ct state established,related accept
|
||||||
|
|
||||||
|
# Allow internet access.
|
||||||
|
iifname { $lan_ifs, $if_wg55_management } oifname $wan_ifs accept comment "allow internet access"
|
||||||
|
|
||||||
|
# Allow access to exposed networks from internet.
|
||||||
|
meta nfproto ipv4 oifname $v4_exposed_ifs accept comment "allow v4 exposed network access"
|
||||||
|
meta nfproto ipv6 oifname $v6_exposed_ifs accept comment "allow v6 exposed network access"
|
||||||
|
|
||||||
|
# Allow clients and managment to most
|
||||||
|
iifname { $if_netlan_51_clients, $if_netlan_54_management, $if_wg55_management } oifname $lan_ifs accept comment "allow clients and managment to lan_ifs"
|
||||||
|
}
|
||||||
|
}
|
||||||
6
resources/z9/rt1/systemd_networkd/00-netlan.link
Normal file
6
resources/z9/rt1/systemd_networkd/00-netlan.link
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
[Match]
|
||||||
|
MACAddress=BC:24:11:72:A3:27
|
||||||
|
Type=ether
|
||||||
|
|
||||||
|
[Link]
|
||||||
|
Name=netlan
|
||||||
6
resources/z9/rt1/systemd_networkd/00-netwan.link
Normal file
6
resources/z9/rt1/systemd_networkd/00-netwan.link
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
[Match]
|
||||||
|
MACAddress=BC:24:11:CF:65:57
|
||||||
|
Type=ether
|
||||||
|
|
||||||
|
[Link]
|
||||||
|
Name=netwan
|
||||||
7
resources/z9/rt1/systemd_networkd/10-netlan.51.netdev
Normal file
7
resources/z9/rt1/systemd_networkd/10-netlan.51.netdev
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[NetDev]
|
||||||
|
Name=netlan.51
|
||||||
|
Kind=vlan
|
||||||
|
|
||||||
|
[VLAN]
|
||||||
|
Id=51
|
||||||
|
|
||||||
7
resources/z9/rt1/systemd_networkd/10-netlan.52.netdev
Normal file
7
resources/z9/rt1/systemd_networkd/10-netlan.52.netdev
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[NetDev]
|
||||||
|
Name=netlan.52
|
||||||
|
Kind=vlan
|
||||||
|
|
||||||
|
[VLAN]
|
||||||
|
Id=52
|
||||||
|
|
||||||
7
resources/z9/rt1/systemd_networkd/10-netlan.53.netdev
Normal file
7
resources/z9/rt1/systemd_networkd/10-netlan.53.netdev
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[NetDev]
|
||||||
|
Name=netlan.53
|
||||||
|
Kind=vlan
|
||||||
|
|
||||||
|
[VLAN]
|
||||||
|
Id=53
|
||||||
|
|
||||||
7
resources/z9/rt1/systemd_networkd/10-netlan.54.netdev
Normal file
7
resources/z9/rt1/systemd_networkd/10-netlan.54.netdev
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[NetDev]
|
||||||
|
Name=netlan.54
|
||||||
|
Kind=vlan
|
||||||
|
|
||||||
|
[VLAN]
|
||||||
|
Id=54
|
||||||
|
|
||||||
7
resources/z9/rt1/systemd_networkd/10-netwan.400.netdev
Normal file
7
resources/z9/rt1/systemd_networkd/10-netwan.400.netdev
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[NetDev]
|
||||||
|
Name=netwan.400
|
||||||
|
Kind=vlan
|
||||||
|
|
||||||
|
[VLAN]
|
||||||
|
Id=400
|
||||||
|
|
||||||
90
resources/z9/rt1/systemd_networkd/10-wg55.netdev
Normal file
90
resources/z9/rt1/systemd_networkd/10-wg55.netdev
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
[NetDev]
|
||||||
|
Description=Admin-Wireguard
|
||||||
|
Kind=wireguard
|
||||||
|
Name=wg55
|
||||||
|
|
||||||
|
[WireGuard]
|
||||||
|
ListenPort=51820
|
||||||
|
PrivateKeyFile=/etc/ansible_secrets/wireguard_wg55_privat_key
|
||||||
|
|
||||||
|
# WireGuard Peers
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = stb
|
||||||
|
AllowedIPs = 10.89.214.2/32,2a07:c481:1:37::2/128
|
||||||
|
PublicKey = vILSL4dbaC5IaTsRhJviamV18ssxWSj+qLVyowLQ214=
|
||||||
|
PersistentKeepalive = 30
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = fi
|
||||||
|
AllowedIPs = 10.89.214.3/32,2a07:c481:1:37::3/128
|
||||||
|
PublicKey = UHi/if5uW2V3+8Q3R+uk6/XpRi4fPXbw7chsKI4xlkI=
|
||||||
|
PresharedKeyFile = /etc/ansible_secrets/wireguard_wg55_peer_fi_psk
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = jtbx
|
||||||
|
AllowedIPs = 10.89.214.4/32,2a07:c481:1:37::4/128
|
||||||
|
PublicKey = NyyEqdWgScgsnTF8Zz/Om4Lc84fdFMwVtvaCmLEkUlQ=
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = June
|
||||||
|
AllowedIPs = 10.89.214.6/32,2a07:c481:1:37::6/128
|
||||||
|
PublicKey = 6jAEB+f9przBGxPhuvv9U9gvZDEBQNqpQSD0BoGqXQQ=
|
||||||
|
PresharedKeyFile = /etc/ansible_secrets/wireguard_wg55_peer_June_psk
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = Max
|
||||||
|
AllowedIPs = 10.89.214.7/32,2a07:c481:1:37::7/128
|
||||||
|
PublicKey = oC1hJjtlAgLX/CmbwTC+LPmd1uwluQTwsN8RaMNmHn0=
|
||||||
|
PresharedKeyFile = /etc/ansible_secrets/wireguard_wg55_peer_Max_psk
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = dario
|
||||||
|
AllowedIPs = 10.89.214.9/32,2a07:c481:1:37::9/128
|
||||||
|
PublicKey = bYF2EGRGpEGjiKcasi/oaWoWeLsgqsF6FGaq3Z4ERww=
|
||||||
|
PresharedKeyFile = /etc/ansible_secrets/wireguard_wg55_peer_dario_psk
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = June-mobile
|
||||||
|
AllowedIPs = 10.89.214.11/32,2a07:c481:1:37::11/128
|
||||||
|
PublicKey = 6edjXykegUgGjbkIG1aJyBlX1SgTKcqXXaSBVPHdKDc=
|
||||||
|
PresharedKeyFile = /etc/ansible_secrets/wireguard_wg55_peer_June-mobile_psk
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = djerun_at_ferrum.local
|
||||||
|
AllowedIPs = 10.89.214.12/32,2a07:c481:1:37::12/128
|
||||||
|
PublicKey = aHbdkTHhPkd+o7wWfTua9nd72aF4OVp66zGtpaoD8Fg=
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = c6ristian
|
||||||
|
AllowedIPs = 10.89.214.13/32,2a07:c481:1:37::13/128
|
||||||
|
PublicKey = 6ndwj3Ur6AqfUPWuyPYXIaGZs2ujJKawSQ9LEvlYzEc=
|
||||||
|
PresharedKeyFile = /etc/ansible_secrets/wireguard_wg55_peer_c6ristian_psk
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = langoor
|
||||||
|
AllowedIPs = 10.89.214.14/32,2a07:c481:1:37::14/128
|
||||||
|
PublicKey = qTnVQlQa1m4SucFFNli/xM6QWfsdWx2baRAit7Cg8RM=
|
||||||
|
PresharedKeyFile = /etc/ansible_secrets/wireguard_wg55_peer_langoor_psk
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = langoor_home
|
||||||
|
AllowedIPs = 10.89.214.15/32,2a07:c481:1:37::15/128
|
||||||
|
PublicKey = NeMDs2+5rHuKO5ZYXVUR76GorgdesFUnDOFECQ3RzG4=
|
||||||
|
PresharedKeyFile = /etc/ansible_secrets/wireguard_wg55_peer_langoor_home_psk
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = lilly-lillysLaptop
|
||||||
|
AllowedIPs = 10.89.214.16/32 #,2a07:c481:1:37::/128
|
||||||
|
PublicKey = IBsI+N8qUNpQnDc5HnqQ2Zo/1graFM0RMIecHmAF+Vk=
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = bitwhisker
|
||||||
|
AllowedIPs = 10.89.214.17/32,2a07:c481:1:37::a/128
|
||||||
|
PublicKey = DvEGvQPGi+IxeRTIA72Gx3WNINcrV9HRNB1v7mHnhjA=
|
||||||
|
|
||||||
|
[WireGuardPeer]
|
||||||
|
# friendly_name = forestcat
|
||||||
|
AllowedIPs = 10.89.214.18/32,2a07:c481:1:37::b/128
|
||||||
|
PublicKey = PdJ7KlIeASizj0WTY87d7oSi14/MebrhRa+L8YiPoQE=
|
||||||
|
|
||||||
12
resources/z9/rt1/systemd_networkd/20-netlan.network
Normal file
12
resources/z9/rt1/systemd_networkd/20-netlan.network
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
[Match]
|
||||||
|
Name=netlan
|
||||||
|
|
||||||
|
[Link]
|
||||||
|
RequiredForOnline=no
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
VLAN=netwan.51
|
||||||
|
VLAN=netwan.52
|
||||||
|
VLAN=netwan.53
|
||||||
|
VLAN=netwan.54
|
||||||
|
|
||||||
9
resources/z9/rt1/systemd_networkd/20-netwan.network
Normal file
9
resources/z9/rt1/systemd_networkd/20-netwan.network
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
[Match]
|
||||||
|
Name=netwan
|
||||||
|
|
||||||
|
[Link]
|
||||||
|
RequiredForOnline=no
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
VLAN=netwan.400
|
||||||
|
|
||||||
6
resources/z9/rt1/systemd_networkd/20-wg55.network
Normal file
6
resources/z9/rt1/systemd_networkd/20-wg55.network
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
[Match]
|
||||||
|
Name=wg55
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
Address=10.89.214.1/24
|
||||||
|
Address=2a07:c481:1:37::1/64
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
[Match]
|
||||||
|
Name=netlan.51
|
||||||
|
Type=vlan
|
||||||
|
|
||||||
|
[Link]
|
||||||
|
RequiredForOnline=no
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
Description=clients
|
||||||
|
|
||||||
|
# Masquerading done in nftables (nftables.conf).
|
||||||
|
IPv6SendRA=yes
|
||||||
|
|
||||||
|
[Address]
|
||||||
|
Address=10.89.208.1/22
|
||||||
|
|
||||||
|
[IPv6SendRA]
|
||||||
|
UplinkInterface=netwan.400
|
||||||
|
EmitDomains=true
|
||||||
|
Domains=ccchh.net
|
||||||
|
Managed=true
|
||||||
|
|
||||||
|
[IPv6Prefix]
|
||||||
|
Prefix=2a07:c481:1:33::/64
|
||||||
|
Assign=true
|
||||||
|
Token=static:::1
|
||||||
|
|
||||||
27
resources/z9/rt1/systemd_networkd/21-netlan.52-iot.network
Normal file
27
resources/z9/rt1/systemd_networkd/21-netlan.52-iot.network
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
[Match]
|
||||||
|
Name=netlan.52
|
||||||
|
Type=vlan
|
||||||
|
|
||||||
|
[Link]
|
||||||
|
RequiredForOnline=no
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
Description=IoT
|
||||||
|
|
||||||
|
# Masquerading done in nftables (nftables.conf).
|
||||||
|
IPv6SendRA=yes
|
||||||
|
|
||||||
|
[Address]
|
||||||
|
Address=10.89.212.1/24
|
||||||
|
|
||||||
|
[IPv6SendRA]
|
||||||
|
UplinkInterface=netwan.400
|
||||||
|
EmitDomains=true
|
||||||
|
Domains=ccchh.net
|
||||||
|
Managed=true
|
||||||
|
|
||||||
|
[IPv6Prefix]
|
||||||
|
Prefix=2a07:c481:1:34::/64
|
||||||
|
Assign=true
|
||||||
|
Token=static:::1
|
||||||
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
[Match]
|
||||||
|
Name=netlan.53
|
||||||
|
Type=vlan
|
||||||
|
|
||||||
|
[Link]
|
||||||
|
RequiredForOnline=no
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
Description=public
|
||||||
|
|
||||||
|
# Masquerading done in nftables (nftables.conf).
|
||||||
|
IPv6SendRA=yes
|
||||||
|
|
||||||
|
[Address]
|
||||||
|
Address=185.161.130.65/28
|
||||||
|
|
||||||
|
[IPv6SendRA]
|
||||||
|
UplinkInterface=netwan.400
|
||||||
|
EmitDomains=true
|
||||||
|
Domains=ccchh.net
|
||||||
|
Managed=true
|
||||||
|
|
||||||
|
[IPv6Prefix]
|
||||||
|
Prefix=2a07:c481:1:35::/64
|
||||||
|
Assign=true
|
||||||
|
Token=static:::1
|
||||||
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
[Match]
|
||||||
|
Name=netlan.54
|
||||||
|
Type=vlan
|
||||||
|
|
||||||
|
[Link]
|
||||||
|
RequiredForOnline=no
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
Description=Management
|
||||||
|
|
||||||
|
# Masquerading done in nftables (nftables.conf).
|
||||||
|
IPv6SendRA=yes
|
||||||
|
|
||||||
|
[Address]
|
||||||
|
Address=10.89.213.0/24
|
||||||
|
|
||||||
|
[IPv6SendRA]
|
||||||
|
UplinkInterface=netwan.400
|
||||||
|
EmitDomains=true
|
||||||
|
Domains=ccchh.net
|
||||||
|
Managed=true
|
||||||
|
|
||||||
|
[IPv6Prefix]
|
||||||
|
Prefix=2a07:c481:1:36::/64
|
||||||
|
Assign=true
|
||||||
|
Token=static:::1
|
||||||
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
[Match]
|
||||||
|
Name=netwan.400
|
||||||
|
Type=vlan
|
||||||
|
|
||||||
|
[Link]
|
||||||
|
RequiredForOnline=no
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
Description=fux-uplink
|
||||||
|
|
||||||
|
DNS=185.161.128.66
|
||||||
|
DNS=2a07:c481:0:4::2
|
||||||
|
DNS=185.161.128.67
|
||||||
|
DNS=2a07:c481:0:4::3
|
||||||
|
|
||||||
|
IPv6AcceptRA=no
|
||||||
|
# Masquerading done in nftables (nftables.conf).
|
||||||
|
IPv6SendRA=no
|
||||||
|
|
||||||
|
[Address]
|
||||||
|
Address=185.161.129.134/25
|
||||||
|
Address=2a07:c481::1:2/64
|
||||||
|
|
||||||
|
[Route]
|
||||||
|
Gateway=185.161.129.129
|
||||||
|
Gateway=2a07:c481::1
|
||||||
3
resources/z9/rt1/systemd_networkd_global_config.conf
Normal file
3
resources/z9/rt1/systemd_networkd_global_config.conf
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
[Network]
|
||||||
|
IPv4Forwarding=true
|
||||||
|
IPv6Forwarding=true
|
||||||
69
roles/kea_dhcp/defaults/main.yaml
Normal file
69
roles/kea_dhcp/defaults/main.yaml
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
kea_dhcp__stork_agent:
|
||||||
|
enable: false
|
||||||
|
prometheus_only: true
|
||||||
|
kea_dhcp__version_repo: "kea-3-0"
|
||||||
|
kea_dhcp__dns_servers:
|
||||||
|
v6:
|
||||||
|
- "2a07:c481:0:4::2"
|
||||||
|
- "2a07:c481:0:4::3"
|
||||||
|
v4:
|
||||||
|
- "185.161.128.66"
|
||||||
|
- "185.161.128.67"
|
||||||
|
kea_dhcp__include_vars:
|
||||||
|
|
||||||
|
kea_dhcp__dhcp4:
|
||||||
|
enable: false
|
||||||
|
interfaces: [ ]
|
||||||
|
control-sockets:
|
||||||
|
- socket-name: /var/run/kea-dhcp4-ctrl-agent.sock
|
||||||
|
socket-type: unix
|
||||||
|
lease-database:
|
||||||
|
type: memfile
|
||||||
|
persist: true
|
||||||
|
option-data:
|
||||||
|
- name: "domain-name-servers"
|
||||||
|
code: 6
|
||||||
|
csv-format: true
|
||||||
|
data: "{{ kea_dhcp__dns_servers.v4 | join(',') }}"
|
||||||
|
subnets:
|
||||||
|
- id: 0
|
||||||
|
subnet: nil
|
||||||
|
pools:
|
||||||
|
- pool: nil
|
||||||
|
reservations:
|
||||||
|
- ip-address: nil
|
||||||
|
hostname: beispiel.test
|
||||||
|
hw-address: "00:11:22:33:44:55"
|
||||||
|
option-data:
|
||||||
|
- name: nil,
|
||||||
|
code: nil,
|
||||||
|
csv-format: true
|
||||||
|
data: nil
|
||||||
|
kea_dhcp__dhcp6:
|
||||||
|
enable: false
|
||||||
|
interfaces: [ ]
|
||||||
|
lease-database:
|
||||||
|
type: memfile
|
||||||
|
persist: true
|
||||||
|
control-sockets:
|
||||||
|
- socket-name: /var/run/kea-dhcp6-ctrl-agent.sock
|
||||||
|
socket-type: unix
|
||||||
|
option-data:
|
||||||
|
- name: "dns-servers"
|
||||||
|
code: 23
|
||||||
|
csv-format: true
|
||||||
|
data: "{{ kea_dhcp__dns_servers.v6 | join(',') }}"
|
||||||
|
subnets:
|
||||||
|
- id: 0
|
||||||
|
subnet: nil
|
||||||
|
pools:
|
||||||
|
- pool: nil
|
||||||
|
reservations:
|
||||||
|
- ip-address: nil
|
||||||
|
hostname: beispiel.test
|
||||||
|
hw-address: "00:11:22:33:44:55"
|
||||||
|
option-data:
|
||||||
|
- name: nil,
|
||||||
|
code: nil,
|
||||||
|
csv-format: true
|
||||||
|
data: nil
|
||||||
30
roles/kea_dhcp/handlers/main.yml
Normal file
30
roles/kea_dhcp/handlers/main.yml
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
---
|
||||||
|
- name: Systemd.daemon_reload
|
||||||
|
become: true
|
||||||
|
ansible.builtin.systemd_service:
|
||||||
|
daemon_reload: true
|
||||||
|
|
||||||
|
- name: Kea_dhcp4.reloaded
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: kea-dhcp4
|
||||||
|
state: restarted
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
- name: Kea_dhcp6.reloaded
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: kea-dhcp6
|
||||||
|
state: restarted
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
- name: Kea_ctrl.reloaded
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: kea-ctrl-agent
|
||||||
|
state: restarted
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
- name: Stork_agent.restarted
|
||||||
|
become: true
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: isc-stork-agent
|
||||||
|
state: restarted
|
||||||
|
enabled: true
|
||||||
125
roles/kea_dhcp/meta/argument_specs.yaml
Normal file
125
roles/kea_dhcp/meta/argument_specs.yaml
Normal file
|
|
@ -0,0 +1,125 @@
|
||||||
|
---
|
||||||
|
argument_specs:
|
||||||
|
main:
|
||||||
|
short_description: "Role for managing Kea DHCP server"
|
||||||
|
options:
|
||||||
|
kea_dhcp__stork_agent:
|
||||||
|
type: "dict"
|
||||||
|
description: "Configuration for Stork Agent"
|
||||||
|
options:
|
||||||
|
enable:
|
||||||
|
type: "bool"
|
||||||
|
default: false
|
||||||
|
prometheus_only:
|
||||||
|
type: "bool"
|
||||||
|
default: true
|
||||||
|
kea_dhcp__version_repo:
|
||||||
|
type: "str"
|
||||||
|
description: "Version of Kea DHCP repository to use"
|
||||||
|
default: "kea-3-0"
|
||||||
|
kea_dhcp__dns_servers:
|
||||||
|
type: "dict"
|
||||||
|
description: "Default DNS servers for DHCP clients"
|
||||||
|
options:
|
||||||
|
v6:
|
||||||
|
type: "list"
|
||||||
|
elements: "str"
|
||||||
|
v4:
|
||||||
|
type: "list"
|
||||||
|
elements: "str"
|
||||||
|
kea_dhcp__dhcp4:
|
||||||
|
type: "dict"
|
||||||
|
description: "Configuration for DHCPv4 service"
|
||||||
|
options:
|
||||||
|
enable:
|
||||||
|
type: "bool"
|
||||||
|
default: false
|
||||||
|
interfaces:
|
||||||
|
type: "list"
|
||||||
|
elements: "str"
|
||||||
|
default: []
|
||||||
|
control-sockets:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
|
lease-database:
|
||||||
|
type: "dict"
|
||||||
|
option-data:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
|
subnets:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
|
options:
|
||||||
|
id:
|
||||||
|
type: "int"
|
||||||
|
subnet:
|
||||||
|
type: "str"
|
||||||
|
pools:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
|
options:
|
||||||
|
pool:
|
||||||
|
type: "str"
|
||||||
|
reservations:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
|
options:
|
||||||
|
ip-address:
|
||||||
|
type: "str"
|
||||||
|
hostname:
|
||||||
|
type: "str"
|
||||||
|
hw-address:
|
||||||
|
type: "str"
|
||||||
|
duid:
|
||||||
|
type: "str"
|
||||||
|
option-data:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
|
kea_dhcp__dhcp6:
|
||||||
|
type: "dict"
|
||||||
|
description: "Configuration for DHCPv6 service"
|
||||||
|
options:
|
||||||
|
enable:
|
||||||
|
type: "bool"
|
||||||
|
default: false
|
||||||
|
interfaces:
|
||||||
|
type: "list"
|
||||||
|
elements: "str"
|
||||||
|
default: []
|
||||||
|
control-sockets:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
|
lease-database:
|
||||||
|
type: "dict"
|
||||||
|
option-data:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
|
subnets:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
|
options:
|
||||||
|
id:
|
||||||
|
type: "int"
|
||||||
|
subnet:
|
||||||
|
type: "str"
|
||||||
|
pools:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
|
options:
|
||||||
|
pool:
|
||||||
|
type: "str"
|
||||||
|
reservations:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
|
options:
|
||||||
|
ip-address:
|
||||||
|
type: "str"
|
||||||
|
hostname:
|
||||||
|
type: "str"
|
||||||
|
hw-address:
|
||||||
|
type: "str"
|
||||||
|
duid:
|
||||||
|
type: "str"
|
||||||
|
option-data:
|
||||||
|
type: "list"
|
||||||
|
elements: "dict"
|
||||||
8
roles/kea_dhcp/tasks/install_archlinux.yml
Normal file
8
roles/kea_dhcp/tasks/install_archlinux.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
- name: Install Kea on Archlinux
|
||||||
|
when: ansible_facts['distribution'] == "Archlinux"
|
||||||
|
become: true
|
||||||
|
community.general.pacman:
|
||||||
|
name: kea
|
||||||
|
state: present
|
||||||
|
update_cache: false
|
||||||
22
roles/kea_dhcp/tasks/install_debian.yml
Normal file
22
roles/kea_dhcp/tasks/install_debian.yml
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
---
|
||||||
|
- name: Register isc-kea apt repository
|
||||||
|
become: true
|
||||||
|
register: kea_dhcp_repo
|
||||||
|
when: ansible_facts['distribution'] == "Debian"
|
||||||
|
ansible.builtin.deb822_repository:
|
||||||
|
name: "isc-{{ kea_dhcp__version_repo }}"
|
||||||
|
uris: "https://dl.cloudsmith.io/public/isc/{{ kea_dhcp__version_repo }}/deb/debian"
|
||||||
|
suites: any-version
|
||||||
|
components: main
|
||||||
|
signed_by: "https://dl.cloudsmith.io/public/isc/{{ kea_dhcp__version_repo }}/gpg.key"
|
||||||
|
|
||||||
|
- name: Install Kea packages
|
||||||
|
become: true
|
||||||
|
when: ansible_facts['distribution'] == "Debian"
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name:
|
||||||
|
- isc-kea-dhcp4
|
||||||
|
- isc-kea-dhcp6
|
||||||
|
- isc-kea-ctrl-agent
|
||||||
|
- isc-kea-admin
|
||||||
|
update_cache: "{{ kea_dhcp_install_repo.changed }}"
|
||||||
51
roles/kea_dhcp/tasks/kea.yaml
Normal file
51
roles/kea_dhcp/tasks/kea.yaml
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
---
|
||||||
|
- name: Include config vars
|
||||||
|
tags: [ kea, include_vars ]
|
||||||
|
when: kea_dhcp__include_vars is not None
|
||||||
|
ansible.builtin.include_vars:
|
||||||
|
file: "{{ kea_dhcp__include_vars }}"
|
||||||
|
|
||||||
|
- name: Deploy kea-dhcp4 configuration file
|
||||||
|
tags: [ kea, dhcp4 ]
|
||||||
|
become: true
|
||||||
|
when: kea_dhcp__dhcp4.enable
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: kea-dhcp4.conf.jinja
|
||||||
|
dest: /etc/kea/kea-dhcp4.conf
|
||||||
|
backup: true
|
||||||
|
owner: root
|
||||||
|
group: kea
|
||||||
|
mode: "u=rw,g=r,o="
|
||||||
|
validate: kea-dhcp4 -T %s
|
||||||
|
notify:
|
||||||
|
- Kea_dhcp4.reloaded
|
||||||
|
|
||||||
|
- name: Deploy kea-dhcp6 configuration file
|
||||||
|
tags: [ kea, dhcp6 ]
|
||||||
|
become: true
|
||||||
|
when: kea_dhcp__dhcp6.enable
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: kea-dhcp6.conf.jinja
|
||||||
|
dest: /etc/kea/kea-dhcp6.conf
|
||||||
|
backup: true
|
||||||
|
owner: root
|
||||||
|
group: kea
|
||||||
|
mode: "u=rw,g=r,o="
|
||||||
|
validate: kea-dhcp6 -T %s
|
||||||
|
notify:
|
||||||
|
- Kea_dhcp6.reloaded
|
||||||
|
|
||||||
|
- name: Copy kea-ctrl-agent configuration file
|
||||||
|
tags: [ kea, ctrl-agent ]
|
||||||
|
become: true
|
||||||
|
when: kea_dhcp__stork_agent.enable
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: kea-ctrl-agent.conf.j2
|
||||||
|
dest: /etc/kea/kea-ctrl-agent.conf
|
||||||
|
owner: root
|
||||||
|
group: kea
|
||||||
|
mode: "u=rw,g=r,o="
|
||||||
|
validate: kea-ctrl-agent -t %s
|
||||||
|
notify:
|
||||||
|
- Kea_ctrl.reloaded
|
||||||
|
- Stork_agent.restarted
|
||||||
19
roles/kea_dhcp/tasks/main.yml
Normal file
19
roles/kea_dhcp/tasks/main.yml
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
---
|
||||||
|
- name: Setup Kea DHCP
|
||||||
|
tags: [kea, dhcp]
|
||||||
|
block:
|
||||||
|
- name: Install Kea on Archlinux
|
||||||
|
when: ansible_facts['distribution'] == "Archlinux"
|
||||||
|
ansible.builtin.import_tasks: install_archlinux.yml
|
||||||
|
|
||||||
|
- name: Install Kea on Debian
|
||||||
|
when: ansible_facts['distribution'] == "Debian"
|
||||||
|
ansible.builtin.import_tasks: install_debian.yml
|
||||||
|
|
||||||
|
- name: Configure Kea
|
||||||
|
ansible.builtin.include_tasks: kea.yaml
|
||||||
|
|
||||||
|
- name: Run stork-agent tasks
|
||||||
|
tags: [stork-agent, monitoring]
|
||||||
|
when: kea_dhcp__stork_agent.enable
|
||||||
|
ansible.builtin.include_tasks: stork-agent.yaml
|
||||||
76
roles/kea_dhcp/tasks/stork-agent.yaml
Normal file
76
roles/kea_dhcp/tasks/stork-agent.yaml
Normal file
|
|
@ -0,0 +1,76 @@
|
||||||
|
---
|
||||||
|
- name: Install stork-agent
|
||||||
|
tags: [stork-agent]
|
||||||
|
block:
|
||||||
|
- name: Install stork-agent on Archlinux
|
||||||
|
when: ansible_facts['distribution'] == "Archlinux"
|
||||||
|
tags: [stork-agent, archlinux]
|
||||||
|
block:
|
||||||
|
- name: Create stork-agent user
|
||||||
|
ansible.builtin.user:
|
||||||
|
name: stork-agent
|
||||||
|
create_home: false
|
||||||
|
home: "/var/lib/stork-agent"
|
||||||
|
shell: "/usr/bin/nologin"
|
||||||
|
system: true
|
||||||
|
groups: ["kea"]
|
||||||
|
append: true
|
||||||
|
|
||||||
|
- name: Install stork-agent with aur_pkg_install
|
||||||
|
ansible.builtin.include_role:
|
||||||
|
name: aur_pkg_install
|
||||||
|
vars:
|
||||||
|
aur_pkg_install__pkg_name: "stork-agent"
|
||||||
|
aur_pkg_install__git_clone_url: "https://ansible:{{ secret__ansible_git_token }}@git.fux-eg.net/aur-mirror/stork-agent.git"
|
||||||
|
aur_pkg_install__git_ref: "bf96e34"
|
||||||
|
|
||||||
|
- name: Install stork-agent on Debian
|
||||||
|
when: ansible_facts['distribution'] == "Debian"
|
||||||
|
tags: [stork-agent, debian]
|
||||||
|
block:
|
||||||
|
- name: Register isc-stork apt repository
|
||||||
|
become: true
|
||||||
|
register: "kea_dhcp_install_repo"
|
||||||
|
ansible.builtin.deb822_repository:
|
||||||
|
name: isc-stork
|
||||||
|
uris: https://dl.cloudsmith.io/public/isc/stork/deb/debian
|
||||||
|
suites: any-version
|
||||||
|
components: main
|
||||||
|
signed_by: https://dl.cloudsmith.io/public/isc/stork/gpg.key
|
||||||
|
|
||||||
|
- name: Install isc-stork-agent
|
||||||
|
become: true
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name: isc-stork-agent
|
||||||
|
update_cache: "{{ kea_dhcp_install_repo.changed }}"
|
||||||
|
|
||||||
|
- name: Add stork-agent user to _kea group on Debian
|
||||||
|
when: ansible_facts['distribution'] == "Debian"
|
||||||
|
become: true
|
||||||
|
ansible.builtin.user:
|
||||||
|
name: stork-agent
|
||||||
|
groups: ["_kea"]
|
||||||
|
append: true
|
||||||
|
|
||||||
|
- name: Config for stork-agent
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: stork-agent.env.jinja
|
||||||
|
dest: /etc/stork/agent.env
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0660"
|
||||||
|
notify:
|
||||||
|
- Systemd_daemon_reload
|
||||||
|
- Stork_agent.restarted
|
||||||
|
|
||||||
|
- name: Flush handlers
|
||||||
|
ansible.builtin.meta: flush_handlers
|
||||||
|
|
||||||
|
- name: Ensure that stork kea exporter is working
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "http://localhost:9547/metrics"
|
||||||
|
method: GET
|
||||||
|
register: kea_dhcp_stork_status_code
|
||||||
|
retries: 6
|
||||||
|
delay: 5
|
||||||
|
until: kea_dhcp_stork_status_code.status == 200
|
||||||
20
roles/kea_dhcp/templates/kea-ctrl-agent.conf.j2
Normal file
20
roles/kea_dhcp/templates/kea-ctrl-agent.conf.j2
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"Control-agent": {
|
||||||
|
"http-host": "127.0.0.1",
|
||||||
|
"http-port": 8000,
|
||||||
|
"control-sockets": {
|
||||||
|
{% if kea_dhcp__dhcp4.enable | default(false) %}
|
||||||
|
"dhcp4": {
|
||||||
|
"socket-type": "{{ kea_dhcp__dhcp4['control-sockets'][0]['socket-type'] }}",
|
||||||
|
"socket-name": "{{ kea_dhcp__dhcp4['control-sockets'][0]['socket-name'] }}"
|
||||||
|
}{% if kea_dhcp__dhcp6.enable %},{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if kea_dhcp__dhcp6.enable | default(false) %}
|
||||||
|
"dhcp6": {
|
||||||
|
"socket-type": "{{ kea_dhcp__dhcp6['control-sockets'][0]['socket-type'] }}",
|
||||||
|
"socket-name": "{{ kea_dhcp__dhcp6['control-sockets'][0]['socket-name'] }}"
|
||||||
|
},
|
||||||
|
{% endif %}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
27
roles/kea_dhcp/templates/kea-dhcp4.conf.jinja
Normal file
27
roles/kea_dhcp/templates/kea-dhcp4.conf.jinja
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"Dhcp4": {
|
||||||
|
"interfaces-config": {
|
||||||
|
"interfaces": {{ kea_dhcp__dhcp4.interfaces | to_nice_json }}
|
||||||
|
},
|
||||||
|
"control-sockets": {{ kea_dhcp__dhcp4['control-sockets'] | to_nice_json }},
|
||||||
|
"lease-database": {{ kea_dhcp__dhcp4['lease-database'] | to_nice_json }},
|
||||||
|
{% if kea_dhcp__dhcp4['option-data'] is defined and kea_dhcp__dhcp4['option-data'] %}
|
||||||
|
"option-data": {{ kea_dhcp__dhcp4['option-data'] | to_nice_json }},
|
||||||
|
{% endif %}
|
||||||
|
"subnet4": [
|
||||||
|
{% for subnet in kea_dhcp__dhcp4.subnets %}
|
||||||
|
{
|
||||||
|
"id": {{ subnet.id }},
|
||||||
|
"subnet": "{{ subnet.subnet }}",
|
||||||
|
"pools": {{ subnet.pools | to_nice_json }},
|
||||||
|
{% if subnet.reservations is defined and subnet.reservations %}
|
||||||
|
"reservations": {{ subnet.reservations | to_nice_json }},
|
||||||
|
{% endif %}
|
||||||
|
{% if subnet['option-data'] is defined and subnet['option-data'] %}
|
||||||
|
"option-data": {{ subnet['option-data'] | to_nice_json }}
|
||||||
|
{% endif %}
|
||||||
|
}{% if not loop.last %},{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
27
roles/kea_dhcp/templates/kea-dhcp6.conf.jinja
Normal file
27
roles/kea_dhcp/templates/kea-dhcp6.conf.jinja
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"Dhcp6": {
|
||||||
|
"interfaces-config": {
|
||||||
|
"interfaces": {{ kea_dhcp__dhcp6.interfaces | to_nice_json }}
|
||||||
|
},
|
||||||
|
"control-sockets": {{ kea_dhcp__dhcp6['control-sockets'] | to_nice_json }},
|
||||||
|
"lease-database": {{ kea_dhcp__dhcp6['lease-database'] | to_nice_json }},
|
||||||
|
{% if kea_dhcp__dhcp6['option-data'] is defined and kea_dhcp__dhcp6['option-data'] %}
|
||||||
|
"option-data": {{ kea_dhcp__dhcp6['option-data'] | to_nice_json }},
|
||||||
|
{% endif %}
|
||||||
|
"subnet6": [
|
||||||
|
{% for subnet in kea_dhcp__dhcp6.subnets %}
|
||||||
|
{
|
||||||
|
"id": {{ subnet.id }},
|
||||||
|
"subnet": "{{ subnet.subnet }}",
|
||||||
|
"pools": {{ subnet.pools | to_nice_json }},
|
||||||
|
{% if subnet.reservations is defined and subnet.reservations %}
|
||||||
|
"reservations": {{ subnet.reservations | to_nice_json }},
|
||||||
|
{% endif %}
|
||||||
|
{% if subnet['option-data'] is defined and subnet['option-data'] %}
|
||||||
|
"option-data": {{ subnet['option-data'] | to_nice_json }}
|
||||||
|
{% endif %}
|
||||||
|
}{% if not loop.last %},{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
44
roles/kea_dhcp/templates/stork-agent.env.jinja
Normal file
44
roles/kea_dhcp/templates/stork-agent.env.jinja
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
### the IP or hostname to listen on for incoming Stork server connections
|
||||||
|
# STORK_AGENT_HOST=
|
||||||
|
|
||||||
|
### the TCP port to listen on for incoming Stork server connections
|
||||||
|
# STORK_AGENT_PORT=8081
|
||||||
|
|
||||||
|
### listen for commands from the Stork server only, but not for Prometheus requests
|
||||||
|
# STORK_AGENT_LISTEN_STORK_ONLY=true
|
||||||
|
|
||||||
|
{% if kea_dhcp__stork_agent.prometheus_only %}
|
||||||
|
### listen for Prometheus requests only, but not for commands from the Stork server
|
||||||
|
STORK_AGENT_LISTEN_PROMETHEUS_ONLY=true
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
### settings for exporting stats to Prometheus
|
||||||
|
### the IP or hostname on which the agent exports Kea statistics to Prometheus
|
||||||
|
# STORK_AGENT_PROMETHEUS_KEA_EXPORTER_ADDRESS=
|
||||||
|
### the port on which the agent exports Kea statistics to Prometheus
|
||||||
|
# STORK_AGENT_PROMETHEUS_KEA_EXPORTER_PORT=
|
||||||
|
## enable or disable collecting per-subnet stats from Kea
|
||||||
|
# STORK_AGENT_PROMETHEUS_KEA_EXPORTER_PER_SUBNET_STATS=true
|
||||||
|
### the IP or hostname on which the agent exports BIND 9 statistics to Prometheus
|
||||||
|
# STORK_AGENT_PROMETHEUS_BIND9_EXPORTER_ADDRESS=
|
||||||
|
### the port on which the agent exports BIND 9 statistics to Prometheus
|
||||||
|
# STORK_AGENT_PROMETHEUS_BIND9_EXPORTER_PORT=
|
||||||
|
|
||||||
|
### Stork Server URL used by the agent to send REST commands to the server during agent registration
|
||||||
|
# STORK_AGENT_SERVER_URL=
|
||||||
|
|
||||||
|
### skip TLS certificate verification when the Stork Agent connects
|
||||||
|
### to Kea over TLS and Kea uses self-signed certificates
|
||||||
|
# STORK_AGENT_SKIP_TLS_CERT_VERIFICATION=true
|
||||||
|
|
||||||
|
|
||||||
|
### Logging parameters
|
||||||
|
|
||||||
|
### Set logging level. Supported values are: DEBUG, INFO, WARN, ERROR
|
||||||
|
STORK_LOG_LEVEL=DEBUG
|
||||||
|
### disable output colorization
|
||||||
|
# CLICOLOR=false
|
||||||
|
|
||||||
|
### path to the hook directory
|
||||||
|
# STORK_AGENT_HOOK_DIRECTORY=
|
||||||
|
|
||||||
19
roles/unbound/README.md
Normal file
19
roles/unbound/README.md
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# Unbound DNS resolver
|
||||||
|
|
||||||
|
Role fora a validating, recursive, caching DNS resolver based on [Unbound](https://nlnetlabs.nl/projects/unbound/about/).
|
||||||
|
It is designed to be fast and lean and incorporates modern features based on open standards.
|
||||||
|
|
||||||
|
- [Documentation](https://unbound.docs.nlnetlabs.nl/en/latest/)
|
||||||
|
|
||||||
|
## Role Customization
|
||||||
|
|
||||||
|
The following variables can be used to customize this role:
|
||||||
|
|
||||||
|
| Variable | Type | Default | Description |
|
||||||
|
|------------------------------------------|-----------------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| unbound_install_prometheus_exporter | Boolean | `true` | Whether [Unbound Exporter](https://github.com/letsencrypt/unbound_exporter) should also be installed to expose resolver statistics in prometheus format. |
|
||||||
|
| unbound_bind_interfaces | List of Strings | `[0.0.0.0, ::]` | List of interface names or IP addresses on which unbound will listen for dns queries |
|
||||||
|
| unbound_enable_unbound_control | Boolean | `true` | Whether the [remote control](https://unbound.docs.nlnetlabs.nl/en/latest/getting-started/configuration.html#set-up-remote-control) feature of unbound should be configured. |
|
||||||
|
| unbound_enable_dnssec | Boolean | `true` | Whether dnssec validation should be enabled |
|
||||||
|
| unbound_access_control | List of Strings | `[]` | **Required** List of [unbound access control values](https://unbound.docs.nlnetlabs.nl/en/latest/manpages/unbound.conf.html#:~:text=access-control:%20%3CIP%20netblock%3E%20%3Caction%3E) |
|
||||||
|
| unbound_disable_systemd_networkd | Boolean | `true` | If true, systemd-networkd is disabled and the local system is pointed towards the configured dns resolver. |
|
||||||
7
roles/unbound/defaults/main.yml
Normal file
7
roles/unbound/defaults/main.yml
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
unbound_install_prometheus_exporter: true
|
||||||
|
unbound_bind_interfaces: [ "0.0.0.0", "::" ]
|
||||||
|
unbound_disable_systemd_networkd: true
|
||||||
|
unbound_enable_unbound_control: true
|
||||||
|
unbound_enable_dnssec: true
|
||||||
|
unbound_access_control: [ ]
|
||||||
|
unbound_private_domain: [ ]
|
||||||
1
roles/unbound/files/no-resolved.resolv.conf
Normal file
1
roles/unbound/files/no-resolved.resolv.conf
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
nameserver 127.0.0.1
|
||||||
27
roles/unbound/handlers/main.yml
Normal file
27
roles/unbound/handlers/main.yml
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
- name: unbound.restarted
|
||||||
|
tags: [ unbound, dns, dns_resolver ]
|
||||||
|
become: true
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: unbound.service
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: unbound.reloaded
|
||||||
|
tags: [ unbound, dns, dns_resolver ]
|
||||||
|
become: true
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: unbound.service
|
||||||
|
state: reloaded
|
||||||
|
|
||||||
|
- name: prometheus-unbound-exporter.restarted
|
||||||
|
become: true
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: prometheus-unbound-exporter.service
|
||||||
|
state: restarted
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
- name: prometheus-unbound-exporter.enabled
|
||||||
|
become: true
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: prometheus-unbound-exporter.service
|
||||||
|
enabled: true
|
||||||
|
daemon_reload: true
|
||||||
63
roles/unbound/tasks/main.yml
Normal file
63
roles/unbound/tasks/main.yml
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
- name: unbound role main
|
||||||
|
tags: [ unbound, dns, dns_resolver ]
|
||||||
|
block:
|
||||||
|
|
||||||
|
- name: install unbound dns resolver
|
||||||
|
become: true
|
||||||
|
ansible.builtin.package:
|
||||||
|
name: unbound
|
||||||
|
|
||||||
|
- name: install extra dns tooling
|
||||||
|
become: true
|
||||||
|
ansible.builtin.package:
|
||||||
|
name: [ bind ] # the bind package includes tools like dig in archlinux
|
||||||
|
|
||||||
|
- name: ensure correct directory permissions
|
||||||
|
become: true
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /etc/unbound
|
||||||
|
state: directory
|
||||||
|
mode: u=rwX,g=rX,o=rX
|
||||||
|
recurse: true
|
||||||
|
owner: unbound
|
||||||
|
group: unbound
|
||||||
|
|
||||||
|
- name: configure unbound dns resolver
|
||||||
|
become: true
|
||||||
|
notify: unbound.restarted
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: unbound.conf.j2
|
||||||
|
dest: /etc/unbound/unbound.conf
|
||||||
|
owner: unbound
|
||||||
|
group: unbound
|
||||||
|
mode: u=rw,g=r,o=r
|
||||||
|
|
||||||
|
- name: ensure unbound is running and enabled
|
||||||
|
become: true
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: unbound.service
|
||||||
|
state: started
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
- name: disable systemd-resolved
|
||||||
|
become: true
|
||||||
|
when: unbound_disable_systemd_networkd
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: systemd-resolved.service
|
||||||
|
state: stopped
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
- name: configure system resolver to point to local unbound
|
||||||
|
become: true
|
||||||
|
when: unbound_disable_systemd_networkd
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: no-resolved.resolv.conf
|
||||||
|
dest: /etc/resolv.conf
|
||||||
|
owner: unbound
|
||||||
|
group: unbound
|
||||||
|
mode: u=rw,g=r,o=r
|
||||||
|
|
||||||
|
|
||||||
|
- name: install and configure prometheus-exporter for unbound
|
||||||
|
ansible.builtin.import_tasks: prometheus-exporter.yml
|
||||||
|
when: unbound_install_prometheus_exporter
|
||||||
17
roles/unbound/tasks/prometheus-exporter.yml
Normal file
17
roles/unbound/tasks/prometheus-exporter.yml
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
- name: install unbound prometheus exporter
|
||||||
|
become: true
|
||||||
|
ansible.builtin.package:
|
||||||
|
name: prometheus-unbound-exporter
|
||||||
|
notify: prometheus-unbound-exporter.enabled
|
||||||
|
|
||||||
|
- name: configure unbound exporter
|
||||||
|
become: true
|
||||||
|
ansible.builtin.copy:
|
||||||
|
dest: /etc/conf.d/prometheus-unbound-exporter
|
||||||
|
content: |
|
||||||
|
UNBOUND_EXPORTER_ARGS="-unbound.ca "" -unbound.cert "" -unbound.host "unix:///run/unbound-control.sock"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: '0660'
|
||||||
|
notify: prometheus-unbound-exporter.restarted
|
||||||
73
roles/unbound/templates/unbound.conf.j2
Normal file
73
roles/unbound/templates/unbound.conf.j2
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
# ref: https://unbound.docs.nlnetlabs.nl/en/latest/manpages/unbound.conf.html
|
||||||
|
# unbound.conf(5) man page
|
||||||
|
server:
|
||||||
|
{% if unbound_enable_dnssec -%}
|
||||||
|
# disable chroot because unbound is the only thing running on the VM
|
||||||
|
# and because it has issues with how archlinux configures the systemd units write protection regarding the anchor file
|
||||||
|
chroot: ""
|
||||||
|
|
||||||
|
# location of the trust anchor file that enables DNSSEC
|
||||||
|
# this file is generated by the `unbound-anchor` command
|
||||||
|
auto-trust-anchor-file: "/etc/unbound/trusted-key.key"
|
||||||
|
{% endif -%}
|
||||||
|
|
||||||
|
# use all CPUs
|
||||||
|
num-threads: 2
|
||||||
|
|
||||||
|
# more cache memory
|
||||||
|
rrset-cache-size: 60m
|
||||||
|
msg-cache-size: 30m
|
||||||
|
|
||||||
|
# prefetch to keep the cache up to date
|
||||||
|
prefetch: yes
|
||||||
|
|
||||||
|
# fetch the DNSKEYs earlier in the validation process, when a DS record is encountered
|
||||||
|
prefetch-key: yes
|
||||||
|
|
||||||
|
# Faster UDP with multithreading (only on Linux).
|
||||||
|
so-reuseport: yes
|
||||||
|
|
||||||
|
# disable special large send buffer handling and just use kernel defaults
|
||||||
|
so-sndbuf: 0
|
||||||
|
|
||||||
|
# send minimal amount of information to upstream servers to enhance privacy
|
||||||
|
qname-minimisation: yes
|
||||||
|
|
||||||
|
# specify the interface to answer queries from by ip-address.
|
||||||
|
{% for i in unbound_bind_interfaces -%}
|
||||||
|
interface: "{{ i }}"
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
# addresses from the IP range that are allowed to connect to the resolver
|
||||||
|
{% for i in unbound_access_control -%}
|
||||||
|
access-control: {{ i }}
|
||||||
|
{% endfor -%}
|
||||||
|
|
||||||
|
{% for i in unbound_private_domain -%}
|
||||||
|
private-domain: {{ i }}
|
||||||
|
{% endfor -%}
|
||||||
|
|
||||||
|
# The number of seconds between printing statistics to the log for every thread.
|
||||||
|
statistics-interval: 0
|
||||||
|
|
||||||
|
# Extended statistics are printed, Keeping track of more statistics takes time.
|
||||||
|
extended-statistics: yes
|
||||||
|
|
||||||
|
remote-control:
|
||||||
|
control-enable: {{ "yes" if unbound_enable_unbound_control else "no" }}
|
||||||
|
control-interface: /run/unbound-control.sock
|
||||||
|
|
||||||
|
|
||||||
|
# configure some zones for which this resolver will act authoritatively
|
||||||
|
# https://www.dns.icann.org/services/axfr/
|
||||||
|
{% for i in [ ".", "in-addr.arpa.", "arpa.", "root-servers.net.", "ip6.arpa.", "ip6-servers.arpa.", "mcast.net." ] %}
|
||||||
|
auth-zone:
|
||||||
|
name: "{{ i }}"
|
||||||
|
primary: "lax.xfr.dns.icann.org"
|
||||||
|
primary: "iad.xfr.dns.icann.org"
|
||||||
|
fallback-enabled: yes
|
||||||
|
for-downstream: no
|
||||||
|
for-upstream: yes
|
||||||
|
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue