# 02 - Core Infrastructure

# Proxmox VE

# <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VE</span>

## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Purpose</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VE</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">primary</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hypervisor</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Bytek</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">homelab.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hosts</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">manages:</span>

<div id="bkmrk-virtual-machines.-li" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Virtual</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">machines.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Linux</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">containers.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Virtual</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">networking.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">firewall</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">rules.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LVM-thin</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VM</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LXC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">snapshots.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Scheduled</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backups.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Backup</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">restoration.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Physical-device</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">passthrough.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Emergency</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">guest</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">consoles.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">critical</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">management</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">system</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remain</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">accessible</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">independently</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">of</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik.</span>

<div id="bkmrk-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Service</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Information</span>

<div id="bkmrk-setting-value-privat" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Setting</span></th><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Value</span></th></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve.bytek.ca</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">IP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">address</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">192.168.2.254</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Web</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">interface</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">8006</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">SSH</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">22</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">scope</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">trusted</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPN</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Normal</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Emergency</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">root@pam</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">General</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">resolver</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">9.9.9.9</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Backup</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve-backup</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Primary</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VM</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">local-lvm</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Large-data</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user-data</span>`</td></tr></tbody></table>

</div></div></div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Management</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">interface:</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">[<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Open</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VE</span>](https://pve.bytek.ca:8006/)</span>

<div id="bkmrk--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Policy</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">management</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">interface</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remain</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">private.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Approved</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">paths</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">include:</span>

<div id="bkmrk-a-workstation-on-the" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">workstation</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">on</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">trusted</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remote-access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPN.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">physical</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">console.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">deliberately</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">configured</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">emergency</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">SSH</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">tunnel.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">following</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">methods</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">are</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">prohibited:</span>

<div id="bkmrk-public-whc-dns-recor" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WHC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">record</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve.bytek.ca</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Bell</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">router</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forwarding</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">of</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">8006.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forwarding</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">of</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">8006.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">routing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Direct</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">internet</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">exposure</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">of</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">SSH.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">resolves</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve.bytek.ca</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">directly</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">192.168.2.254</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>

<div id="bkmrk--2" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Design</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">host</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">intentionally</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">uses</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Quad9</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">at</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">9.9.9.9</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">instead</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">of</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">This</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">prevents</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hypervisor</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">from</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">depending</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">on</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">guest</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VM</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LXC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">its</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">own</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">service.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">behavior</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">differs</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">depending</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">on</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">requester:</span>

<div id="bkmrk-requester-hostname-r" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Requester</span></th><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Hostname</span></th><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Result</span></th></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">workstation</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">using</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve.bytek.ca</span>`</td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">192.168.2.254</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">using</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Quad9</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">portal.bytek.ca</span>`</td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">38.29.213.101</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">workstation</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">using</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">portal.bytek.ca</span>`</td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">192.168.2.182</span>`</td></tr></tbody></table>

</div></div></div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">may</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">therefore</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">reach</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">through</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">path.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">If</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">that</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">path</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">becomes</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">unreliable</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">single</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">static</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">entry</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">can</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">map</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">portal.bytek.ca</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">192.168.2.182</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">in</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">/etc/hosts</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">file</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">without</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">changing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">general</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">resolver.</span>

<div id="bkmrk--3" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Browser</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Requirement</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve.bytek.ca</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">exists</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">only</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">in</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Firefox-based</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">browsers</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">such</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">as</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Zen</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">may</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">bypass</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">when</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">enhanced</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">protection</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">over</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forced.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Recommended</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">browser</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">configuration:</span>

<div id="bkmrk-dns-over-https%3A-off-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">over</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Off</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Default</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Protection.</span>
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxy:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">No</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">proxy</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">system</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">proxy</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">settings.</span>
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPN:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">allow</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">If</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">does</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">load</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">but</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">IP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">address</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">works,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">browser</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">protection</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">before</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">changing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Useful</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Windows</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">checks:</span>

<div id="bkmrk-resolve-dnsname-pve." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Resolve-DnsName</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve.bytek.ca</span>`
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">nslookup</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve.bytek.ca</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">192.168.2.65</span>`
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Test-NetConnection</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve.bytek.ca</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">-Port</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">8006</span>`
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Clear-DnsClientCache</span>`
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ipconfig</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">/flushdns</span>`

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Expected</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">results:</span>

<div id="bkmrk-pve.bytek.ca-resolve" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve.bytek.ca</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">resolves</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">192.168.2.254</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">8006</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">reachable.</span>

---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Model</span>

### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Normal</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentication</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Normal</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">administration</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">uses</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">native</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OpenID</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Connect</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">with</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik.</span>

<div id="bkmrk-oidc-setting-value-r" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Setting</span></th><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Value</span></th></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Realm</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentik</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Issuer</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">https://portal.bytek.ca/application/o/proxmox/</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Username</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">claim</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">username</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Scopes</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">email</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">profile</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Automatically</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">create</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">users</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Enabled</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Default</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">realm</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Optional</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">after</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">validation</span></td></tr></tbody></table>

</div></div></div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">matching</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">provider</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">requires:</span>

<div id="bkmrk-application-slug%3A-pr" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Application</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">slug:</span>** `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">proxmox</span>`
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Client</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">type:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confidential</span>
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Subject</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mode:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">User</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">UUID</span>
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Signing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">key:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Selected</span>
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Encryption</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">key:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">None</span>
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authorization</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">redirect:</span>** `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">https://pve.bytek.ca:8006</span>`

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Required</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">bindings:</span>

<div id="bkmrk-group-bytek-admin.-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Group</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">bytek-admin</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Policy</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Allow</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">bytek.ca</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">users</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Policy</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">engine</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mode</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ALL</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">satisfy</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">both</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">group</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">policy</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">requirements.</span>

<div id="bkmrk--4" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Scope</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Mappings</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">provider</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">include</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">following</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">selected</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">scope</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mappings:</span>

<div id="bkmrk-openid-email-profile" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">openid</span>`
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">email</span>`
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">profile</span>`

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Missing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">scope</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mappings</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">can</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">allow</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">browser</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authorization</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">step</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">succeed</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">while</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">causing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">fail</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">at</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">userinfo</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">previously</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">observed</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">failure</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">was:</span>

<div id="bkmrk-openid-authenticatio" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OpenID</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">failure.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Failed</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">contact</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">userinfo</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">returned</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">failure</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">401.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Selecting</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">expected</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mappings</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">in</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">provider</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">resolved</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">flow.</span>

<div id="bkmrk--5" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authorization</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Are</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Separate</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Successful</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">creates</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">but</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">does</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">grant</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VMs,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">containers,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">nodes,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">newly</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">created</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">may</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">initially</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">see</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">empty</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">interface.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">requires</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">explicit</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access-control</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">entry.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">For</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">primary</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">administrator:</span>

<div id="bkmrk-permission-setting-v" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Permission</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Setting</span></th><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Value</span></th></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Path</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">/</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Role</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Administrator</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Propagate</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Enabled</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">User</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik-created</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user</span></td></tr></tbody></table>

</div></div></div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">username</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">normally</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ends</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">with</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">realm:</span>

<div id="bkmrk-example%3A-brygag1%40aut" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Example:</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">brygag1@authentik</span>`

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Do</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">accidentally</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">grant</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">permission</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">PAM</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">version</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">of</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">username.</span>

<div id="bkmrk--6" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Break-Glass</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentication</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">local</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">PAM</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">account</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remain</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">available.</span>

<div id="bkmrk-setting-value-accoun" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Setting</span></th><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Value</span></th></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Account</span></td><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">root@pam</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">source</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">host</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">PAM</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Purpose</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Emergency</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">recovery</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Password</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Password</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">manager</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Removal</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">permitted</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">No</span></td></tr></tbody></table>

</div></div></div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Never:</span>

<div id="bkmrk-delete-root%40pam.-dis" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Delete</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">root@pam</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Disable</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">PAM</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">realm.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Make</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">only</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">possible</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">administrative</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">login.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Depend</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">on</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ingress</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">emergency</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">root@pam</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">account</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">should</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">be</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">tested</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">periodically</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">in</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">browser</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">session.</span>

<div id="bkmrk--7" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Web</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Service</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Health</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">web</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">interface</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">provided</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">by</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pveproxy</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Check</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">service</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">state</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">with:</span>

`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">systemctl</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is-active</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pveproxy</span>`

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Expected</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">result:</span>

<div id="bkmrk-active" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">active</span>`

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Check</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">listener</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">with:</span>

`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ss</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">-lntp</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">|</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">grep</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">':8006'</span>`

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Expected</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">result:</span>

<div id="bkmrk-a-listener-on-tcp-po" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">listener</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">on</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">8006.</span>
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pveproxy</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">worker</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">processes</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">appear.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Test</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">locally</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">with:</span>

`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">curl</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">-k</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">https://127.0.0.1:8006/</span>`

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">501</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">method</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HEAD</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">available</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">response</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">from</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">command</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">using</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">curl</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">-I</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">does</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">indicate</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">outage.</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">That</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">response</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">confirms</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">service</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">was</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">reached,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">but</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">does</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">support</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HEAD</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">method.</span>

<div id="bkmrk--8" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Network</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Validation</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Test</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">from</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">another</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VM:</span>

`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">nc</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">-zv</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">-w</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">5</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">192.168.2.254</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">8006</span>`

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">successful</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">result</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">confirms</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">reachability.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Test</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">by</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">IP:</span>

`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">curl</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">-k</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">https://192.168.2.254:8006/</span>`

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Test</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">by</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname:</span>

`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">curl</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">-k</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">https://pve.bytek.ca:8006/</span>`

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">If</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">fails</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">but</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">IP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">works,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">investigate</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">rather</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">than</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pveproxy</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>

<div id="bkmrk--9" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Validation</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">that</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">can</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">retrieve</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">discovery</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">information:</span>

`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">curl</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">-fsS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">https://portal.bytek.ca/application/o/proxmox/.well-known/openid-configuration</span>`

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">response</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">should</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">contain</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">metadata</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">such</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">as:</span>

<div id="bkmrk-issuer.-authorizatio" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Issuer.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authorization</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Token</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Userinfo</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">JWKS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">request</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">userinfo</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">without</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">bearer</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">token</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">should</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">return</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">error.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">That</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">response</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">expected</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">proves</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">reachable.</span>

<div id="bkmrk--10" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Troubleshooting</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Review</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">recent</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">logs</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">with:</span>

`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">journalctl</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">-u</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pvedaemon</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">--since</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">"10</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">minutes</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ago"</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">--no-pager</span>`

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Look</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">terms</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">such</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">as:</span>

<div id="bkmrk-openid.-userinfo.-to" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OpenID.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Userinfo.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Token.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Claim.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Signature.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Issuer.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentication.</span>

</div>### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Failure</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">401</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Possible</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">causes</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">include:</span>

<div id="bkmrk-incorrect-client-id." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Incorrect</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">client</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ID.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Incorrect</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">client</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">secret.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Missing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">scope</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mappings.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Incorrect</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">redirect</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">URI.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Missing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">signing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">key.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Token</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">encryption</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">enabled.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Userinfo</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">failure.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Browser</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">callback</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mismatch.</span>

</div>### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Failed</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Contact</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Userinfo</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Endpoint</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Check:</span>

<div id="bkmrk-authentik-readiness." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">readiness.</span>
2. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">discovery.</span>
3. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">userinfo</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint.</span>
4. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Selected</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">email</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">profile</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mappings.</span>
5. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">realm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">scopes.</span>
6. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">connectivity.</span>
7. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">routing.</span>

</div>### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Login</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Works</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">but</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">No</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VMs</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Appear</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">has</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">been</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">assigned</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ACL.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Assign</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">required</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">role</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">at</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">/</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">with</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">propagation</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">enabled.</span>

### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Hostname</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Does</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Resolve</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Check:</span>

<div id="bkmrk-pi-hole-record.-work" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">record.</span>
2. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Workstation</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">server.</span>
3. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Browser</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">over</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS.</span>
4. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Active</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPN.</span>
5. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Browser</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">proxy.</span>
6. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Windows</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">cache.</span>

---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Firewall</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Policy</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">8006</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">should</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">accept</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">traffic</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">only</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">from</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">approved</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">management</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">sources.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Potential</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">management</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">sources</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">include:</span>

<div id="bkmrk-home-lan.-reserved-a" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Reserved</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">administrative</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">workstation.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Future</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remote-access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">gateway.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Emergency</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">SSH</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">tunnel</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Do</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">create</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">internet-wide</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">accept</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">rule</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">8006.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">SSH</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">should</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">use:</span>

<div id="bkmrk-key-based-authentica" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Key-based</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">No</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">root</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">password</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">login</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">over</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">SSH</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">where</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hardening</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">permits.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">trusted</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPN</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Firewall</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">restrictions.</span>

---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Storage</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Attached</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span>

<div id="bkmrk-storage-id-type-prim" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Storage</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ID</span></th><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Type</span></th><th><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Primary</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Role</span></th></tr><tr><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">local</span>`</td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Directory</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ISOs,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">templates,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">selected</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">local</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">content</span></td></tr><tr><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">local-lvm</span>`</td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LVM-thin</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VM</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LXC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">operating-system</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">disks</span></td></tr><tr><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user-data</span>`</td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LVM-thin</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Large</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user-data</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">disks</span></td></tr><tr><td>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve-backup</span>`</td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Directory</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">on</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ext4</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VZDump</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backup</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">files</span></td></tr></tbody></table>

</div></div></div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Review</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">state</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">using:</span>

`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pvesm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">status</span>`

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">All</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">required</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">should</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">show</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">as</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">active.</span>

<div id="bkmrk--11" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Backup</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">System</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">uses</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">its</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">built-in</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">scheduled</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backup</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">system.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Backups</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">are</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">written</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to:</span>

<div id="bkmrk-storage-id%3A-pve-back" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Storage</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ID:</span>** `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve-backup</span>`
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Mount</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">point:</span>** `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">/mnt/pve/pve-backup</span>`
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Physical</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">disk:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Dedicated</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">internal</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">4</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TB</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HDD</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">general</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">job</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">uses:</span>

<div id="bkmrk-snapshot-mode.-zstd-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Snapshot</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mode.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ZSTD</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">compression.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">retention</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">policy.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Selection</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">of</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">production</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VMs</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LXCs.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backup</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mount</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">uses</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mount-point</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">validation</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">prevent</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">writing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backup</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">data</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">root</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">filesystem</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">if</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HDD</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">unavailable.</span>

<div id="bkmrk--12" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Snapshots</span>

Snapshots are used only for short-term <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">rollback.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Appropriate</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">snapshot</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">cases</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">include:</span>

<div id="bkmrk-before-authentik-cha" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Before</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">changes.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Before</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">changes.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Before</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">operating-system</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">upgrades.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Before</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">enabling</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">GPU</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">passthrough.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Before</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">risky</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">changes.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Snapshots</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">are</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backups.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Delete</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">snapshots</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">after</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">associated</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">change</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">has</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">been</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">validated.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Long-lived</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">snapshots</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">consume</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">thin-pool</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">capacity</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">increase</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">risk.</span>

<div id="bkmrk--13" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Planned</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">GPU</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Passthrough</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">RTX</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">2060</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">planned</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">dedicated</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Plex</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VM.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Before</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">passthrough:</span>

<div id="bkmrk-confirm-vt-d-and-iom" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VT-d</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">IOMMU.</span>
2. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Identify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">GPU</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">audio</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">PCI</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">functions.</span>
3. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Review</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">IOMMU</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">group.</span>
4. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">group</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">contains</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">no</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">critical</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">host</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">devices.</span>
5. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Create</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backup.</span>
6. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Preserve</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">console</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">recovery.</span>
7. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Use</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Q35</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OVMF</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Plex</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VM.</span>
8. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Attach</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">all</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">required</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">RTX</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">2060</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">functions.</span>
9. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Keep</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">GPU</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">non-primary</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">headless</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Plex</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VM.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VM</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">with</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">passed-through</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hardware</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">cannot</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">use</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">normal</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">live</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">migration.</span>

<div id="bkmrk--14" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Recovery</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">If</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">fails:</span>

<div id="bkmrk-open-the-proxmox-log" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Open</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">login</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">page.</span>
2. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Select</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">PAM</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">realm.</span>
3. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Sign</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">in</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">as</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">root@pam</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>
4. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">readiness.</span>
5. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">provider.</span>
6. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">selected</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">scope</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mappings.</span>
7. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">realm.</span>
8. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Review</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pvedaemon</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">logs.</span>
9. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ACL.</span>
10. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Retest</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">from</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">browser</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">session.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">If</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">web</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">interface</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">fails:</span>

<div id="bkmrk-access-the-proxmox-c" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">console</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">SSH.</span>
2. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">IP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">address.</span>
3. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pveproxy</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>
4. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">8006.</span>
5. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Review</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">firewall</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">rules.</span>
6. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage.</span>
7. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Restart</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pveproxy</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">only</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">if</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">service</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">unhealthy.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">If</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">system</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">disk</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">fails:</span>

<div id="bkmrk-preserve-the-user-da" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Preserve</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user-data</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">NVMe</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backup</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HDD.</span>
2. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Reinstall</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">on</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">replacement</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">system</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage.</span>
3. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Restore</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">networking</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">storage</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">definitions.</span>
4. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Reconnect</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user-data</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>
5. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Remount</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve-backup</span>`.
6. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Restore</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">guests</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">from</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backup.</span>
7. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Recreate</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">realm.</span>
8. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">root@pam</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>
9. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Test</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">only</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">after</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">local</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">management</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">works.</span>

---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Validation</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Checklist</span>

<div id="bkmrk-proxmox-owns-192.168" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">owns</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">192.168.2.254</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">resolves</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve.bytek.ca</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">192.168.2.254</span>`<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Zen</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Firefox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">does</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">force</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">8006</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">reachable</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">from</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">administrative</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">workstation.</span>
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pveproxy</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">active.</span>
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">root@pam</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">login</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">works.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">login</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">works.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">has</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">explicit</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ACL.</span>
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">local-lvm</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">active.</span>
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">user-data</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">active.</span>
- `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve-backup</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">active.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Backup</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">jobs</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">complete</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">successfully.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backup</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HDD</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mounted</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">before</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">scheduled</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">jobs</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">run.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">No</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">management</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">exposed</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">publicly.</span>

---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Document</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Control</span>

<div id="bkmrk-owner%3A-bryan-gagne-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Owner:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Bryan</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Gagne-Plante</span>
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname:</span>** `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">pve.bytek.ca</span>`
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">address:</span>** `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">192.168.2.254</span>`
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Normal</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">OIDC</span>
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Emergency</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication:</span>** `<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">root@pam</span>`
- **<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">General</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">resolver:</span>** `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">9.9.9.9</span>`
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Last</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">verified:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">YYYY-MM-DD</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Last</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backup</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">test:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">YYYY-MM-DD</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Last</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">restore</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">test:</span>** <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">YYYY-MM-DD</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">OIDC</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">recovery</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">tested:</span>** <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Yes</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">/</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">No</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Known</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">limitations:</span>** <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Single</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Proxmox</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">host</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">and</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">no</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">current</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">high-availability</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">cluster</span>

</div>

# Public VPS Ingress

## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Purpose</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">internet-facing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">entry</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">point</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">applications</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hosted</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">on</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Bytek</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">network.</span>

The VPS prevents individual home services from being exposed directly through the Bell router. Public HTTPS traffic reaches the VPS first, then travels <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">through</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">encrypted</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">tunnel</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">to</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">network.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">provides:</span>

<div id="bkmrk-a-stable-public-ipv4" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">stable</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">IPv4</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">entry</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">point.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">port</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">443.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">An</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">encrypted</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">path</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">to</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">network.</span>
- Separation <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">between</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">internet</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">private</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">service</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backends.</span>
- A recovery <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">console</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">independent</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">of</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">network.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">controlled</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">point</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">firewalling.</span>

---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Service</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Information</span>

<div id="bkmrk-setting-value-public" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Setting</span></th><th><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Value</span></th></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">IPv4</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">address</span></td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`</td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Primary</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">purpose</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">HTTPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">ingress</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">port</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">443</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Home-network</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">transport</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Administration</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">key</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">authentication</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">port</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">current</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">hardened</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">port</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Operating</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">system</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">current</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Linux</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">distribution</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Hosting</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">provider</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">current</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">provider</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">provider</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WHC</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">cPanel</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Monitoring</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Uptime</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Kuma</span></td></tr></tbody></table>

</div></div>---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Architecture</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Role</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">does</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">host</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">main</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Bytek</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">applications.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forwards</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">approved</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">traffic</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">network.</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">The</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">primary</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">traffic</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">path</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is:</span>

<div id="bkmrk-a-client-opens-a-pub" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">client</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">opens</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">hostname.</span>
2. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WHC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">resolves</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">hostname</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">to</span> `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">.</span>
3. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">client</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">establishes</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">on</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">port</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">443.</span>
4. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forwards</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">permitted</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">connection</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">through</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard.</span>
5. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">gateway</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">receives</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">traffic.</span>
6. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">gateway</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forwards</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">request</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Traefik</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">at</span> `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">192.168.2.182</span>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">.</span>
7. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">selects</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">correct</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backend.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">have</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">direct</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">all</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">home-LAN</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">services</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">unless</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">a</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">specific</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">rule</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">requires</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">it.</span>

<div id="bkmrk-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Hostnames</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">following</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">records</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">point</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">to</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS:</span>

<div id="bkmrk-service-hostname-pub" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Service</span></th><th><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Hostname</span></th><th><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Destination</span></th></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Nextcloud</span></td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">cloud.bytek.ca</span>`</td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`</td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">BookStack</span></td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">docs.bytek.ca</span>`</td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`</td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Authentik</span></td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">portal.bytek.ca</span>`</td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`</td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Vikunja</span></td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">projects.bytek.ca</span>`</td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`</td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Traefik</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">dashboard</span></td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">proxy.bytek.ca</span>`</td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`</td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Uptime</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Kuma</span></td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">status.bytek.ca</span>`</td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`</td></tr></tbody></table>

</div></div></div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname</span> `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">pve.bytek.ca</span>` <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">point</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remains</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">available</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">only</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">through</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">trusted</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remote-access</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">method.</span>

<div id="bkmrk--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Flow</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">External</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">requests</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">follow</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">this</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">sequence:</span>

<div id="bkmrk-whc-public-dns-retur" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WHC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">returns</span> `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">.</span>
2. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">incoming</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">connection</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">reaches</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">on</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">port</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">443.</span>
3. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">firewall</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">rules</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">that</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">connection</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">targets</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">approved</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">entry</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">point.</span>
4. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forwards</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">traffic</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">through</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">tunnel.</span>
5. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">gateway</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forwards</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">connection</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">to</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Traefik.</span>
6. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">terminates</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">processes</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forwarded</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">connection</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">according</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">configured</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">design.</span>
7. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">routes</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">request</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">by</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">hostname.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">does</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">need</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">separate</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ports</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">every</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">because</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">distinguishes</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">applications</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">by</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">hostname.</span>

<div id="bkmrk--2" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Connection</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">maintains</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">peer</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">relationship</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">with</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">gateway.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">tunnel</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">used</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">for:</span>

<div id="bkmrk-public-https-ingress" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">ingress.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Approved</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">management</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">traffic</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">where</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">explicitly</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">configured.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Connectivity</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">testing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">between</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">and</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">gateway.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Delivery</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">of</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">traffic</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">to</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Traefik.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">existing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">tunnel</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remain</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">separate</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">from</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">any</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">future</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">laptop</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">or</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">phone</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPN.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Do</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">not</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">reuse:</span>

<div id="bkmrk-the-same-wireguard-c" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">same</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">client</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">keys.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">same</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">peer</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">address.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">same</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">interface</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">configuration.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">same</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">subnet</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">road-warrior</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">clients</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">without</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">deliberate</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">routing</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">design.</span>

---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Health</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Review</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">tunnel</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">using:</span>

`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">sudo</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">wg</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">show</span>`

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Verify:</span>

<div id="bkmrk-the-home-peer-is-lis" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">peer</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">listed.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">recent</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">handshake</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">exists.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Transfer</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">counters</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">are</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">increasing.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">expected</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">tunnel</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">addresses</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">appear.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Allowed</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">IPs</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">contain</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">only</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">intended</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">routes.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">endpoint</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">keepalive</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">settings</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">match</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">deployment.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">recent</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">handshake</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">confirms</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">peer</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">connectivity</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">but</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">does</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">prove</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">that</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">forwarding</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">works.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Test</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">complete</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">path</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">separately.</span>

<div id="bkmrk--3" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Firewall</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Policy</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">firewall</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">should</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">allow</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">only</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">required</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">administrative</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">traffic.</span>

### <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Required</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Access</span>

<div id="bkmrk-tcp-443-for-hosted-h" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">443</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hosted</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">applications.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">required</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">UDP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hardened</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">SSH</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">management</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port.</span>

</div>### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traffic</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">That</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Remain</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Private</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Do</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">expose</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">following</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">ports</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">through</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS:</span>

<div id="bkmrk-service-port-proxmox" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Service</span></th><th><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Port</span></th></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VE</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">8006</span></td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">administration</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">management</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">port</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Nextcloud</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">AIO</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">management</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">8080</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Nextcloud</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">AIO</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backend</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">11000</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Uptime</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Kuma</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backend</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">3001</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Authentik</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backend</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">9000</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Vikunja</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backend</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">3456</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">BookStack</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backend</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">6875</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Docker</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">API</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Any</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Docker</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">API</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">listener</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">service</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">22</span></td></tr></tbody></table>

</div></div></div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">New</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ports</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">be</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">documented</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">before</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">being</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">added.</span>

<div id="bkmrk--4" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Administration</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">management</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">uses</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">key</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">authentication.</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Recommended</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">controls</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">include:</span>

<div id="bkmrk-disable-password-aut" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Disable</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">password</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">authentication.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Disable</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">direct</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">root</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">login</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">where</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">administration</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">model</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">permits.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Restrict</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">accepted</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">users.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Use</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Ed25519</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">key.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Store</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">key</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">securely.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Use</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Fail2ban</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">equivalent</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">rate</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">limiting.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Keep</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">provider</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">console</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">available</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">for</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">recovery.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Restrict</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">SSH</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">using</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">firewall</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">where</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">practical.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">current</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">listener</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">using:</span>

`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">ss</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">-lntp</span>`

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">service</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">health</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">using:</span>

`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">systemctl</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is-active</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">ssh</span>`

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Expected</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">result:</span>

<div id="bkmrk-active" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">active</span>`

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Do</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">place</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">private</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">key</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">in</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">BookStack.</span>

<div id="bkmrk--5" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">DNS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Management</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">records</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">are</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">managed</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">through</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WHC</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">cPanel.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">When</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">adding</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">new</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">application:</span>

<div id="bkmrk-create-an-a-record-f" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Create</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">record</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">for</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">new</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">hostname.</span>
2. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Point</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">record</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">to</span> `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">.</span>
3. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Use</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">short</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TTL</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">during</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">initial</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">deployment.</span>
4. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Create</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">matching</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Pi-hole</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">split-DNS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">record.</span>
5. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Create</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Traefik</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">router</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">and</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">service.</span>
6. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backend</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">reachable</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">from</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Traefik.</span>
7. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">certificate</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">issuance.</span>
8. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Test</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">internally.</span>
9. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Test</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">externally</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">using</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">cellular</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">data</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">another</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">external</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">network.</span>
10. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Add</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Uptime</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Kuma</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">monitoring.</span>
11. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Update</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">BookStack</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">documentation.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Do</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">point</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">directly</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">to:</span>

<div id="bkmrk-a-private-home-addre" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">A</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">private</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">address.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">The</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VM.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik’s</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">private</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">IP.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Proxmox.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Nextcloud</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">AIO</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">management.</span>

---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Onboarding</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Checklist</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Before</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">exposing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">new</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">through</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS,</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">confirm:</span>

<div id="bkmrk-the-application-work" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">works</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">directly</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">on</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">its</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">private</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backend.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VM</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">has</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">a</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">reserved</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">IP.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">firewall</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">allows</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">reach</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backend.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WHC</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">record</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">points</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">to</span> `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">points</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">192.168.2.182</span>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">A</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Traefik</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">route</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">exists.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backend</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">uses</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">correct</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">current</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">IP.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">valid</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">certificate</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">issued.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">configured</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">if</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">requires</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSO.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">does</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">expose</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">administrative</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backend</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">unintentionally.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Uptime</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Kuma</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">monitors</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">routed</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">service.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VM</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">covered</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">by</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Proxmox</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backup</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">job.</span>

---

</div>## <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Service</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Validation</span>

### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Address</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Verify</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">that</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">resolves</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostnames</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">to:</span>

<div id="bkmrk-38.29.213.101" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`

</div>### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Tunnel</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Use:</span>

`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">sudo</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">wg</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">show</span>`

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Expected:</span>

<div id="bkmrk-recent-handshake.-in" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Recent</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">handshake.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Increasing</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">transfer</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">counters.</span>

</div>### <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Port</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">443</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Use:</span>

`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">ss</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">-lntp</span>`

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">that</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">intended</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ingress</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">service</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forwarding</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">mechanism</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">listening</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">on</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">443.</span>

### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Routing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Network</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Test</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">intended</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">peer</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">or</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">private</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">tunnel</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">address.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">successful</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">tunnel</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ping</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">confirms</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">network</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">reachability</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">but</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application-level</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">routing.</span>

### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Through</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">From</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">an</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">external</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">connection,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">open</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">such</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">as:</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">[<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Open</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Authentik</span>](https://portal.bytek.ca/)</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">request</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">should</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">reach</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">without</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">exposing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">backend</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">port.</span>

<div id="bkmrk--6" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">External</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Testing</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">External</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">testing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">must</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">use</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">a</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">network</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">outside</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">LAN.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Suitable</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">test</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">methods</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">include:</span>

<div id="bkmrk-a-phone-with-wi-fi-d" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">phone</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">with</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Wi-Fi</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">disabled.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">laptop</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">connected</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">through</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">a</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">mobile</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">hotspot.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remote</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">trusted</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">network.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">external</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">monitoring</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">service.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Testing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">from</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">may</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">use</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">split</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">DNS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">and</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">therefore</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">bypass</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS.</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">To</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">validate</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ingress,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">confirm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">client</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">resolves</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">.</span>

<div id="bkmrk--7" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Monitoring</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Recommended</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Uptime</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Kuma</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">monitors</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">include:</span>

<div id="bkmrk-monitor-target-vps-h" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Monitor</span></th><th><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Target</span></th></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">host</span></td><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">address</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">HTTPS</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">443</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">on</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">peer</span></td><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">tunnel</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">peer</span></td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Authentik</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">external</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">route</span></td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">portal.bytek.ca</span>`</td></tr><tr><td><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Nextcloud</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">external</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">route</span></td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">cloud.bytek.ca</span>`</td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">BookStack</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">external</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">route</span></td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">docs.bytek.ca</span>`</td></tr><tr><td><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Vikunja</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">external</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">route</span></td><td>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">projects.bytek.ca</span>`</td></tr></tbody></table>

</div></div></div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Monitoring</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">should</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">distinguish:</span>

<div id="bkmrk-vps-host-availabilit" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">host</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">availability.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">port</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">availability.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">tunnel</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">availability.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Traefik</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">routing.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">health.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">A</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">successful</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">ping</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">does</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">prove</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">HTTPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forwarding</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">functioning.</span>

<div id="bkmrk--8" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Logging</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Review</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">logs</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">for:</span>

<div id="bkmrk-ssh-authentication-f" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">SSH</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">failures.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Firewall</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">drops.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">handshake</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">loss.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Forwarding</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">failures.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Unexpected</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public-port</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">listeners.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Repeated</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">scans</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">brute-force</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">attempts.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Kernel</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">networking</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">errors.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Useful</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">sources</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">may</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">include:</span>

<div id="bkmrk-system-journal.-ssh-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">System</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">journal.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">journal.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Firewall</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">logs.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">status.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Reverse-proxy</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">forwarding</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">logs,</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">depending</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">on</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">design.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Do</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">copy</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">active</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">tokens,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">private</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">keys,</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">or</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">full</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">authentication</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">headers</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">into</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">BookStack.</span>

<div id="bkmrk--9" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Failure</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Impact</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">If</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">unavailable:</span>

<div id="bkmrk-external-access-to-h" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">External</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">to</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hosted</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">applications</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">fails.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Internal</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">should</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">continue</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">through</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">and</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Proxmox</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remains</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">available</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">internally.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Nextcloud</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">AIO</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">management</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remains</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">available</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">internally.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Pi-hole</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">remains</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">available</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">internally.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Authentik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">may</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">remain</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">available</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">internally.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Existing</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">local</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">sessions</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">may</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">continue.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">The</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">therefore</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">critical</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">external</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">but</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">not</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">for</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">normal</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">LAN</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">access.</span>

<div id="bkmrk--10" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Common</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Failure</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Scenarios</span>

### <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">DNS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Resolves</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Incorrectly</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Symptoms:</span>

<div id="bkmrk-external-clients-con" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">External</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">clients</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">connect</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">to</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">wrong</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">host.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Certificate</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">issuance</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">fails.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Application</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">unreachable</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">externally.</span>

</div><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Check:</span>

<div id="bkmrk-whc-a-record.-public" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WHC</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">A</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">record.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">resolver</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">results.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Record</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TTL.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Accidental</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">AAAA</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">record.</span>

</div>### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Handshake</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Missing</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Symptoms:</span>

<div id="bkmrk-vps-is-reachable.-pu" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">reachable.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">TCP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">443</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">may</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">be</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">open.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">applications</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">are</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">unavailable</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">through</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Check:</span>

<div id="bkmrk-home-internet-connec" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">internet</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">connection.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">gateway.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Peer</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">keys.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Endpoint.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Allowed</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">IPs.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">UDP</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">firewall</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">rules.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Persistent</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">keepalive.</span>

</div>### <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Tunnel</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Works</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">but</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Fails</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Symptoms:</span>

<div id="bkmrk-wireguard-handshake--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">WireGuard</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">handshake</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">exists.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traffic</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">counters</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">increase.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">hostname</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">returns</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">timeout</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">or</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">gateway</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">error.</span>

</div><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Check:</span>

<div id="bkmrk-forwarding-rules.-na" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Forwarding</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">rules.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">NAT</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">rules.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Traefik</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">IP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">address.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Traefik</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">firewall.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backend.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Hostname</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">routing.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Certificate</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">state.</span>

</div>### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Internal</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Access</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Works</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">but</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">External</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Access</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Fails</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">This</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">usually</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">indicates</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">a</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">problem</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">with:</span>

<div id="bkmrk-whc-public-dns.-vps." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WHC</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">DNS.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Home</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">gateway</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">forwarding.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">firewalling.</span>

</div><span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Internal</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">split</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">bypasses</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">those</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">components.</span>

### <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">External</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Access</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Works</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">but</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Internal</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Access</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Fails</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">This</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">usually</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">indicates</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">a</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">problem</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">with:</span>

<div id="bkmrk-pi-hole.-split-dns-r" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Pi-hole.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Split-DNS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">records.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Client</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">DNS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">settings.</span>
- <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Browser</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">DNS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">over</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">HTTPS.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">LAN</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">firewall</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">rules.</span>

---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Recovery</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Procedure</span>

<span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">If</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">all</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">public</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">applications</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">become</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">unavailable:</span>

<div id="bkmrk-confirm-the-vps-is-r" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">Confirm</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">the</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">VPS</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">is</span> <span class="___1cs5bdp f1w7gpdv f5p0z4x" style="opacity:1;">running</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">through</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">hosting-provider</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">console.</span>
2. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">IP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">still</span> `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">.</span>
3. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">access.</span>
4. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">interface.</span>
5. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">latest</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">home-peer</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">handshake.</span>
6. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">transfer</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">counters.</span>
7. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">IP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">forwarding</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">and</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">firewall</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">rules.</span>
8. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">443</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">listening.</span>
9. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">gateway</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">running.</span>
10. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Confirm</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Traefik</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">running.</span>
11. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Test</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">one</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">directly</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">from</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Traefik.</span>
12. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Test</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">hostname</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">from</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">an</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">external</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">network.</span>
13. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Review</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">logs</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">before</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">changing</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">configuration.</span>

</div><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">If</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">unavailable:</span>

<div id="bkmrk-use-the-vps-provider" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Use</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">provider</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">console.</span>
2. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Verify</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">service.</span>
3. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Verify</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">firewall.</span>
4. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Verify</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">disk</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">space.</span>
5. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Verify</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">network</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">interface.</span>
6. <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Restore</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">configuration</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">from</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">a</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">known-good</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backup</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">if</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">required.</span>

---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Backup</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">and</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Recovery</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Data</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Preserve</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">following</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">information:</span>

<div id="bkmrk-wireguard-configurat" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">configuration.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">and</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">private</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">keys.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Firewall</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">rules.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">configuration.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Authorized</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">keys.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Network</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">forwarding</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">rules.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">NAT</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">rules.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Service</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">configuration.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Provider</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">account</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">and</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">console</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">access.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">IP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">information.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Recovery</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">procedure.</span>

</div><span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Private</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">keys</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">must</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">remain</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">in</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">a</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">password</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">manager</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">or</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">encrypted</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backup.</span>

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">BookStack</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">should</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">record</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">location</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">of</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">secrets,</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">not</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">secret</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">values.</span>

<div id="bkmrk--11" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Security</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Review</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Checklist</span>

<div id="bkmrk-only-approved-public" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Only</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">approved</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">ports</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">are</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">open.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">password</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">authentication</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">disabled.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">private</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">keys</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">are</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">protected.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Root</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">behavior</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">matches</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">hardening</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">policy.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">keys</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">are</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">unique.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Allowed</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">IPs</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">are</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">narrow.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">443</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">reaches</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">only</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">the</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">intended</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">ingress</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">path.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Proxmox</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">TCP</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">8006</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">not</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">exposed.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">backend</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">ports</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">are</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">not</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">exposed.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">The</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Docker</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">API</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">is</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">not</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">exposed.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Firewall</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">and</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">authentication</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">logs</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">are</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">reviewed.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Provider</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">console</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">access</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">works.</span>
- <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Recovery</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">credentials</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">are</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">stored</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">securely.</span>

---

</div>## <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Document</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Control</span>

<div id="bkmrk-owner%3A-bryan-gagne-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Owner:</span>** <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Bryan</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Gagne-Plante</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">address:</span>** `<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">38.29.213.101</span>`
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Primary</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">role:</span>** <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">HTTPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">ingress</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Home</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">transport:</span>** <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Public</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">DNS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">provider:</span>** <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WHC</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">cPanel</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Last</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">verified:</span>** <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">YYYY-MM-DD</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Last</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">external-access</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">test:</span>** <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">YYYY-MM-DD</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Last</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">recovery</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">test:</span>** <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">YYYY-MM-DD</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">SSH</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">recovery</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">tested:</span>** <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Yes</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">/</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">No</span>
- **<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">Known</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">limitations:</span>** <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">External</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">application</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">access</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">depends</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">on</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">one</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">VPS</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">and</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">one</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">WireGuard</span> <span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">tunnel</span>

</div>

# WireGuard Gateway

## Purpose

The WireGuard gateway connects the public VPS to the Bytek home network through an encrypted tunnel.

The gateway allows public HTTPS traffic to reach Traefik without exposing individual home services directly through the Bell router.

The WireGuard gateway provides:

<div id="bkmrk-encrypted-vps-to-hom" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Encrypted VPS-to-home connectivity.
- Controlled forwarding between the tunnel and the home LAN.
- Network address translation where required.
- Firewall enforcement between public ingress and private services.
- A private path from the VPS to Traefik.
- Separation between the public VPS and the rest of the home network.

---

</div>## Service Information

<div id="bkmrk-setting-value-servic" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Service name</td><td>WireGuard Gateway</td></tr><tr><td>Private IP address</td><td>`192.168.2.64`</td></tr><tr><td>Primary role</td><td>VPS-to-home tunnel gateway</td></tr><tr><td>Home LAN</td><td>`192.168.2.0/24`</td></tr><tr><td>Default gateway</td><td>`192.168.2.1`</td></tr><tr><td>Public peer</td><td>VPS at `38.29.213.101`</td></tr><tr><td>Administrative access</td><td>SSH key authentication</td></tr><tr><td>Public exposure</td><td>WireGuard port only</td></tr><tr><td>Backup coverage</td><td>Proxmox scheduled backup</td></tr><tr><td>Guest type</td><td>Confirm VM or LXC</td></tr><tr><td>Proxmox guest ID</td><td>Confirm current VM or CT ID</td></tr></tbody></table>

</div></div>---

</div>## Architecture Role

The WireGuard gateway sits between the public VPS and the home LAN.

When an external user opens a hosted application:

<div id="bkmrk-public-dns-resolves-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Public DNS resolves the application hostname to the VPS.
2. The client connects to the VPS.
3. The VPS forwards the approved connection through WireGuard.
4. The WireGuard gateway receives the encrypted traffic.
5. The gateway applies forwarding and firewall rules.
6. The gateway sends the request to Traefik at `192.168.2.182`.
7. Traefik routes the request to the correct internal application.

</div>The WireGuard gateway does not host the applications.

The gateway only provides secure transport and controlled forwarding.

<div id="bkmrk-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Primary Traffic Flow

The normal public application path includes:

<div id="bkmrk-stage-component-publ" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Stage</th><th>Component</th></tr><tr><td>Public DNS</td><td>WHC cPanel</td></tr><tr><td>Public entry point</td><td>VPS at `38.29.213.101`</td></tr><tr><td>Encrypted transport</td><td>WireGuard</td></tr><tr><td>Home tunnel endpoint</td><td>WireGuard gateway at `192.168.2.64`</td></tr><tr><td>HTTPS routing</td><td>Traefik at `192.168.2.182`</td></tr><tr><td>Application backend</td><td>Private VM or LXC</td></tr></tbody></table>

</div></div></div>Only required application traffic should pass through this path.

<div id="bkmrk--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## WireGuard Interface

The WireGuard interface contains:

<div id="bkmrk-a-private-tunnel-add" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- A private tunnel address.
- A listening port.
- A private key.
- A peer definition for the VPS.
- Allowed IP routes.
- Optional startup and shutdown firewall commands.

</div>The existing interface name, tunnel subnet, listening port, and peer address should be recorded after checking the active configuration.

Useful checks:

<div id="bkmrk-sudo-wg-show-sudo-wg" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `sudo wg show`
- `sudo wg showconf wg0`
- `ip -br addr`
- `ip route`

</div>If the interface is not named `wg0`, replace `wg0` with the actual interface name.

Do not copy the private key into BookStack.

<div id="bkmrk--2" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Key Management

WireGuard authentication uses public and private key pairs.

### Gateway Private Key

The gateway private key:

<div id="bkmrk-must-remain-only-on-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Must remain only on the WireGuard gateway.
- Must have restrictive filesystem permissions.
- Must not be copied into BookStack.
- Must not be sent through chat or email.
- Must be stored in an encrypted backup or password manager if recovery requires it.

</div>### Gateway Public Key

The gateway public key may be stored in documentation.

The public key identifies the gateway to the VPS peer.

### VPS Public Key

The gateway configuration contains the VPS public key.

The VPS private key remains only on the VPS.

### Key Rotation

If a private key is exposed:

<div id="bkmrk-generate-a-new-key-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Generate a new key pair on the affected peer.
2. Update the opposite peer with the new public key.
3. Restart or reload the affected WireGuard interface.
4. Confirm a new handshake.
5. Revoke the compromised key.
6. Update the encrypted recovery record.
7. Document the rotation date.

---

</div>## Allowed IPs

WireGuard Allowed IPs control routing and peer address validation.

The gateway and VPS must use narrow Allowed IP entries.

Allowed IPs should contain only:

<div id="bkmrk-the-remote-tunnel-ad" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- The remote tunnel address.
- Explicit home or service routes required by the design.
- Any intentionally routed management destination.

</div>Avoid using overly broad routes unless the architecture requires them.

Do not add the full home LAN to a peer merely for convenience without reviewing the security impact.

<div id="bkmrk--3" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## IP Forwarding

The gateway requires IPv4 forwarding.

Check the current value with:

`sysctl net.ipv4.ip_forward`

Expected result:

<div id="bkmrk-net.ipv4.ip_forward-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `net.ipv4.ip_forward = 1`

</div>The persistent setting should be stored in a file under `/etc/sysctl.d/`.

If forwarding is disabled, the WireGuard handshake may succeed while application traffic still fails.

<div id="bkmrk--4" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Network Address Translation

The gateway may use NAT when home-LAN devices do not have a route back to the WireGuard tunnel subnet.

NAT allows an internal destination to see the connection as originating from the WireGuard gateway’s LAN address.

Advantages:

<div id="bkmrk-no-static-route-is-r" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- No static route is required on the Bell router.
- Existing LAN devices can return traffic normally.
- Deployment is simpler.

</div>Limitations:

<div id="bkmrk-internal-application" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Internal applications see the gateway address rather than the original tunnel source.
- Source-based application logging becomes less detailed.
- Firewall rules on the destination must allow the gateway address.

</div>NAT rules should be narrow and limited to required source networks, destinations, and ports.

<div id="bkmrk--5" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Firewall Policy

The WireGuard gateway must permit only required tunnel traffic.

### Required Traffic

Typical required traffic includes:

<div id="bkmrk-wireguard-udp-traffi" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- WireGuard UDP traffic between the VPS and gateway.
- Forwarded HTTPS traffic to Traefik.
- Established return traffic.
- SSH administration from the home LAN.
- Selected diagnostic traffic.

</div>### Restricted Traffic

The VPS should not automatically receive unrestricted access to:

<div id="bkmrk-proxmox.-pi-hole-adm" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Proxmox.
- Pi-hole administration.
- Nextcloud AIO management.
- Uptime Kuma’s private backend.
- Authentik’s private backend.
- Vikunja’s private backend.
- BookStack’s private backend.
- SSH on every home service.
- The Docker API.
- Other LAN client devices.

</div>Each additional route should have a documented purpose.

<div id="bkmrk--6" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Traefik Forwarding

The primary application destination behind the WireGuard gateway is Traefik.

<div id="bkmrk-destination-value-tr" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Destination</th><th>Value</th></tr><tr><td>Traefik address</td><td>`192.168.2.182`</td></tr><tr><td>Public application port</td><td>TCP 443</td></tr><tr><td>Purpose</td><td>HTTPS routing to internal applications</td></tr></tbody></table>

</div></div></div>The gateway should forward approved public HTTPS traffic to Traefik rather than directly to individual application VMs.

This keeps public routing centralized.

<div id="bkmrk--7" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Proxmox Management Through the Tunnel

Proxmox management is not part of the normal public ingress path.

If emergency Proxmox access through the VPS is intentionally enabled, use a narrow route such as:

<div id="bkmrk-vps-tunnel-address-t" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- VPS tunnel address to `192.168.2.254`.
- TCP port 8006 only.
- Optional TCP port 22 using a separate rule.
- SSH local port forwarding from the remote workstation.

</div>Do not expose Proxmox TCP 8006 directly on the VPS public interface.

The preferred long-term remote-management method is a dedicated road-warrior VPN for the administrator’s laptop or phone.

<div id="bkmrk--8" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Separation From a Future Remote-User VPN

The current WireGuard connection is used for VPS ingress.

A future laptop or phone VPN must use:

<div id="bkmrk-a-separate-wireguard" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- A separate WireGuard interface.
- A separate UDP port.
- A separate VPN subnet.
- Separate peer keys.
- A separate firewall policy.
- Unique addresses for every device.

</div>Do not reuse the VPS key pair or peer configuration for remote-user devices.

The VPS tunnel and a road-warrior VPN serve different purposes.

<div id="bkmrk--9" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Service Startup

The WireGuard gateway should start early after a host reboot.

Preferred dependency order:

<div id="bkmrk-proxmox-ve.-pi-hole." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Proxmox VE.
2. Pi-hole.
3. WireGuard gateway.
4. Authentik.
5. Traefik.
6. Public applications.

</div>The WireGuard service should be enabled at boot.

Check the active service using:

`systemctl status wg-quick@wg0 --no-pager`

If the interface name differs, replace `wg0` with the correct name.

Expected service state:

<div id="bkmrk-active.-interface-cr" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Active.
- Interface created.
- Peer loaded.
- No repeated startup errors.

---

</div>## Health Validation

### Confirm the Interface

Use:

`sudo wg show`

Confirm:

<div id="bkmrk-interface-exists.-li" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Interface exists.
- Listening port is present.
- VPS public key is listed.
- Endpoint is correct.
- Allowed IPs are correct.
- Latest handshake is recent.
- Transfer counters increase.

</div>### Confirm Tunnel Addressing

Use:

`ip -br addr`

The WireGuard interface should show the expected tunnel address.

### Confirm Routes

Use:

`ip route`

The required tunnel and LAN routes should be present.

### Confirm Forwarding

Use:

`sysctl net.ipv4.ip_forward`

Expected:

<div id="bkmrk-forwarding-enabled." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Forwarding enabled.

</div>### Confirm Firewall

If UFW is used:

`sudo ufw status numbered`

If iptables NAT is used:

`sudo iptables -t nat -L -n -v --line-numbers`

If nftables is used:

`sudo nft list ruleset`

Review only the firewall system actually used by the gateway.

<div id="bkmrk--10" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## End-to-End Validation

A successful WireGuard handshake does not prove application forwarding works.

Validate the complete path.

### From the VPS

Test the home WireGuard peer or tunnel gateway address.

Then test Traefik through the tunnel on the intended destination and port.

### From an External Client

Use:

<div id="bkmrk-cellular-data.-a-mob" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Cellular data.
- A mobile hotspot.
- A remote network.

</div>Open a public application such as:

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">[Open Authentik](https://portal.bytek.ca/)</span>

The application should load through:

<div id="bkmrk-vps.-wireguard.-gate" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- VPS.
- WireGuard.
- Gateway.
- Traefik.
- Application backend.

</div>### From the Home LAN

The same hostname should resolve through Pi-hole and bypass the VPS.

This verifies that public and private paths both work.

<div id="bkmrk--11" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Monitoring

Recommended Uptime Kuma monitors include:

<div id="bkmrk-monitor-target-gatew" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Monitor</th><th>Target</th></tr><tr><td>Gateway VM or LXC</td><td>Ping `192.168.2.64`</td></tr><tr><td>WireGuard tunnel peer</td><td>Tunnel address or supported monitor</td></tr><tr><td>Public VPS</td><td>`38.29.213.101`</td></tr><tr><td>Traefik through tunnel</td><td>Approved tunnel path</td></tr><tr><td>Public Authentik</td><td>`portal.bytek.ca`</td></tr><tr><td>Public Nextcloud</td><td>`cloud.bytek.ca`</td></tr></tbody></table>

</div></div></div>Monitoring should distinguish between:

<div id="bkmrk-gateway-unavailable." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Gateway unavailable.
- WireGuard handshake unavailable.
- Tunnel routing unavailable.
- Traefik unavailable.
- Individual application unavailable.

---

</div>## Common Failure Scenarios

### Handshake Is Missing

Possible causes:

<div id="bkmrk-vps-is-down.-home-in" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- VPS is down.
- Home internet connection is down.
- Gateway is down.
- WireGuard service is stopped.
- UDP port is blocked.
- Peer endpoint changed.
- Public key mismatch.
- Private key was changed.
- Allowed IPs are incorrect.

</div>### Handshake Exists but Applications Fail

Possible causes:

<div id="bkmrk-ip-forwarding-is-dis" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- IP forwarding is disabled.
- Forwarding firewall rule is missing.
- NAT rule is missing.
- Traefik is unavailable.
- Traefik address changed.
- Destination firewall denies the gateway.
- Return traffic follows the wrong path.
- VPS forwarding configuration is incorrect.

</div>### Internal Applications Work but Public Applications Fail

This usually indicates a problem with:

<div id="bkmrk-public-dns.-vps.-wir" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Public DNS.
- VPS.
- WireGuard.
- Gateway forwarding.
- VPS or home-end firewalling.

</div>### One Public Application Fails

If other public applications work, the tunnel is probably healthy.

Check:

<div id="bkmrk-traefik-router.-cert" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Traefik router.
- Certificate.
- Backend address.
- Backend firewall.
- Application health.

</div>### Tunnel Stops After a Power Failure

Check startup order:

<div id="bkmrk-confirm-the-gateway-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Confirm the gateway booted.
2. Confirm WireGuard started.
3. Confirm the network interface has its LAN address.
4. Confirm the VPS peer.
5. Confirm forwarding.
6. Confirm firewall rules loaded.
7. Confirm a new handshake.
8. Confirm Traefik is available.

---

</div>## Troubleshooting Order

When public ingress fails:

<div id="bkmrk-confirm-the-vps-is-r" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Confirm the VPS is running.
2. Confirm the WireGuard gateway is running.
3. Confirm the gateway LAN IP is `192.168.2.64`.
4. Confirm the WireGuard interface exists.
5. Confirm the latest handshake.
6. Confirm transfer counters.
7. Confirm IPv4 forwarding.
8. Confirm forwarding firewall rules.
9. Confirm NAT rules.
10. Confirm Traefik at `192.168.2.182`.
11. Test a Traefik backend directly.
12. Test the public hostname externally.
13. Review logs before changing keys.

</div>Do not regenerate WireGuard keys as an early troubleshooting step.

<div id="bkmrk--12" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Logging

Useful log sources include:

<div id="bkmrk-wireguard-service-jo" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- WireGuard service journal.
- System journal.
- UFW logs.
- Kernel network logs.
- Traefik access logs.
- VPS firewall logs.

</div>Review the WireGuard unit using:

`journalctl -u wg-quick@wg0 --since "30 minutes ago" --no-pager`

Replace the interface name if necessary.

Look for:

<div id="bkmrk-interface-startup-fa" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Interface startup failures.
- Invalid configuration syntax.
- Address conflicts.
- Missing commands.
- Firewall command failures.
- Route conflicts.

---

</div>## Configuration Backup

Protect the following gateway data:

<div id="bkmrk-wireguard-configurat" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- WireGuard configuration.
- Private key.
- Public key.
- Peer definitions.
- Firewall rules.
- NAT rules.
- Sysctl forwarding configuration.
- SSH configuration.
- Authorized SSH keys.
- Network configuration.
- Recovery notes.

</div>The VM or LXC is included in the Proxmox backup system.

The WireGuard private key should also exist in an encrypted recovery location.

Do not put the private key directly into BookStack.

<div id="bkmrk--13" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Recovery Procedure

If the gateway VM or LXC is corrupted:

<div id="bkmrk-use-proxmox-to-ident" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Use Proxmox to identify the most recent good backup.
2. Restore under a temporary guest ID if testing is required.
3. Keep the restored guest disconnected from the LAN during initial inspection.
4. Verify the WireGuard configuration and private key.
5. Verify the LAN address.
6. Verify forwarding and firewall rules.
7. Shut down the failed production guest.
8. Assign the expected production identity and network configuration.
9. Start the replacement.
10. Confirm a WireGuard handshake.
11. Confirm Traefik reachability.
12. Test an application externally.

</div>If the key is unavailable:

<div id="bkmrk-generate-a-new-gatew" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Generate a new gateway key pair.
2. Update the VPS peer with the new gateway public key.
3. Preserve the VPS key.
4. Restart the WireGuard interfaces.
5. Confirm the new handshake.
6. Store the new private key securely.

---

</div>## Security Checklist

<div id="bkmrk-wireguard-private-ke" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- WireGuard private key is not stored in BookStack.
- VPS and gateway use unique private keys.
- Allowed IPs are narrow.
- Public UDP exposure is limited to the WireGuard port.
- SSH uses keys.
- SSH is restricted to approved sources.
- IPv4 forwarding is enabled only because routing is required.
- NAT rules are narrow.
- VPS access to the LAN is limited.
- Proxmox is not publicly reachable.
- Pi-hole administration is not publicly reachable.
- AIO management is not publicly reachable.
- Docker API is not exposed.
- Backup coverage is active.
- Recovery keys are stored securely.

---

</div>## Validation Checklist

<div id="bkmrk-gateway-is-running.-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Gateway is running.
- LAN address is `192.168.2.64`.
- WireGuard interface is active.
- VPS peer is listed.
- Latest handshake is recent.
- Transfer counters increase.
- IP forwarding is enabled.
- Required routes exist.
- Required firewall rules exist.
- NAT rules are active where needed.
- Traefik at `192.168.2.182` is reachable.
- Public Authentik works externally.
- Public Nextcloud works externally.
- Internal split-DNS access still works without the VPS.
- Proxmox backup includes the gateway.
- WireGuard recovery material is stored securely.

---

</div>## Document Control

<div id="bkmrk-owner%3A-bryan-gagne-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- **Owner:** Bryan Gagne-Plante
- **Private address:** `192.168.2.64`
- **Primary role:** VPS-to-home WireGuard gateway
- **Public peer:** VPS at `38.29.213.101`
- **Guest type:** Confirm VM or LXC
- **Guest ID:** Confirm current ID
- **WireGuard interface:** Confirm current interface name
- **Listen port:** Confirm current WireGuard UDP port
- **Tunnel subnet:** Confirm current tunnel subnet
- **Last verified:** YYYY-MM-DD
- **Last handshake test:** YYYY-MM-DD
- **Last external ingress test:** YYYY-MM-DD
- **Last restore test:** YYYY-MM-DD
- **Known limitation:** External application access depends on one VPS-to-home WireGuard tunnel

</div>

# Pi-hole

## Purpose

Pi-hole provides DNS services for the Bytek home network.

Pi-hole is responsible for:

<div id="bkmrk-resolving-public-int" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Resolving public internet hostnames.
- Blocking selected advertising and tracking domains.
- Providing split-DNS records for Bytek applications.
- Providing DHCP reservations for infrastructure guests.
- Directing internal application traffic to Traefik.
- Resolving the private Proxmox hostname.
- Providing DNS to selected Docker containers.

</div>Pi-hole is foundational infrastructure. Pi-hole must remain accessible independently of Traefik and Authentik so DNS can be repaired during an application or identity outage.

<div id="bkmrk-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Service Information

<div id="bkmrk-setting-value-servic" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Service name</td><td>Pi-hole</td></tr><tr><td>Private IP address</td><td>`192.168.2.65`</td></tr><tr><td>LAN subnet</td><td>`192.168.2.0/24`</td></tr><tr><td>DNS ports</td><td>TCP and UDP 53</td></tr><tr><td>Primary role</td><td>LAN DNS and split DNS</td></tr><tr><td>Secondary role</td><td>DHCP reservations</td></tr><tr><td>Management scope</td><td>Home LAN or trusted VPN</td></tr><tr><td>Authentication</td><td>Local Pi-hole credentials</td></tr><tr><td>Proxmox guest type</td><td>LXC</td></tr><tr><td>Proxmox guest ID</td><td>Confirm current CT ID</td></tr><tr><td>Backup coverage</td><td>Proxmox scheduled backup</td></tr></tbody></table>

</div></div>---

</div>## Architecture Role

Pi-hole provides DNS to home-LAN clients and selected infrastructure containers.

When a LAN device opens a Bytek application:

<div id="bkmrk-the-device-asks-pi-h" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. The device asks Pi-hole to resolve the application hostname.
2. Pi-hole returns Traefik’s private address, `192.168.2.182`.
3. The client connects directly to Traefik.
4. Traefik routes the request to the correct private application backend.

</div>This allows the same hostname and HTTPS certificate to be used internally and externally.

Pi-hole is not part of the public application path for external users.

External users resolve Bytek applications through WHC public DNS instead.

<div id="bkmrk--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## DNS Responsibilities

Pi-hole provides two types of DNS resolution.

### Public Internet Resolution

Pi-hole forwards normal public DNS queries to its configured upstream resolvers.

Examples include:

<div id="bkmrk-software-repositorie" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Software repositories.
- Linux package mirrors.
- Let’s Encrypt.
- Docker registries.
- Public websites.
- Public APIs.

</div>### Local Bytek Resolution

Pi-hole answers selected Bytek application hostnames using private addresses.

These local records create the split-DNS design.

<div id="bkmrk--2" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Split-DNS Records

<div id="bkmrk-hostname-internal-de" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Hostname</th><th>Internal Destination</th><th>Purpose</th></tr><tr><td>`cloud.bytek.ca`</td><td>`192.168.2.182`</td><td>Nextcloud through Traefik</td></tr><tr><td>`docs.bytek.ca`</td><td>`192.168.2.182`</td><td>BookStack through Traefik</td></tr><tr><td>`portal.bytek.ca`</td><td>`192.168.2.182`</td><td>Authentik through Traefik</td></tr><tr><td>`projects.bytek.ca`</td><td>`192.168.2.182`</td><td>Vikunja through Traefik</td></tr><tr><td>`proxy.bytek.ca`</td><td>`192.168.2.182`</td><td>Traefik dashboard</td></tr><tr><td>`status.bytek.ca`</td><td>`192.168.2.182`</td><td>Uptime Kuma through Traefik</td></tr><tr><td>`pve.bytek.ca`</td><td>`192.168.2.254`</td><td>Direct Proxmox management</td></tr></tbody></table>

</div></div></div>Application hostnames point internally to Traefik.

Proxmox is the exception because Proxmox does not sit behind Traefik.

<div id="bkmrk--3" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Public and Private DNS Comparison

<div id="bkmrk-hostname-public-whc-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Hostname</th><th>Public WHC Result</th><th>Internal Pi-hole Result</th></tr><tr><td>`cloud.bytek.ca`</td><td>`38.29.213.101`</td><td>`192.168.2.182`</td></tr><tr><td>`docs.bytek.ca`</td><td>`38.29.213.101`</td><td>`192.168.2.182`</td></tr><tr><td>`portal.bytek.ca`</td><td>`38.29.213.101`</td><td>`192.168.2.182`</td></tr><tr><td>`projects.bytek.ca`</td><td>`38.29.213.101`</td><td>`192.168.2.182`</td></tr><tr><td>`proxy.bytek.ca`</td><td>`38.29.213.101`</td><td>`192.168.2.182`</td></tr><tr><td>`status.bytek.ca`</td><td>`38.29.213.101`</td><td>`192.168.2.182`</td></tr><tr><td>`pve.bytek.ca`</td><td>No public record</td><td>`192.168.2.254`</td></tr></tbody></table>

</div></div></div>The split-DNS model provides:

<div id="bkmrk-lower-latency-for-la" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Lower latency for LAN clients.
- No unnecessary traffic through the VPS.
- No dependency on router hairpin NAT.
- Consistent application URLs.
- Consistent OIDC callback addresses.
- Valid HTTPS certificates on internal connections.

---

</div>## Proxmox DNS Exception

The Proxmox host intentionally does not use Pi-hole as its general DNS resolver.

Proxmox uses:

<div id="bkmrk-dns-resolver%3A-9.9.9." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- **DNS resolver:** `9.9.9.9`

</div>This prevents the hypervisor from depending on a guest LXC for DNS.

As a result:

<div id="bkmrk-lan-clients-resolve-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- LAN clients resolve `portal.bytek.ca` to `192.168.2.182`.
- Proxmox normally resolves `portal.bytek.ca` to the VPS at `38.29.213.101`.

</div>Do not change the Proxmox resolver to Pi-hole without reviewing the dependency impact.

If Proxmox eventually needs a direct local route to Authentik, use a specific `/etc/hosts` entry for `portal.bytek.ca` instead of replacing the general resolver.

<div id="bkmrk--4" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## DHCP Reservations

Infrastructure guests should receive stable addresses through DHCP reservations.

Reservations are based on the virtual NIC MAC address assigned by Proxmox.

### Known Reservations

<div id="bkmrk-service-reserved-add" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Service</th><th>Reserved Address</th></tr><tr><td>Nextcloud AIO</td><td>`192.168.2.100`</td></tr><tr><td>Uptime Kuma</td><td>`192.168.2.115`</td></tr><tr><td>Vikunja</td><td>`192.168.2.121`</td></tr><tr><td>Authentik</td><td>`192.168.2.162`</td></tr><tr><td>Traefik</td><td>`192.168.2.182`</td></tr><tr><td>BookStack</td><td>Confirm current address</td></tr><tr><td>Plex</td><td>Confirm after deployment</td></tr><tr><td>Future game server</td><td>Confirm after deployment</td></tr></tbody></table>

</div></div></div>The WireGuard gateway uses `192.168.2.64`.

Confirm whether the WireGuard address is configured through a reservation or static guest networking before editing it.

<div id="bkmrk--5" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Why Stable Addresses Matter

Infrastructure addresses are referenced by:

<div id="bkmrk-traefik-backend-defi" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Traefik backend definitions.
- Proxmox firewall rules.
- Uptime Kuma monitors.
- Authentik Proxy Providers.
- Docker DNS settings.
- BookStack documentation.
- Administrative bookmarks.
- WireGuard forwarding rules.
- Application trusted-proxy settings.

</div>An unexpected address change can break several services simultaneously.

Always reserve a service address before treating the address as permanent.

<div id="bkmrk--6" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Finding a Guest MAC Address

For a Proxmox VM, inspect the `net0` entry using:

`qm config <VMID>`

For an LXC, inspect the network entry using:

`pct config <CTID>`

Record the MAC address in Pi-hole when creating the reservation.

Do not manually duplicate a MAC address between guests.

<div id="bkmrk--7" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## DNS Clients

Pi-hole may provide DNS to:

<div id="bkmrk-windows-workstations" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Windows workstations.
- Linux workstations.
- Mobile devices on the LAN.
- Service VMs.
- Service LXCs.
- Selected Docker containers.
- Future remote VPN clients.
- Uptime Kuma.
- Traefik.
- Nextcloud application containers.
- BookStack.
- Vikunja.

</div>Not every infrastructure host must use Pi-hole.

Proxmox intentionally uses Quad9.

Other critical systems may also use an independent resolver if avoiding a dependency on Pi-hole is more important than split-DNS access.

<div id="bkmrk--8" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Docker DNS

Some application containers require explicit Pi-hole DNS.

This is particularly important for containers that must resolve private Bytek hostnames.

### Traefik

The Traefik container explicitly uses:

<div id="bkmrk-192.168.2.65" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `192.168.2.65`

</div>This was added after Docker’s embedded resolver failed to resolve the Let’s Encrypt ACME endpoint following a power interruption.

### Uptime Kuma

The Uptime Kuma container explicitly uses:

<div id="bkmrk-192.168.2.65-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `192.168.2.65`

</div>This allows Kuma to monitor private Bytek application hostnames.

### BookStack

BookStack may use Pi-hole explicitly so the container can resolve Authentik at `portal.bytek.ca`.

### Nextcloud

Nextcloud containers must be able to resolve `portal.bytek.ca` for Authentik OIDC.

If the host resolves a name but the container does not, inspect the container’s Docker DNS configuration.

<div id="bkmrk--9" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Docker DNS Validation

Confirm a container’s configured DNS servers using:

`sudo docker inspect --format='DNS={{json .HostConfig.Dns}}' <container-name>`

Test hostname resolution from inside a container using:

`sudo docker exec <container-name> getent hosts portal.bytek.ca`

Expected internal result:

<div id="bkmrk-portal.bytek.ca-reso" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `portal.bytek.ca` resolves to `192.168.2.182`.

</div>If the command returns no output, container DNS is failing.

Do not change OIDC client IDs or secrets before DNS is proven healthy.

<div id="bkmrk--10" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Browser DNS Over HTTPS

Firefox-based browsers, including Zen, can bypass Pi-hole through DNS over HTTPS.

This previously prevented access to:

<div id="bkmrk-pve.bytek.ca" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `pve.bytek.ca`

</div>Pi-hole correctly resolved the private hostname, but Zen attempted to use protected public DNS instead.

Recommended setting:

<div id="bkmrk-dns-over-https%3A-off-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- **DNS over HTTPS:** Off or Default Protection.

</div>If a private hostname works by IP but not by name:

<div id="bkmrk-check-the-hostname-f" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Check the hostname from the operating system.
2. Query Pi-hole directly.
3. Disable forced browser DNS over HTTPS.
4. Clear the operating-system DNS cache.
5. Clear the browser DNS cache.
6. Close idle browser sockets.
7. Restart the browser.

</div>Useful Windows commands include:

<div id="bkmrk-resolve-dnsname-pve." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `Resolve-DnsName pve.bytek.ca`
- `nslookup pve.bytek.ca 192.168.2.65`
- `Clear-DnsClientCache`
- `ipconfig /flushdns`

---

</div>## DNS Validation

### Test an Internal Application Record

Use:

`nslookup portal.bytek.ca 192.168.2.65`

Expected result:

<div id="bkmrk-portal.bytek.ca-reso-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `portal.bytek.ca` resolves to `192.168.2.182`.

</div>### Test Proxmox Resolution

Use:

`nslookup pve.bytek.ca 192.168.2.65`

Expected result:

<div id="bkmrk-pve.bytek.ca-resolve" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `pve.bytek.ca` resolves to `192.168.2.254`.

</div>### Test Public Resolution

Use:

`nslookup google.com 192.168.2.65`

Expected result:

<div id="bkmrk-one-or-more-public-a" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- One or more public addresses are returned.

</div>### Test DNS Over TCP

Use:

`nc -zv -w 3 192.168.2.65 53`

### Test DNS Over UDP

Use:

`nc -zvu -w 3 192.168.2.65 53`

Both TCP and UDP DNS should be available to approved LAN clients.

<div id="bkmrk--11" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Service Health

Confirm that the Pi-hole LXC is running from Proxmox.

Confirm the guest address using:

`ip -br -4 addr`

Confirm DNS listeners using:

`ss -lntup | grep ':53'`

Confirm the Pi-hole DNS service using the appropriate service command for the installed Pi-hole version.

Review recent service logs if DNS queries fail.

<div id="bkmrk--12" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Management Access

Pi-hole management should remain private.

Approved access paths include:

<div id="bkmrk-home-lan.-trusted-re" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Home LAN.
- Trusted remote-access VPN.
- Proxmox console.
- SSH from an approved administrative source.

</div>Do not route Pi-hole administration through:

<div id="bkmrk-the-public-vps.-trae" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- The public VPS.
- Traefik public HTTPS.
- Authentik ForwardAuth.
- A public WHC hostname.
- Direct Bell router port forwarding.

---

</div>## Why Pi-hole Is Not Behind Authentik

Pi-hole is part of the dependency chain for internal Authentik and application resolution.

If Pi-hole management depended on Authentik, the following circular failure could occur:

<div id="bkmrk-pi-hole-dns-fails.-a" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Pi-hole DNS fails.
2. Authentik’s hostname stops resolving internally.
3. Authentik login fails.
4. Pi-hole administration is protected by Authentik.
5. The administrator cannot reach Pi-hole to repair DNS.

</div>Pi-hole therefore uses local credentials and private network access.

<div id="bkmrk--13" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Upstream DNS

Pi-hole forwards non-local queries to configured upstream resolvers.

The chosen upstream resolver configuration should be documented after verification.

When changing upstream DNS:

<div id="bkmrk-record-the-current-c" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Record the current configuration.
2. Change only one resolver setting at a time.
3. Test public DNS.
4. Test internal local records.
5. Test DNSSEC if enabled.
6. Test IPv4 and IPv6 behavior separately.
7. Confirm application containers still resolve external services.

</div>Do not assume that an upstream failure means Pi-hole itself is unavailable.

<div id="bkmrk--14" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## IPv6 Considerations

The Bytek homelab mainly uses IPv4 addressing.

If IPv6 is not intentionally configured end to end:

<div id="bkmrk-avoid-publishing-uni" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Avoid publishing unintended AAAA records.
- Verify clients are not receiving an unusable IPv6 DNS path.
- Check browser connection behavior.
- Check whether applications prefer IPv6 before IPv4.
- Document any intentional IPv6 disabling.

</div>An incorrect public AAAA record can cause clients to attempt an unavailable path before falling back to IPv4.

<div id="bkmrk--15" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Firewall Policy

Pi-hole must accept DNS from approved clients.

Typical requirements include:

<div id="bkmrk-lan-clients-to-tcp-5" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- LAN clients to TCP 53.
- LAN clients to UDP 53.
- Approved Docker hosts to TCP and UDP 53.
- Future VPN clients to TCP and UDP 53.
- Administrative SSH from approved LAN sources.
- Private management access from the LAN.

</div>Avoid exposing DNS publicly.

A publicly accessible recursive DNS resolver can be abused.

The Bell router must not forward public TCP or UDP port 53 to Pi-hole.

<div id="bkmrk--16" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Monitoring

Recommended Uptime Kuma monitors include:

<div id="bkmrk-monitor-target-pi-ho" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Monitor</th><th>Target</th></tr><tr><td>Pi-hole guest</td><td>Ping `192.168.2.65`</td></tr><tr><td>Pi-hole DNS UDP</td><td>`192.168.2.65:53`</td></tr><tr><td>Pi-hole DNS TCP</td><td>`192.168.2.65:53`</td></tr><tr><td>Internal Authentik record</td><td>`portal.bytek.ca`</td></tr><tr><td>Internal Proxmox record</td><td>`pve.bytek.ca`</td></tr><tr><td>Public DNS resolution</td><td>Selected external hostname</td></tr></tbody></table>

</div></div></div>Monitoring should distinguish between:

<div id="bkmrk-guest-unavailable.-d" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Guest unavailable.
- DNS service unavailable.
- Internal records unavailable.
- Public forwarding unavailable.
- Upstream DNS unavailable.

---

</div>## Common Failure Scenarios

### Pi-hole Guest Is Down

Symptoms:

<div id="bkmrk-internal-hostnames-f" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Internal hostnames fail.
- Containers using Pi-hole cannot resolve names.
- Uptime Kuma reports several services down.
- Browser applications may fail internally.

</div>Check:

<div id="bkmrk-proxmox-guest-status" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Proxmox guest status.
- LXC startup.
- Guest network address.
- Pi-hole service.
- Backup availability.

</div>### Public DNS Fails but Local Records Work

Possible causes:

<div id="bkmrk-upstream-resolver-un" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Upstream resolver unavailable.
- Internet outage.
- DNSSEC issue.
- Firewall blocking outbound DNS.
- Incorrect upstream configuration.

</div>### Local Records Fail but Public DNS Works

Possible causes:

<div id="bkmrk-local-record-deleted" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Local record deleted.
- Typographical error.
- Different Pi-hole instance answering.
- Client using another DNS server.
- Browser DNS over HTTPS.
- Cached stale record.

</div>### VM Host Resolves but Container Does Not

Possible causes:

<div id="bkmrk-docker-embedded-dns-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Docker embedded DNS issue.
- Container started before Pi-hole.
- Explicit Docker DNS is missing.
- Docker network is unhealthy.
- Guest firewall blocks DNS.

</div>Recovery may require recreating the container after Pi-hole is working.

### One Host Uses the Wrong Address

Possible causes:

<div id="bkmrk-client-dns-cache.-br" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Client DNS cache.
- Browser DNS cache.
- Forced DNS over HTTPS.
- Public resolver used instead of Pi-hole.
- Hosts-file override.
- Multiple active network adapters.
- VPN DNS override.

---

</div>## Power-Failure Recovery

After an electrical outage, Pi-hole should start before applications that depend on split DNS.

Recommended validation order:

<div id="bkmrk-confirm-proxmox-is-r" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Confirm Proxmox is running.
2. Confirm the Pi-hole LXC started.
3. Confirm Pi-hole owns `192.168.2.65`.
4. Confirm TCP and UDP port 53.
5. Confirm one local record.
6. Confirm one public hostname.
7. Start or validate Traefik.
8. Validate Authentik.
9. Restart affected containers whose DNS remained broken.
10. Confirm Uptime Kuma monitors recover.

</div>Application containers may need to be recreated or restarted if Docker cached a broken DNS path during startup.

<div id="bkmrk--17" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Backup

The Pi-hole LXC is included in the Proxmox scheduled backup job.

The backup should preserve:

<div id="bkmrk-pi-hole-configuratio" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Pi-hole configuration.
- Local DNS records.
- DHCP reservations.
- Adlists.
- Allow and deny lists.
- Custom DNS settings.
- Network configuration.
- Administrative configuration.

</div>A Pi-hole configuration export may be maintained in addition to the Proxmox backup.

The export should be stored securely because it may contain internal network details.

<div id="bkmrk--18" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Recovery Procedure

If Pi-hole is unavailable:

<div id="bkmrk-open-proxmox-using-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Open Proxmox using `192.168.2.254` if private DNS is unavailable.
2. Confirm the Pi-hole LXC is running.
3. Open the LXC console.
4. Confirm the interface owns `192.168.2.65`.
5. Confirm the default route.
6. Confirm TCP and UDP port 53.
7. Confirm the Pi-hole DNS service.
8. Test a local record from inside the LXC.
9. Test a public record.
10. Review logs.
11. Restore from a Proxmox backup if the configuration is damaged.

</div>If Pi-hole is restored under a temporary CT ID:

<div id="bkmrk-keep-the-restored-co" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Keep the restored container disconnected from the live LAN initially.
- Verify the configuration.
- Do not run two Pi-hole instances with the same IP.
- Shut down the failed instance before activating the restored one.

---

</div>## Address-Change Procedure

Changing Pi-hole’s address would affect most of the environment.

Before changing `192.168.2.65`:

<div id="bkmrk-document-the-current" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Document the current state.
2. Update the Bell router or DHCP DNS settings.
3. Update Docker Compose files with explicit DNS.
4. Update Uptime Kuma.
5. Update future VPN client DNS.
6. Update firewall rules.
7. Update service documentation.
8. Flush client DNS caches.
9. Recreate containers that use explicit Docker DNS.
10. Test all split-DNS applications.

</div>Avoid changing Pi-hole’s address unless required.

<div id="bkmrk--19" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Security Checklist

<div id="bkmrk-pi-hole-management-i" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Pi-hole management is LAN or VPN only.
- Public TCP and UDP port 53 are not forwarded.
- Local administrator credentials are stored securely.
- SSH uses key-based authentication.
- DNS access is limited to approved networks.
- Local DNS records contain only intended hostnames.
- Proxmox does not depend on Pi-hole.
- Pi-hole is not behind Authentik.
- Backups include the Pi-hole LXC.
- A configuration export exists or is planned.
- Browser DNS over HTTPS behavior is documented.
- Upstream DNS settings are documented.
- Recovery by private IP has been tested.

---

</div>## Validation Checklist

<div id="bkmrk-pi-hole-lxc-is-runni" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Pi-hole LXC is running.
- Pi-hole owns `192.168.2.65`.
- TCP port 53 responds.
- UDP port 53 responds.
- Public names resolve.
- Internal hostnames resolve to Traefik.
- `pve.bytek.ca` resolves directly to Proxmox.
- No public WHC record exists for `pve.bytek.ca`.
- Traefik containers can use Pi-hole.
- Uptime Kuma can use Pi-hole.
- Nextcloud can resolve Authentik.
- BookStack can resolve Authentik.
- Vikunja can resolve Authentik.
- DNS over HTTPS is not bypassing Pi-hole on administrative browsers.
- Proxmox backup includes Pi-hole.

---

</div>## Document Control

<div id="bkmrk-owner%3A-bryan-gagne-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- **Owner:** Bryan Gagne-Plante
- **Private address:** `192.168.2.65`
- **Primary role:** LAN DNS and split DNS
- **Secondary role:** DHCP reservations
- **Guest type:** LXC
- **Guest ID:** Confirm current CT ID
- **Management scope:** LAN or trusted VPN
- **Upstream resolvers:** Confirm current configuration
- **Last verified:** YYYY-MM-DD
- **Last DNS recovery test:** YYYY-MM-DD
- **Last backup test:** YYYY-MM-DD
- **Last configuration export:** YYYY-MM-DD
- **Known limitations:** Internal application resolution depends on one Pi-hole instance

</div>

# Traefik

## Purpose

Traefik is the central HTTPS reverse proxy for the Bytek homelab.

Traefik receives HTTPS requests, selects the correct application according to the requested hostname, and forwards the request to the appropriate private backend.

Traefik provides:

<div id="bkmrk-https-termination.-h" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- HTTPS termination.
- Hostname-based routing.
- Let’s Encrypt certificate issuance and renewal.
- ACME DNS-01 validation through the WHC cPanel API.
- Routing to private application backends.
- Authentik ForwardAuth for selected administrative services.
- A dashboard for routers, services, middlewares, and certificates.
- Consistent internal and external application URLs.
- Protection of private backend addresses from direct public exposure.

---

</div>## Service Information

<div id="bkmrk-setting-value-servic" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Service name</td><td>Traefik</td></tr><tr><td>Private IP address</td><td>`192.168.2.182`</td></tr><tr><td>HTTPS entry point</td><td>TCP 443</td></tr><tr><td>Public dashboard hostname</td><td>`proxy.bytek.ca`</td></tr><tr><td>Deployment directory</td><td>`/opt/traefik`</td></tr><tr><td>Container DNS</td><td>`192.168.2.65`</td></tr><tr><td>Certificate authority</td><td>Let’s Encrypt</td></tr><tr><td>ACME challenge type</td><td>DNS-01</td></tr><tr><td>DNS automation</td><td>WHC cPanel API</td></tr><tr><td>Normal dashboard authentication</td><td>Authentik ForwardAuth</td></tr><tr><td>Secondary dashboard authentication</td><td>Basic Auth while retained</td></tr><tr><td>Backup coverage</td><td>Proxmox scheduled backup</td></tr><tr><td>Proxmox VM ID</td><td>Confirm current VM ID</td></tr></tbody></table>

</div></div></div>Dashboard:

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">[Open the Traefik Dashboard](https://proxy.bytek.ca/)</span>

<div id="bkmrk-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Architecture Role

Traefik is the common application-routing layer for both external and internal clients.

### External Request Path

<div id="bkmrk-whc-public-dns-resol" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. WHC public DNS resolves the application hostname to the VPS at `38.29.213.101`.
2. The VPS receives HTTPS traffic.
3. The VPS forwards the traffic through WireGuard.
4. The home WireGuard gateway sends the request to Traefik at `192.168.2.182`.
5. Traefik examines the requested hostname.
6. Traefik forwards the request to the matching private backend.

</div>### Internal Request Path

<div id="bkmrk-a-lan-client-queries" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. A LAN client queries Pi-hole.
2. Pi-hole resolves the application hostname to `192.168.2.182`.
3. The client connects directly to Traefik.
4. Traefik forwards the request to the matching private backend.

</div>The same application hostname is used internally and externally.

<div id="bkmrk--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Application Routing Reference

<div id="bkmrk-hostname-backend-des" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Hostname</th><th>Backend Destination</th><th>Authentication</th></tr><tr><td>`portal.bytek.ca`</td><td>`192.168.2.162:9000`</td><td>Authentik native authentication</td></tr><tr><td>`cloud.bytek.ca`</td><td>`192.168.2.100:11000`</td><td>Nextcloud native OIDC</td></tr><tr><td>`projects.bytek.ca`</td><td>`192.168.2.121:3456`</td><td>Vikunja native OIDC</td></tr><tr><td>`docs.bytek.ca`</td><td>BookStack private IP on TCP 6875</td><td>BookStack native OIDC</td></tr><tr><td>`status.bytek.ca`</td><td>Uptime Kuma or Authentik embedded outpost</td><td>Authentik Proxy Provider</td></tr><tr><td>`proxy.bytek.ca`</td><td>Traefik internal dashboard service</td><td>Authentik ForwardAuth</td></tr></tbody></table>

</div></div></div>The BookStack private address must be confirmed and added to this page.

<div id="bkmrk--2" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Configuration Locations

<div id="bkmrk-purpose-location-doc" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Purpose</th><th>Location</th></tr><tr><td>Docker Compose file</td><td>`/opt/traefik/compose.yml`</td></tr><tr><td>Static Traefik configuration</td><td>`/opt/traefik/traefik.yml`</td></tr><tr><td>Environment variables</td><td>`/opt/traefik/.env`</td></tr><tr><td>Dynamic configuration</td><td>`/opt/traefik/dynamic/`</td></tr><tr><td>Certificate state</td><td>`/opt/traefik/data/acme.json`</td></tr><tr><td>Traefik log</td><td>`/opt/traefik/logs/traefik.log`</td></tr><tr><td>Access log</td><td>Confirm current path</td></tr><tr><td>Additional persistent data</td><td>`/opt/traefik/data/`</td></tr></tbody></table>

</div></div></div>The exact certificate and log paths should be confirmed against the current Compose file before relying on them during recovery.

<div id="bkmrk--3" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Dynamic Configuration

Each application normally has its own dynamic configuration file.

Known files include:

<div id="bkmrk-file-purpose-authent" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>File</th><th>Purpose</th></tr><tr><td>`authentik.yml`</td><td>Authentik router and service</td></tr><tr><td>`authentik-forwardauth.yml`</td><td>Shared Authentik middleware and outpost service</td></tr><tr><td>`bookstack.yml`</td><td>BookStack router and service</td></tr><tr><td>`dashboard.yml`</td><td>Traefik dashboard router</td></tr><tr><td>`nextcloud.yml`</td><td>Nextcloud router and service</td></tr><tr><td>`uptime-kuma.yml`</td><td>Uptime Kuma router and service</td></tr><tr><td>`vikunja.yml`</td><td>Vikunja router and service</td></tr></tbody></table>

</div></div></div>Separating services into individual files makes configuration changes easier to review and reverse.

Before editing a working file:

<div id="bkmrk-create-a-dated-or-de" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Create a dated or descriptive backup copy.
2. Change only the required section.
3. Validate the YAML indentation.
4. Check the Traefik log.
5. Test the route locally.
6. Test the route from the LAN.
7. Test the route externally if the service is public.
8. Remove obsolete backup files after the change is documented.

---

</div>## Static Configuration

The static Traefik configuration defines platform-level settings such as:

<div id="bkmrk-entry-points.-file-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Entry points.
- File-provider location.
- Dashboard availability.
- Logging.
- Access logging.
- Certificate resolvers.
- ACME settings.
- Trusted forwarded headers.
- Provider behavior.

</div>Static configuration changes normally require a Traefik container restart or recreation.

Dynamic routing changes are usually detected automatically by the file provider when file watching is enabled.

<div id="bkmrk--4" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Docker DNS

The Traefik container explicitly uses Pi-hole at `192.168.2.65`.

This configuration was added after Docker’s embedded resolver failed to resolve the Let’s Encrypt ACME API following a power interruption.

The observed error reported that the Docker resolver at `127.0.0.11` was misbehaving.

Explicit Pi-hole DNS allows Traefik to resolve:

<div id="bkmrk-let%E2%80%99s-encrypt-endpoi" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Let’s Encrypt endpoints.
- WHC API endpoints.
- Internal Bytek hostnames.
- External Docker and operating-system dependencies.

</div>Verify the configured Docker DNS using:

`sudo docker inspect --format='DNS={{json .HostConfig.Dns}}' traefik`

Expected result:

<div id="bkmrk-192.168.2.65-appears" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `192.168.2.65` appears in the DNS list.

</div>The container’s internal resolver file may still show Docker’s embedded resolver at `127.0.0.11`.

That is normal when Docker forwards requests to the explicitly configured upstream DNS server.

<div id="bkmrk--5" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Container Management

Move to the deployment directory before running Compose commands:

`cd /opt/traefik`

Check the stack:

`sudo docker compose ps`

View recent logs:

`sudo docker compose logs --tail 100 traefik`

Follow logs live:

`sudo docker compose logs -f traefik`

Validate the Compose file:

`sudo docker compose config --quiet`

Apply normal Compose changes:

`sudo docker compose up -d`

Recreate Traefik after changing container-level settings such as DNS:

`sudo docker compose up -d --force-recreate traefik`

Restart Traefik after a static configuration change:

`sudo docker compose restart traefik`

A normal restart does not apply changes to Docker-level settings such as container DNS, network mode, volume mounts, or environment variables. Those changes require container recreation.

<div id="bkmrk--6" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Naming and Routing Standard

Every Traefik application should have:

<div id="bkmrk-a-descriptive-router" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- A descriptive router name.
- A descriptive service name.
- A hostname rule.
- The `websecure` entry point.
- TLS enabled.
- The correct certificate resolver.
- A private backend destination.
- Host-header forwarding where required.
- Authentication middleware only when appropriate.

</div>A route should not contain Authentik ForwardAuth if the application already uses native OIDC and requires direct API or client access.

<div id="bkmrk--7" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Applications That Must Not Use ForwardAuth

Do not attach Authentik ForwardAuth to:

<div id="bkmrk-nextcloud.-vikunja.-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Nextcloud.
- Vikunja.
- BookStack.
- Authentik itself.
- Proxmox VE.
- Nextcloud AIO management.
- Plex.
- Game-server traffic.

</div>### Nextcloud

Nextcloud mobile clients, desktop clients, WebDAV, CalDAV, CardDAV, and application authentication must reach Nextcloud directly.

Nextcloud uses native OIDC.

### Vikunja

Vikunja uses native Authentik OIDC.

### BookStack

BookStack uses native Authentik OIDC.

### Authentik

Authentik must never depend on its own ForwardAuth middleware.

### Proxmox VE

Proxmox uses native OIDC and remains outside Traefik.

### Plex

Plex clients use Plex authentication and Plex-specific APIs.

<div id="bkmrk--8" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Applications That Use Authentik Proxy Integration

### Traefik Dashboard

The Traefik dashboard uses single-application ForwardAuth.

The dashboard request is validated by the Authentik embedded outpost before access is granted.

### Uptime Kuma

Uptime Kuma uses an Authentik Proxy Provider because Uptime Kuma does not provide the same native OIDC integration as the other applications.

Selected status-page and monitoring endpoints may bypass authentication when public access is intentionally required.

<div id="bkmrk--9" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Traefik Dashboard Authentication

The dashboard is available at:

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">[Open the Traefik Dashboard](https://proxy.bytek.ca/)</span>

Access is restricted by:

<div id="bkmrk-authentik-group-byte" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Authentik group `bytek-admin`.
- Authentik policy `Allow bytek.ca users`.
- Policy engine mode `ALL`.

</div>During the initial ForwardAuth validation, Traefik Basic Auth remains enabled as a second authentication layer.

The expected initial flow is:

<div id="bkmrk-the-administrator-op" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. The administrator opens `proxy.bytek.ca`.
2. Traefik invokes Authentik ForwardAuth.
3. Authentik validates the user and MFA.
4. Authentik checks the application bindings.
5. Traefik receives the authenticated request.
6. Traefik presents the existing Basic Auth challenge.
7. The administrator enters the Traefik Basic Auth credentials.
8. The dashboard opens.

</div>Basic Auth may be removed only after ForwardAuth and recovery procedures are fully tested.

<div id="bkmrk--10" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Authentik ForwardAuth Middleware

The ForwardAuth middleware sends authentication requests to the Authentik embedded outpost.

The outpost backend is hosted by Authentik at `192.168.2.162` on TCP port 9000.

The middleware should trust the forwarded request headers and return Authentik identity headers to the protected application.

Typical identity headers include:

<div id="bkmrk-authentik-username.-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Authentik username.
- Authentik group list.
- Authentik entitlements.
- Email address.
- Display name.
- User identifier.
- Provider metadata.
- Application metadata.
- Outpost metadata.

</div>Do not log full authentication headers in a location accessible to untrusted users.

<div id="bkmrk--11" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Authentik Outpost Callback Route

The path under `/outpost.goauthentik.io/` must remain reachable without the ForwardAuth middleware.

If the callback path is protected by the same middleware, an authentication loop can occur.

The callback router should:

<div id="bkmrk-match-proxy.bytek.ca" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Match `proxy.bytek.ca`.
- Match the `/outpost.goauthentik.io/` path prefix.
- Use the Authentik outpost service.
- Have a higher routing priority than the dashboard router.
- Use HTTPS.
- Avoid the dashboard ForwardAuth middleware.

</div>Test the outpost with:

`curl -k -I https://proxy.bytek.ca/outpost.goauthentik.io/ping`

Expected result:

<div id="bkmrk-http-204." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- HTTP 204.

</div>A normal browser link is not useful for this endpoint because an HTTP 204 response intentionally contains no page content.

<div id="bkmrk--12" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Certificate Management

Traefik obtains HTTPS certificates from Let’s Encrypt.

The current design uses:

<div id="bkmrk-acme.-dns-01-validat" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- ACME.
- DNS-01 validation.
- WHC cPanel API.
- Certificate resolver named `letsencrypt`.

</div>Each public router should reference the correct certificate resolver.

A router without the certificate resolver may use the Traefik default certificate instead of requesting the intended hostname certificate.

<div id="bkmrk--13" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## ACME DNS-01 Flow

Certificate issuance follows this sequence:

<div id="bkmrk-a-traefik-router-req" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. A Traefik router requests a certificate.
2. Traefik contacts the Let’s Encrypt ACME API.
3. Traefik creates the required DNS challenge through the WHC API.
4. Let’s Encrypt validates the challenge.
5. Traefik receives the certificate.
6. Traefik stores the certificate state in `acme.json`.
7. Traefik serves the certificate for the matching hostname.

</div>Traefik must have working DNS before this process can succeed.

<div id="bkmrk--14" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Certificate Storage

Certificate state is stored in:

`/opt/traefik/data/acme.json`

The file must:

<div id="bkmrk-remain-persistent-ac" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Remain persistent across container recreation.
- Have restrictive permissions.
- Be included in backups.
- Never be committed to a public repository.
- Never be pasted into BookStack.
- Never be deleted during routine troubleshooting.

</div>Deleting `acme.json` can remove all stored certificates and account state.

That may trigger unnecessary reissuance and certificate-rate-limit risk.

<div id="bkmrk--15" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Certificate Validation

Inspect a certificate served by Traefik using:

`openssl s_client -connect 127.0.0.1:443 -servername projects.bytek.ca </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates -ext subjectAltName`

Verify:

<div id="bkmrk-the-subject-or-subje" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- The subject or Subject Alternative Name contains the requested hostname.
- The issuer is Let’s Encrypt.
- The certificate is currently valid.
- The expiration date is reasonable.
- Traefik is not serving the default certificate.

</div>Repeat with the relevant hostname when validating another service.

<div id="bkmrk--16" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Certificate Troubleshooting

### Certificate Missing From the Dashboard

Check:

<div id="bkmrk-the-dynamic-router-e" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. The dynamic router exists.
2. The hostname rule is correct.
3. TLS is enabled.
4. The certificate resolver is named correctly.
5. Traefik DNS works.
6. The WHC API credentials work.
7. The ACME log contains the hostname.
8. The DNS challenge was validated.

</div>### ACME DNS Failure

A previously observed error reported:

<div id="bkmrk-failure-to-contact-t" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Failure to contact the Let’s Encrypt API.
- DNS lookup through `127.0.0.11`.
- Docker DNS server misbehaving.

</div>The correction was to configure the Traefik container to use Pi-hole explicitly and recreate the container.

### Wrong Certificate Served

Possible causes include:

<div id="bkmrk-router-not-loaded.-h" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Router not loaded.
- Hostname typo.
- Wrong certificate resolver.
- Duplicate router rule.
- Default certificate served.
- Client or browser cache.
- DNS points to the wrong server.

---

</div>## Application Onboarding

When adding a new public application:

<div id="bkmrk-confirm-the-applicat" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Confirm the application backend works directly.
2. Reserve the VM or LXC IP in Pi-hole.
3. Add the public WHC A record pointing to `38.29.213.101`.
4. Add the Pi-hole local DNS record pointing to `192.168.2.182`.
5. Create a dynamic Traefik configuration file.
6. Add the hostname router.
7. Add the private backend service.
8. Enable TLS with the correct resolver.
9. Validate YAML formatting.
10. Confirm Traefik loaded the router.
11. Confirm certificate issuance.
12. Test from the Traefik VM.
13. Test from the home LAN.
14. Test from an external network.
15. Add Uptime Kuma monitors.
16. Update BookStack documentation.

---

</div>## Backend Validation

Before troubleshooting an application through Traefik, test the direct backend from the Traefik VM.

Examples:

### Nextcloud

`nc -zv -w 5 192.168.2.100 11000`

### Vikunja

`curl -i http://192.168.2.121:3456/health`

### Authentik

`curl -I http://192.168.2.162:9000/-/health/ready/`

### BookStack

Use the confirmed BookStack IP on TCP port 6875.

A direct backend failure must be resolved before changing the Traefik router.

<div id="bkmrk--17" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Local Router Validation

Traefik can be tested locally without relying on public DNS.

Example for Vikunja:

`curl -k --resolve projects.bytek.ca:443:127.0.0.1 https://projects.bytek.ca/health`

This forces the requested hostname to the local Traefik listener.

A successful response confirms:

<div id="bkmrk-the-router-loaded.-t" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- The router loaded.
- TLS negotiation works.
- Traefik selected the expected service.
- The backend is reachable.
- The application responded.

---

</div>## Logging

Review the main Traefik log using:

`sudo tail -n 100 /opt/traefik/logs/traefik.log`

Filter common issues using:

`sudo grep -iE 'error|acme|certificate|middleware|service|router|dns' /opt/traefik/logs/traefik.log | tail -n 100`

Look for:

<div id="bkmrk-yaml-parsing-errors." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- YAML parsing errors.
- Unknown fields.
- Missing services.
- Missing middlewares.
- Incorrect certificate resolver.
- ACME validation failures.
- DNS resolution failures.
- Backend connection failures.
- Router conflicts.

</div>If access logging is enabled, use it to distinguish:

<div id="bkmrk-requests-reaching-tr" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Requests reaching Traefik.
- Router selection.
- Backend status.
- HTTP response code.
- Client source.
- Authentication redirects.

</div>Do not copy session cookies, bearer tokens, or authorization headers into BookStack.

<div id="bkmrk--18" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## YAML Validation

YAML indentation must use spaces, not tabs.

Check dynamic configuration files using:

`sudo grep -RnP '\t' /opt/traefik/dynamic/`

Expected result:

<div id="bkmrk-no-output." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- No output.

</div>Review a specific file using:

`sudo cat /opt/traefik/dynamic/<filename>.yml`

Common YAML problems include:

<div id="bkmrk-incorrect-indentatio" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Incorrect indentation.
- Tabs.
- Misspelled field names.
- Router placed under the wrong section.
- Service placed under the wrong section.
- Incorrect middleware name.
- Incorrect backend URL.
- Old IP address.
- Duplicate router name.

---

</div>## IP Address Changes

If an application IP changes:

<div id="bkmrk-confirm-the-new-rese" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Confirm the new reservation in Pi-hole.
2. Confirm the VM owns the new address.
3. Update the Traefik backend.
4. Search `/opt/traefik` for the old address.
5. Update Proxmox firewall rules.
6. Update Authentik internal hosts if applicable.
7. Update Uptime Kuma monitors.
8. Test the direct backend.
9. Test the local Traefik route.
10. Test the public route.
11. Update BookStack documentation.

</div>A stale backend address causes gateway errors even when the application itself is healthy.

<div id="bkmrk--19" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Firewall Requirements

The Traefik VM must accept:

<div id="bkmrk-tcp-443-from-the-hom" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- TCP 443 from the home LAN.
- TCP 443 from the WireGuard gateway.
- Administrative SSH from approved LAN sources.
- Monitoring traffic where required.

</div>Application VM firewalls must permit Traefik to reach their backend ports.

Known requirements include:

<div id="bkmrk-destination-source-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Destination</th><th>Source</th><th>Port</th></tr><tr><td>Nextcloud</td><td>`192.168.2.182`</td><td>TCP 11000</td></tr><tr><td>Vikunja</td><td>`192.168.2.182`</td><td>TCP 3456</td></tr><tr><td>Authentik</td><td>`192.168.2.182`</td><td>TCP 9000</td></tr><tr><td>BookStack</td><td>`192.168.2.182`</td><td>TCP 6875</td></tr><tr><td>Uptime Kuma direct route, if retained</td><td>`192.168.2.182`</td><td>TCP 3001</td></tr></tbody></table>

</div></div></div>Do not allow public clients to connect directly to these backend ports.

<div id="bkmrk--20" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Monitoring

Recommended Uptime Kuma monitors include:

<div id="bkmrk-monitor-target-traef" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Monitor</th><th>Target</th></tr><tr><td>Traefik VM</td><td>Ping `192.168.2.182`</td></tr><tr><td>Traefik HTTPS</td><td>TCP 443</td></tr><tr><td>Authentik route</td><td>`portal.bytek.ca` readiness endpoint</td></tr><tr><td>Nextcloud route</td><td>Nextcloud status endpoint</td></tr><tr><td>Vikunja route</td><td>Vikunja health endpoint</td></tr><tr><td>BookStack route</td><td>BookStack login endpoint</td></tr><tr><td>Certificate expiry</td><td>Each important public hostname</td></tr><tr><td>Public VPS to Traefik path</td><td>External application monitor</td></tr></tbody></table>

</div></div></div>Monitoring should distinguish between:

<div id="bkmrk-traefik-vm-unavailab" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Traefik VM unavailable.
- TCP 443 unavailable.
- Router unavailable.
- Certificate failure.
- Backend unavailable.
- Authentik middleware failure.
- VPS or WireGuard path failure.

---

</div>## Power-Failure Recovery

After a power interruption:

<div id="bkmrk-confirm-pi-hole-is-r" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Confirm Pi-hole is running.
2. Confirm the WireGuard gateway is running.
3. Confirm Authentik is ready.
4. Confirm the Traefik VM owns `192.168.2.182`.
5. Confirm Docker is active.
6. Confirm the Traefik container is running.
7. Confirm the container uses Pi-hole DNS.
8. Review Traefik logs for DNS errors.
9. Confirm routers loaded.
10. Confirm certificates are present.
11. Test Authentik locally.
12. Test an application locally.
13. Test a public application externally.
14. Restart or recreate Traefik only if required.

</div>If Traefik started before Pi-hole and DNS remains broken, recreate the Traefik container after Pi-hole is healthy.

<div id="bkmrk--21" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Backup

The Traefik VM is included in the Proxmox scheduled backup job.

Protect the following paths:

<div id="bkmrk-%2Fopt%2Ftraefik%2Fcompose" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `/opt/traefik/compose.yml`
- `/opt/traefik/traefik.yml`
- `/opt/traefik/.env`
- `/opt/traefik/dynamic/`
- `/opt/traefik/data/acme.json`
- Relevant logs.
- Any authentication files.
- Any custom certificate files.
- Any dashboard Basic Auth configuration.

</div>Secrets must remain in a password manager or encrypted backup.

BookStack should document the secret location, not the secret itself.

<div id="bkmrk--22" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Recovery Procedure

If Traefik configuration is broken:

<div id="bkmrk-ssh-into-the-traefik" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. SSH into the Traefik VM.
2. Confirm Docker is active.
3. Confirm the Traefik container state.
4. Review the most recent log entries.
5. Identify the most recently changed dynamic file.
6. Restore the known-good backup copy.
7. Confirm the file provider reloads the configuration.
8. Test the affected router locally.
9. Restart Traefik only if the static configuration changed or reload failed.
10. Confirm certificates remain present.
11. Test from the LAN.
12. Test externally.

</div>If the VM must be restored:

<div id="bkmrk-restore-the-most-rec" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Restore the most recent Proxmox backup under a temporary VM ID.
2. Disconnect the restored VM network adapter.
3. Verify `/opt/traefik`.
4. Verify `acme.json`.
5. Verify environment and dynamic configuration.
6. Shut down the failed production VM.
7. Assign the expected network identity.
8. Start the restored VM.
9. Confirm `192.168.2.182`.
10. Confirm Docker and Traefik.
11. Test all routers.
12. Reconnect public traffic only after validation.

---

</div>## Security Checklist

<div id="bkmrk-traefik-tcp-443-is-t" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Traefik TCP 443 is the only intended public application entry point.
- Private backend ports are not publicly exposed.
- The Traefik dashboard requires `bytek-admin`.
- The dashboard callback path bypasses ForwardAuth.
- Authentik is not protected by its own ForwardAuth.
- Nextcloud uses native OIDC.
- Vikunja uses native OIDC.
- BookStack uses native OIDC.
- Certificate API credentials are protected.
- `acme.json` has restrictive permissions.
- Container DNS points to Pi-hole.
- The Docker socket is mounted read-only where supported.
- The Docker API is not publicly exposed.
- SSH uses keys.
- Dynamic configuration is backed up.
- Basic Auth recovery credentials are stored securely.
- Proxmox backup includes the Traefik VM.

---

</div>## Validation Checklist

<div id="bkmrk-traefik-vm-owns-192." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Traefik VM owns `192.168.2.182`.
- Docker is active.
- Traefik container is running.
- TCP 443 is listening.
- Pi-hole DNS works inside the container.
- Dynamic YAML contains no tabs.
- Authentik router works.
- Nextcloud router works.
- Vikunja router works.
- BookStack router works.
- Uptime Kuma router works.
- Dashboard authentication works.
- Outpost ping returns HTTP 204.
- Certificates match every public hostname.
- Certificate renewal works.
- Public ingress works through the VPS and WireGuard.
- Internal split-DNS access works directly.
- `acme.json` is included in backup.
- A known-good dynamic configuration backup exists.

---

</div>## Document Control

<div id="bkmrk-owner%3A-bryan-gagne-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- **Owner:** Bryan Gagne-Plante
- **Private address:** `192.168.2.182`
- **Public dashboard:** `proxy.bytek.ca`
- **Primary entry point:** TCP 443
- **Deployment directory:** `/opt/traefik`
- **Certificate authority:** Let’s Encrypt
- **ACME challenge:** DNS-01 through WHC cPanel API
- **Container DNS:** `192.168.2.65`
- **Dashboard authentication:** Authentik ForwardAuth
- **Secondary authentication:** Basic Auth while retained
- **Proxmox VM ID:** Confirm current VM ID
- **Last verified:** YYYY-MM-DD
- **Last certificate-renewal test:** YYYY-MM-DD
- **Last ForwardAuth test:** YYYY-MM-DD
- **Last restore test:** YYYY-MM-DD
- **Known limitation:** Public applications depend on one Traefik VM and one certificate store

</div>

# Authentik

## Purpose

Authentik provides centralized identity and access management for the Bytek homelab.

Authentik allows users to access multiple applications with one account while applying consistent authentication, multi-factor authentication, group membership, and access policies.

Authentik provides:

<div id="bkmrk-central-user-account" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Central user accounts.
- Multi-factor authentication.
- OpenID Connect.
- OAuth2 providers.
- Proxy Providers.
- ForwardAuth.
- Group-based application access.
- Email-domain policies.
- Application entitlements.
- An embedded proxy outpost.
- Central application launch links.
- Administrative auditing and event records.

---

</div>## Service Information

<div id="bkmrk-setting-value-servic" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Service name</td><td>Authentik</td></tr><tr><td>Private IP address</td><td>`192.168.2.162`</td></tr><tr><td>Backend port</td><td>TCP 9000</td></tr><tr><td>Public hostname</td><td>`portal.bytek.ca`</td></tr><tr><td>Public access</td><td>Traefik</td></tr><tr><td>Deployment directory</td><td>`/opt/authentik`</td></tr><tr><td>Database</td><td>PostgreSQL</td></tr><tr><td>Supporting service</td><td>Redis</td></tr><tr><td>Proxy component</td><td>Embedded outpost</td></tr><tr><td>Normal user group</td><td>`bytek-users`</td></tr><tr><td>Administrator group</td><td>`bytek-admin`</td></tr><tr><td>Backup coverage</td><td>Proxmox scheduled backup</td></tr><tr><td>Proxmox VM ID</td><td>Confirm current VM ID</td></tr></tbody></table>

</div></div></div>Authentik portal:

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">[Open Authentik](https://portal.bytek.ca/)</span>

<div id="bkmrk-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Architecture Role

Authentik is the trusted identity provider for the Bytek environment.

Applications rely on Authentik to answer these questions:

<div id="bkmrk-who-is-the-user%3F-has" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Who is the user?
- Has the user completed authentication?
- Has the user completed MFA?
- Is the user a member of the required group?
- Does the user satisfy the application policy?
- Should the user be allowed to continue to the application?

</div>Authentik does not normally replace application-specific permissions.

For example:

<div id="bkmrk-authentik-authentica" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Authentik authenticates a Proxmox user, but Proxmox controls the user’s ACL.
- Authentik authenticates a BookStack user, but BookStack controls the user’s roles.
- Authentik authenticates a Nextcloud user, but Nextcloud controls shares and application permissions.
- Authentik authenticates a Vikunja user, but Vikunja controls projects and task permissions.

---

</div>## Request Flow

A normal OIDC login follows this process:

<div id="bkmrk-the-user-opens-an-ap" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. The user opens an application.
2. The application redirects the browser to `portal.bytek.ca`.
3. Traefik forwards the request to Authentik at `192.168.2.162:9000`.
4. Authentik identifies the requested application.
5. Authentik requests credentials if no valid session exists.
6. Authentik requests MFA according to the authentication flow.
7. Authentik evaluates the application’s group and policy bindings.
8. Authentik issues a signed authorization response.
9. Authentik redirects the browser to the application callback.
10. The application validates the response and creates or matches the local account.
11. The application applies its own permissions.

---

</div>## Core Components

### Authentik Server

The Authentik server provides:

<div id="bkmrk-the-web-interface.-l" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- The web interface.
- Login and authorization flows.
- OAuth2 and OIDC endpoints.
- Provider endpoints.
- Administrative interfaces.
- API services.
- User-facing application portal.

</div>### Authentik Worker

The worker performs background tasks such as:

<div id="bkmrk-scheduled-processing" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Scheduled processing.
- Event handling.
- Email-related tasks.
- Outpost-related processing.
- Provider maintenance.
- Background synchronization.

</div>### PostgreSQL

PostgreSQL stores Authentik configuration and identity data.

PostgreSQL contains critical information including:

<div id="bkmrk-users.-groups.-polic" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Users.
- Groups.
- Policies.
- Applications.
- Providers.
- Flows.
- Stages.
- Events.
- Outpost configuration.
- Authentication settings.

</div>PostgreSQL is the most important Authentik data component to protect.

### Redis

Redis supports Authentik’s runtime and task-processing requirements.

Redis is required for normal stack operation but PostgreSQL remains the authoritative persistent data source.

### Embedded Outpost

The embedded outpost provides:

<div id="bkmrk-forwardauth.-proxy-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- ForwardAuth.
- Proxy Provider routing.
- Authentication callbacks.
- Identity-header forwarding.
- Access enforcement for applications without native OIDC.

---

</div>## Application Portal

The Authentik user portal displays applications available to the signed-in user.

The portal should show only applications that the user is allowed to access.

Normal users may see:

<div id="bkmrk-nextcloud.-vikunja.-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Nextcloud.
- Vikunja.
- BookStack.

</div>Administrators may additionally see:

<div id="bkmrk-proxmox-ve.-traefik-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Proxmox VE.
- Traefik dashboard.
- Uptime Kuma.

</div>Application visibility is controlled by:

<div id="bkmrk-group-bindings.-poli" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Group bindings.
- Policy bindings.
- Policy engine mode.
- Application launch URL.
- User authentication state.

---

</div>## Group Model

### bytek-users

The `bytek-users` group grants access to normal user-facing applications.

Applications using this group include:

<div id="bkmrk-nextcloud.-vikunja.--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Nextcloud.
- Vikunja.
- BookStack.

</div>Users should be added to `bytek-users` only when access to normal Bytek applications is required.

### bytek-admin

The `bytek-admin` group grants access to administrative applications.

Applications using this group include:

<div id="bkmrk-proxmox-ve.-traefik--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Proxmox VE.
- Traefik dashboard.
- Uptime Kuma dashboard.

</div>Membership in `bytek-admin` must be limited to trusted infrastructure administrators.

### Administrator Membership

An administrator may belong to both groups:

<div id="bkmrk-bytek-users-bytek-ad" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `bytek-users`
- `bytek-admin`

</div>This allows access to both normal applications and administrative interfaces.

<div id="bkmrk--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Shared Email-Domain Policy

Applications also use the policy:

<div id="bkmrk-allow-bytek.ca-users" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `Allow bytek.ca users`

</div>The policy validates the user according to the configured Bytek email-domain rules.

The application policy engine is normally set to `ALL`.

For a normal application, access requires:

<div id="bkmrk-membership-in-bytek--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Membership in `bytek-users`.
- Successful evaluation of `Allow bytek.ca users`.

</div>For an administrative application, access requires:

<div id="bkmrk-membership-in-bytek--2" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Membership in `bytek-admin`.
- Successful evaluation of `Allow bytek.ca users`.

---

</div>## Policy Engine Mode

Authentik applications normally use policy engine mode `ALL`.

With `ALL`, every enabled binding must pass.

A normal application should therefore have:

<div id="bkmrk-binding-type-binding" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Binding Type</th><th>Binding</th></tr><tr><td>Group</td><td>`bytek-users`</td></tr><tr><td>Policy</td><td>`Allow bytek.ca users`</td></tr></tbody></table>

</div></div></div>An administrative application should have:

<div id="bkmrk-binding-type-binding-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Binding Type</th><th>Binding</th></tr><tr><td>Group</td><td>`bytek-admin`</td></tr><tr><td>Policy</td><td>`Allow bytek.ca users`</td></tr></tbody></table>

</div></div></div>Do not attach both `bytek-users` and `bytek-admin` to the same application using `ALL` unless every permitted user must belong to both groups.

An earlier access-denied event occurred because both groups were attached to the same application with `ALL`.

<div id="bkmrk--2" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Application Integration Matrix

<div id="bkmrk-application-integrat-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Application</th><th>Integration Type</th><th>Required Group</th></tr><tr><td>Nextcloud</td><td>Native OIDC</td><td>`bytek-users`</td></tr><tr><td>Vikunja</td><td>Native OIDC</td><td>`bytek-users`</td></tr><tr><td>BookStack</td><td>Native OIDC</td><td>`bytek-users`</td></tr><tr><td>Proxmox VE</td><td>Native OIDC</td><td>`bytek-admin`</td></tr><tr><td>Traefik dashboard</td><td>Single-application ForwardAuth</td><td>`bytek-admin`</td></tr><tr><td>Uptime Kuma</td><td>Proxy Provider</td><td>`bytek-admin`</td></tr></tbody></table>

</div></div>---

</div>## Native OIDC Applications

### Nextcloud

<div id="bkmrk-setting-value-applic" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Application slug</td><td>`nextcloud`</td></tr><tr><td>Integration</td><td>OpenID Connect user backend</td></tr><tr><td>Callback</td><td>`https://cloud.bytek.ca/apps/user_oidc/code`</td></tr><tr><td>Subject mode</td><td>User UUID</td></tr><tr><td>Scopes</td><td>`openid profile email`</td></tr><tr><td>Required group</td><td>`bytek-users`</td></tr></tbody></table>

</div></div></div>Nextcloud uses native OIDC so desktop clients, mobile clients, WebDAV, CalDAV, and CardDAV can communicate directly with Nextcloud.

Do not add ForwardAuth to the Nextcloud Traefik router.

### Vikunja

<div id="bkmrk-setting-value-applic-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Application slug</td><td>`vikunja`</td></tr><tr><td>Integration</td><td>Native OIDC</td></tr><tr><td>Callback</td><td>`https://projects.bytek.ca/auth/openid/authentik`</td></tr><tr><td>Subject mode</td><td>User UUID</td></tr><tr><td>Scopes</td><td>`openid profile email`</td></tr><tr><td>Required group</td><td>`bytek-users`</td></tr></tbody></table>

</div></div></div>Vikunja creates or matches users after a successful Authentik login.

### BookStack

<div id="bkmrk-setting-value-applic-2" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Application slug</td><td>`bookstack`</td></tr><tr><td>Integration</td><td>Native OIDC</td></tr><tr><td>Callback</td><td>`https://docs.bytek.ca/oidc/callback`</td></tr><tr><td>Subject mode</td><td>User UUID</td></tr><tr><td>Required group</td><td>`bytek-users`</td></tr><tr><td>Signing</td><td>RSA signing key</td></tr><tr><td>Token encryption</td><td>Disabled</td></tr></tbody></table>

</div></div></div>BookStack does not automatically link users solely by matching email addresses.

BookStack links an OIDC identity using the token’s `sub` claim.

The local BookStack administrator must use a different email address from the normal Authentik account unless the account is deliberately linked using the correct external authentication ID.

### Proxmox VE

<div id="bkmrk-setting-value-applic-3" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Application slug</td><td>`proxmox`</td></tr><tr><td>Integration</td><td>Native OIDC</td></tr><tr><td>Callback</td><td>`https://pve.bytek.ca:8006`</td></tr><tr><td>Subject mode</td><td>User UUID</td></tr><tr><td>Required group</td><td>`bytek-admin`</td></tr><tr><td>Selected scopes</td><td>`openid`, `email`, and `profile`</td></tr></tbody></table>

</div></div></div>Proxmox authentication and authorization are separate.

Authentik allows the user to authenticate, but Proxmox requires a separate ACL before the user can see or manage VMs.

<div id="bkmrk--3" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## OIDC Provider Standard

New OIDC providers should normally use:

<div id="bkmrk-provider-setting-sta" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Provider Setting</th><th>Standard Value</th></tr><tr><td>Client type</td><td>Confidential</td></tr><tr><td>Subject mode</td><td>Based on the user’s UUID</td></tr><tr><td>Authorization flow</td><td>Default implicit-consent provider flow</td></tr><tr><td>Signing key</td><td>Selected</td></tr><tr><td>Encryption key</td><td>None</td></tr><tr><td>Redirect type</td><td>Strict Authorization</td></tr><tr><td>Policy engine</td><td>ALL</td></tr></tbody></table>

</div></div></div>A signing key is required so applications can validate tokens.

An encryption key should remain empty unless the target application explicitly supports encrypted OIDC tokens.

BookStack login failed when an encryption key was selected.

Clearing the encryption key while retaining the RSA signing key resolved the token-validation failure.

<div id="bkmrk--4" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## OIDC Scope Mappings

Providers must include the scopes required by the application.

Common scopes include:

<div id="bkmrk-openid-email-profile" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `openid`
- `email`
- `profile`

</div>The mapping names may appear as Authentik default OAuth scope mappings.

Missing scope mappings can allow the initial browser authorization to complete while causing the application to fail later when requesting profile or userinfo data.

### Proxmox Scope Issue

Proxmox initially returned an authentication failure because the Authentik provider did not have the expected scopes selected.

The detailed Proxmox log reported a failure while contacting the userinfo endpoint.

Selecting the required mappings resolved the issue.

### Scope Review Procedure

When an OIDC application fails:

<div id="bkmrk-open-the-authentik-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Open the Authentik provider.
2. Review selected scope mappings.
3. Confirm `openid`.
4. Confirm `email`.
5. Confirm `profile`.
6. Review any application-specific mappings.
7. Save the provider.
8. Retry in a completely new private browser session.
9. Review the application log.

---

</div>## Redirect URI Requirements

Redirect URIs must match the application exactly.

A mismatch can cause:

<div id="bkmrk-invalid-redirect-err" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Invalid redirect errors.
- Authorization rejection.
- Login loops.
- Callback failures.
- Token validation failures.

</div>### Known Redirect URIs

<div id="bkmrk-application-strict-a" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Application</th><th>Strict Authorization URI</th></tr><tr><td>Nextcloud</td><td>`https://cloud.bytek.ca/apps/user_oidc/code`</td></tr><tr><td>Vikunja</td><td>`https://projects.bytek.ca/auth/openid/authentik`</td></tr><tr><td>BookStack</td><td>`https://docs.bytek.ca/oidc/callback`</td></tr><tr><td>Proxmox VE</td><td>`https://pve.bytek.ca:8006`</td></tr></tbody></table>

</div></div></div>Do not add unneeded wildcard redirect URIs.

Strict redirect matching is preferred.

<div id="bkmrk--5" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Post-Logout Redirects

Where supported, providers should include approved post-logout destinations.

BookStack uses destinations such as:

<div id="bkmrk-bookstack-home.-book" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- BookStack home.
- BookStack login page.
- BookStack login page with automatic OIDC initiation prevented.

</div>Post-logout redirects must use the actual production hostname.

Do not use obsolete provisional hostnames such as `wiki.bytek.ca`.

<div id="bkmrk--6" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## ForwardAuth Applications

### Traefik Dashboard

The Traefik dashboard uses a Proxy Provider configured for single-application ForwardAuth.

<div id="bkmrk-setting-value-applic-4" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Application slug</td><td>`traefik-dashboard`</td></tr><tr><td>External host</td><td>`https://proxy.bytek.ca`</td></tr><tr><td>Required group</td><td>`bytek-admin`</td></tr><tr><td>Shared policy</td><td>`Allow bytek.ca users`</td></tr><tr><td>Outpost</td><td>Embedded outpost</td></tr></tbody></table>

</div></div></div>The Traefik middleware sends authentication checks to Authentik.

The callback path under `/outpost.goauthentik.io/` must remain reachable without applying the same ForwardAuth middleware.

The outpost ping endpoint should return HTTP 204.

### Uptime Kuma

Uptime Kuma uses an Authentik Proxy Provider.

<div id="bkmrk-setting-value-applic-5" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Application slug</td><td>`uptime-kuma`</td></tr><tr><td>External host</td><td>`https://status.bytek.ca`</td></tr><tr><td>Internal host</td><td>`http://192.168.2.115:3001`</td></tr><tr><td>Required group</td><td>`bytek-admin`</td></tr><tr><td>Shared policy</td><td>`Allow bytek.ca users`</td></tr><tr><td>Outpost</td><td>Embedded outpost</td></tr></tbody></table>

</div></div></div>Public status-page, badge, push, and asset paths may require selected unauthenticated-path exceptions.

Do not disable Uptime Kuma’s local authentication until the Authentik proxy path has been tested successfully.

<div id="bkmrk--7" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Embedded Outpost

The embedded outpost handles Authentik proxy integrations.

Applications assigned to the embedded outpost include:

<div id="bkmrk-traefik-dashboard.-u" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Traefik dashboard.
- Uptime Kuma.

</div>The outpost must be able to reach each protected application backend.

For Uptime Kuma, Authentik at `192.168.2.162` must be permitted to reach `192.168.2.115` on TCP port 3001.

The outpost callback path must remain accessible through Traefik.

<div id="bkmrk--8" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Outpost Health

The outpost health endpoint should return HTTP 204.

For the Traefik dashboard, test:

`curl -k -I https://proxy.bytek.ca/outpost.goauthentik.io/ping`

Expected result:

<div id="bkmrk-http-204." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- HTTP 204.

</div>A 204 response contains no page body and is expected.

If the endpoint redirects to login or loops repeatedly, review:

<div id="bkmrk-callback-router-prio" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Callback router priority.
- Middleware assignment.
- Outpost application assignment.
- External host.
- Traefik service destination.
- Host header forwarding.

---

</div>## Reverse-Proxy Requirements

Traefik must preserve the original request information for Authentik.

Important forwarded values include:

<div id="bkmrk-original-host.-origi" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Original host.
- Original HTTPS scheme.
- Client forwarding information.
- Forwarded protocol.
- WebSocket compatibility.

</div>Incorrect forwarded headers can cause:

<div id="bkmrk-csrf-cookie-errors.-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- CSRF cookie errors.
- Origin mismatch.
- Redirect loops.
- Wrong callback URLs.
- Session-cookie problems.

</div>An Authentik CSRF error previously reported that the CSRF cookie was not set.

When diagnosing a CSRF error, review:

<div id="bkmrk-browser-cookies.-bro" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Browser cookies.
- Browser privacy extensions.
- Request Origin header.
- Request Host header.
- Traefik host-header forwarding.
- Authentik system information.
- Existing stale browser sessions.

---

</div>## DNS Requirements

Authentik must be reachable from:

<div id="bkmrk-user-browsers.-traef" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- User browsers.
- Traefik.
- Nextcloud containers.
- Vikunja.
- BookStack.
- Proxmox.
- Uptime Kuma where required.
- The Authentik embedded outpost.

</div>### Internal Resolution

LAN clients using Pi-hole resolve:

<div id="bkmrk-portal.bytek.ca-to-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `portal.bytek.ca` to `192.168.2.182`.

</div>### Proxmox Resolution

Proxmox uses Quad9 and normally resolves:

<div id="bkmrk-portal.bytek.ca-to-3" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `portal.bytek.ca` to `38.29.213.101`.

</div>This sends Proxmox’s server-to-server OIDC requests through:

<div id="bkmrk-vps.-wireguard.-trae" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. VPS.
2. WireGuard.
3. Traefik.
4. Authentik.

</div>### Container Resolution

Application containers that require private split DNS should use Pi-hole at `192.168.2.65`.

If an OIDC discovery endpoint becomes unreachable after a power failure, verify DNS from inside the application container before changing provider credentials.

<div id="bkmrk--9" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Health Endpoints

### Direct Readiness

Direct backend:

`http://192.168.2.162:9000/-/health/ready/`

Expected result:

<div id="bkmrk-http-200." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- HTTP 200.

</div>### Routed Readiness

Public hostname:

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">[Open Authentik Readiness](https://portal.bytek.ca/)</span>

Expected result:

<div id="bkmrk-http-200.-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- HTTP 200.

</div>### Embedded Outpost

The outpost ping endpoint should return:

<div id="bkmrk-http-204.-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- HTTP 204.

---

</div>## Container Management

Move to the Authentik deployment directory:

`cd /opt/authentik`

Check container state:

`sudo docker compose ps`

List Compose service names:

`sudo docker compose config --services`

View recent logs:

`sudo docker compose logs --tail 100`

View server logs:

`sudo docker compose logs --tail 100 server`

View worker logs:

`sudo docker compose logs --tail 100 worker`

The exact service names should be confirmed using the Compose service listing before running service-specific commands.

<div id="bkmrk--10" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Expected Container State

The Authentik stack should have healthy or running equivalents of:

<div id="bkmrk-authentik-server.-au" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Authentik server.
- Authentik worker.
- PostgreSQL.
- Redis.

</div>The server should not be considered ready until PostgreSQL and Redis are available.

A running Docker container does not necessarily mean the application is ready.

Use the readiness endpoint for application-level validation.

<div id="bkmrk--11" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## User Administration

When creating a user:

<div id="bkmrk-create-or-confirm-th" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Create or confirm the user’s email address.
2. Add the user to the required groups.
3. Confirm MFA enrollment.
4. Confirm the user appears in the application portal.
5. Test one user-facing application.
6. Test application logout.
7. Confirm no duplicate account is created.
8. Review application-specific permissions.

</div>Do not add normal users to `bytek-admin`.

<div id="bkmrk--12" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Administrator Administration

An Authentik administrator should:

<div id="bkmrk-belong-to-bytek-admi" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Belong to `bytek-admin`.
- Belong to `bytek-users` if normal applications are required.
- Have MFA enabled.
- Use a unique password.
- Have recovery methods stored securely.
- Avoid using the local break-glass accounts for daily work.

</div>Administrative group membership should be reviewed periodically.

<div id="bkmrk--13" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## MFA

Authentik provides MFA for applications using OIDC or proxy authentication.

MFA should be required for:

<div id="bkmrk-proxmox.-traefik-das" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Proxmox.
- Traefik dashboard.
- Uptime Kuma.
- Nextcloud.
- Vikunja.
- BookStack.
- Authentik administration.

</div>Preserve recovery codes or backup authentication devices.

Do not rely on one physical authenticator without a documented recovery method.

<div id="bkmrk--14" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Local Application Recovery Accounts

Authentik must not be the only recovery path.

### Proxmox

Use:

<div id="bkmrk-root%40pam" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `root@pam`

</div>### Nextcloud

Use:

<div id="bkmrk-local-nextcloud-admi" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Local Nextcloud administrator.
- Direct local login path.

</div>### BookStack

Switch:

<div id="bkmrk-auth_method-from-oid" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `AUTH_METHOD` from `oidc` to `standard`.

</div>Then sign in using the dedicated local administrator.

### Uptime Kuma

Restore direct private access and re-enable local authentication.

### Traefik

Restore a known-good dashboard file or use retained Basic Auth.

<div id="bkmrk--15" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Common Failure Scenarios

### Application Shows Permission Denied

Possible causes:

<div id="bkmrk-user-is-not-in-the-r" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- User is not in the required group.
- An extra group binding is attached.
- Policy engine is `ALL`.
- One binding returns false.
- Email-domain policy fails.
- Application is not assigned to the user.

</div>Review the Authentik denial explanation.

A binding shown as `None` in the explanation may correspond to a direct group-membership check.

### Discovery Endpoint Is Unreachable

Possible causes:

<div id="bkmrk-application-containe-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Application container DNS failure.
- Pi-hole unavailable.
- Traefik unavailable.
- Authentik unavailable.
- Certificate issue.
- Local-address protection inside the application.
- Wrong application slug.

</div>Test discovery from the application host and container.

### CSRF Cookie Not Set

Possible causes:

<div id="bkmrk-stale-browser-sessio" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Stale browser session.
- Browser cookie blocking.
- Wrong Origin header.
- Wrong Host header.
- Incorrect reverse-proxy forwarding.
- Proxy or VPN interference.

</div>Test using a new private browser window.

### Token Payload Cannot Be Parsed

Possible cause:

<div id="bkmrk-authentik-provider-e" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Authentik provider encryption key is selected.

</div>Correction:

<div id="bkmrk-keep-the-signing-key" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Keep the signing key.
- Clear the encryption key.
- Start a fresh authorization flow.

</div>### User’s Email Is Already Taken

The application may not automatically link an OIDC account to a local account based only on email.

For BookStack:

<div id="bkmrk-use-a-separate-local" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Use a separate local break-glass administrator email.
- Allow Authentik to create the normal OIDC account.
- Assign BookStack roles separately.

</div>### Authentication Works but Application Is Empty

Authentication succeeded, but application authorization is missing.

For Proxmox:

<div id="bkmrk-assign-an-acl-at-%2F.-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Assign an ACL at `/`.
- Select the required role.
- Enable propagation.

---

</div>## OIDC Troubleshooting Order

When an OIDC application fails:

<div id="bkmrk-keep-the-local-admin" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Keep the local administrator session open.
2. Confirm Authentik readiness.
3. Confirm Traefik routing.
4. Confirm the application provider.
5. Confirm the application slug.
6. Confirm client ID and client secret.
7. Confirm redirect URI.
8. Confirm selected scope mappings.
9. Confirm signing key.
10. Confirm encryption key is empty.
11. Confirm user group membership.
12. Confirm policy results.
13. Test the discovery endpoint.
14. Test DNS from the application container.
15. Review the application log.
16. Review Authentik events.
17. Retry from a completely new private browser session.

</div>Do not recreate the provider until the detailed failure is understood.

<div id="bkmrk--16" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Monitoring

Recommended Uptime Kuma monitors include:

<div id="bkmrk-monitor-target-authe" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Monitor</th><th>Target</th></tr><tr><td>Authentik VM</td><td>Ping `192.168.2.162`</td></tr><tr><td>Direct readiness</td><td>`http://192.168.2.162:9000/-/health/ready/`</td></tr><tr><td>Routed readiness</td><td>`https://portal.bytek.ca/-/health/ready/`</td></tr><tr><td>Authentik certificate</td><td>`portal.bytek.ca`</td></tr><tr><td>PostgreSQL availability</td><td>Internal service-level check</td></tr><tr><td>Embedded outpost</td><td>Outpost ping endpoint</td></tr></tbody></table>

</div></div></div>Monitoring should distinguish between:

<div id="bkmrk-vm-unavailable.-cont" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- VM unavailable.
- Container unavailable.
- Database unavailable.
- Direct readiness failure.
- Traefik failure.
- Certificate failure.
- Public VPS or WireGuard failure.
- Outpost failure.

</div>

# Uptime Kuma

## Purpose

Uptime Kuma provides availability monitoring for the Bytek homelab.

Uptime Kuma monitors services at multiple layers so an outage can be isolated quickly.

Monitoring can determine whether a failure is caused by:

<div id="bkmrk-a-stopped-vm-or-lxc." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- A stopped VM or LXC.
- A network problem.
- A Proxmox firewall rule.
- A stopped Docker container.
- An unhealthy application.
- A database problem.
- Pi-hole DNS.
- Traefik routing.
- An expired or invalid certificate.
- Authentik proxy authentication.
- The WireGuard tunnel.
- The public VPS.

---

</div>## Service Information

<div id="bkmrk-setting-value-servic" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Service name</td><td>Uptime Kuma</td></tr><tr><td>Private IP address</td><td>`192.168.2.115`</td></tr><tr><td>Backend port</td><td>TCP 3001</td></tr><tr><td>Public hostname</td><td>`status.bytek.ca`</td></tr><tr><td>Deployment directory</td><td>`/opt/uptime-kuma`</td></tr><tr><td>Container name</td><td>`uptime-kuma`</td></tr><tr><td>Persistent data</td><td>`/app/data` inside the container</td></tr><tr><td>Database</td><td>Embedded MariaDB</td></tr><tr><td>Container DNS</td><td>`192.168.2.65`</td></tr><tr><td>Public routing</td><td>Traefik</td></tr><tr><td>Target authentication</td><td>Authentik Proxy Provider</td></tr><tr><td>Required Authentik group</td><td>`bytek-admin`</td></tr><tr><td>Backup coverage</td><td>Proxmox scheduled backup</td></tr><tr><td>Proxmox VM ID</td><td>Confirm current VM ID</td></tr></tbody></table>

</div></div></div>Dashboard:

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">[Open Uptime Kuma](https://status.bytek.ca/)</span>

<div id="bkmrk-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Architecture Role

Uptime Kuma monitors both private backends and routed application hostnames.

A routed monitor follows this path:

<div id="bkmrk-uptime-kuma-resolves" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Uptime Kuma resolves the application hostname through Pi-hole.
2. Pi-hole returns Traefik’s private IP address, `192.168.2.182`.
3. Uptime Kuma connects to Traefik.
4. Traefik selects the application router.
5. Traefik forwards the request to the private backend.
6. Uptime Kuma records the response status and latency.

</div>A direct backend monitor bypasses Traefik and connects directly to the application VM.

Using both monitor types helps distinguish infrastructure failures from reverse-proxy failures.

<div id="bkmrk--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Monitoring Layers

Each important service should have up to three monitoring layers.

### VM or LXC Monitor

A ping monitor verifies that the guest is reachable on the network.

A successful ping proves:

<div id="bkmrk-the-guest-is-running" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- The guest is running.
- The virtual network interface is active.
- The network path permits ICMP.

</div>A successful ping does not prove that the application is healthy.

### Direct Backend Monitor

A direct backend monitor connects to the private application address and port.

A successful backend monitor proves:

<div id="bkmrk-the-guest-is-reachab" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- The guest is reachable.
- The application port is open.
- The application or web service responds.

</div>A direct backend monitor bypasses:

<div id="bkmrk-pi-hole-hostname-res" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Pi-hole hostname resolution.
- Traefik routing.
- Public certificates.
- The VPS.
- WireGuard public ingress.

</div>### Routed Application Monitor

A routed monitor uses the normal HTTPS application hostname.

A successful routed monitor proves:

<div id="bkmrk-pi-hole-resolves-the" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Pi-hole resolves the hostname.
- Traefik is reachable.
- The router is loaded.
- The certificate is valid.
- The backend is reachable.
- The application responds.

---

</div>## Failure Interpretation

<div id="bkmrk-vm-monitor-backend-m" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>VM Monitor</th><th>Backend Monitor</th><th>Routed Monitor</th><th>Likely Failure</th></tr><tr><td>Down</td><td>Down</td><td>Down</td><td>VM, LXC, Proxmox, or network failure</td></tr><tr><td>Up</td><td>Down</td><td>Down</td><td>Docker, application, database, or backend firewall failure</td></tr><tr><td>Up</td><td>Up</td><td>Down</td><td>Pi-hole, Traefik, TLS, router, or Authentik failure</td></tr><tr><td>Up</td><td>Up</td><td>Up</td><td>Service is operating normally</td></tr><tr><td>Up</td><td>Down</td><td>Up</td><td>Monitor target or direct-backend firewall configuration may be incorrect</td></tr><tr><td>Down</td><td>Up</td><td>Up</td><td>ICMP is blocked, but the application is available</td></tr></tbody></table>

</div></div></div>A failed ping monitor does not always mean the VM is down. The guest or Proxmox firewall may block ICMP while allowing application traffic.

<div id="bkmrk--2" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Docker Deployment

The Uptime Kuma deployment is managed using Docker Compose.

Deployment directory:

`/opt/uptime-kuma`

Before running Compose commands, move into the deployment directory using:

`cd /opt/uptime-kuma`

Check container state using:

`sudo docker compose ps`

View recent logs using:

`sudo docker compose logs --tail 100 uptime-kuma`

Follow logs live using:

`sudo docker compose logs -f uptime-kuma`

Validate the Compose configuration using:

`sudo docker compose config --quiet`

Apply normal configuration changes using:

`sudo docker compose up -d`

Recreate the container after changing Docker-level settings such as DNS, volumes, environment variables, or networking using:

`sudo docker compose up -d --force-recreate uptime-kuma`

<div id="bkmrk--3" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Persistent Data

Uptime Kuma stores its application data under `/app/data` inside the container.

The persistent host mapping should be confirmed from the current Compose file.

The persistent data includes information such as:

<div id="bkmrk-monitors.-monitor-hi" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Monitors.
- Monitor history.
- Notifications.
- Status pages.
- Maintenance windows.
- Application settings.
- User configuration.
- Embedded database files.
- Uploaded status-page assets.

</div>The persistent-data directory must remain mounted across container recreation.

Never remove the persistent volume while troubleshooting a container-startup problem.

<div id="bkmrk--4" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Database

The current Uptime Kuma deployment uses embedded MariaDB.

Database health is reported by the container health check.

The container should not be considered fully healthy until the database is available.

Check container health using:

`sudo docker inspect --format='{{.State.Health.Status}}' uptime-kuma`

Expected result:

<div id="bkmrk-healthy" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `healthy`

</div>If the result is `starting`, allow the health check to continue while reviewing logs.

If the result is `unhealthy`, inspect the Uptime Kuma logs before restarting or recreating the container.

<div id="bkmrk--5" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Docker DNS

The Uptime Kuma container explicitly uses Pi-hole at `192.168.2.65`.

This allows Uptime Kuma to resolve internal split-DNS records.

Verify container DNS using:

`sudo docker inspect --format='DNS={{json .HostConfig.Dns}}' uptime-kuma`

Expected result:

<div id="bkmrk-192.168.2.65-appears" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `192.168.2.65` appears in the DNS list.

</div>Test an internal hostname from inside the container using:

`sudo docker exec uptime-kuma getent hosts portal.bytek.ca`

Expected result:

<div id="bkmrk-portal.bytek.ca-reso" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `portal.bytek.ca` resolves to `192.168.2.182`.

</div>Test another internal hostname using:

`sudo docker exec uptime-kuma getent hosts projects.bytek.ca`

Expected result:

<div id="bkmrk-projects.bytek.ca-re" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `projects.bytek.ca` resolves to `192.168.2.182`.

---

</div>## DNS Failure After a Power Interruption

Docker DNS previously failed after an electrical outage.

Symptoms included:

<div id="bkmrk-monitors-failing-aft" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Monitors failing after services had restarted.
- Internal hostnames not resolving inside containers.
- Application hosts resolving correctly while container resolution failed.
- OIDC or certificate operations reporting unreachable endpoints.

</div>Recommended recovery sequence:

<div id="bkmrk-confirm-pi-hole-is-r" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Confirm Pi-hole is running.
2. Confirm Pi-hole owns `192.168.2.65`.
3. Confirm the Uptime Kuma VM resolves internal hostnames.
4. Confirm the Uptime Kuma container resolves internal hostnames.
5. Verify the container’s explicit DNS configuration.
6. Restart the Uptime Kuma container.
7. Recreate the container if Docker-level DNS configuration changed.
8. Confirm the monitors recover.

</div>Do not rebuild Uptime Kuma or delete persistent data because of a DNS-only failure.

<div id="bkmrk--6" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Public Dashboard Routing

The Uptime Kuma dashboard is available at:

<span class="___xxxjie0 f1w7gpdv f1gqqdtu" style="opacity:1;">[Open Uptime Kuma](https://status.bytek.ca/)</span>

Internal clients resolve `status.bytek.ca` to Traefik at `192.168.2.182`.

External clients resolve `status.bytek.ca` to the public VPS at `38.29.213.101`.

The public path includes:

<div id="bkmrk-whc-public-dns.-publ" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. WHC public DNS.
2. Public VPS.
3. WireGuard.
4. Home WireGuard gateway.
5. Traefik.
6. Authentik embedded outpost when enabled.
7. Uptime Kuma at `192.168.2.115:3001`.

---

</div>## Authentication Design

Uptime Kuma does not use the same native OIDC design as Nextcloud, Vikunja, BookStack, and Proxmox.

The target design uses an Authentik Proxy Provider.

The expected authentication flow is:

<div id="bkmrk-the-administrator-op" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. The administrator opens `status.bytek.ca`.
2. Traefik forwards the request to the Authentik embedded outpost.
3. Authentik checks the existing authentication session.
4. Authentik requests credentials and MFA if required.
5. Authentik evaluates the application bindings.
6. Authentik proxies the request to Uptime Kuma.
7. Uptime Kuma displays the dashboard.

---

</div>## Authentik Application

<div id="bkmrk-setting-value-applic" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Application name</td><td>Uptime Kuma</td></tr><tr><td>Application slug</td><td>`uptime-kuma`</td></tr><tr><td>Provider type</td><td>Proxy Provider</td></tr><tr><td>Provider mode</td><td>Proxy</td></tr><tr><td>External host</td><td>`https://status.bytek.ca`</td></tr><tr><td>Internal host</td><td>`http://192.168.2.115:3001`</td></tr><tr><td>Required group</td><td>`bytek-admin`</td></tr><tr><td>Required policy</td><td>`Allow bytek.ca users`</td></tr><tr><td>Policy engine</td><td>`ALL`</td></tr><tr><td>Outpost</td><td>Authentik Embedded Outpost</td></tr></tbody></table>

</div></div></div>Only users who satisfy both the group and policy requirements should reach the dashboard.

<div id="bkmrk--7" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Embedded Outpost Connectivity

The embedded outpost runs through the Authentik service at `192.168.2.162`.

Authentik must be able to reach Uptime Kuma at:

<div id="bkmrk-192.168.2.115-tcp-po" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `192.168.2.115`
- TCP port 3001

</div>The Uptime Kuma VM firewall must allow:

<div id="bkmrk-source-192.168.2.162" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Source `192.168.2.162`
- Destination TCP port 3001

</div>Test from the Authentik VM using:

`curl -I http://192.168.2.115:3001/`

A healthy Uptime Kuma response may redirect to `/dashboard`.

<div id="bkmrk--8" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Authentication Migration Safety

Do not disable Uptime Kuma’s local authentication before the Authentik proxy works.

Use this migration order:

<div id="bkmrk-create-the-authentik" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Create the Authentik application and Proxy Provider.
2. Assign the application to the embedded outpost.
3. Allow Authentik to reach TCP port 3001.
4. Route `status.bytek.ca` through the outpost.
5. Test Authentik authentication.
6. Confirm the Uptime Kuma local login still appears behind Authentik.
7. Test with the `bytek-admin` account.
8. Test denial with a non-administrator account.
9. Confirm public status pages still work if required.
10. Disable Uptime Kuma local authentication.
11. Enable Trust Proxy.
12. Restrict direct TCP 3001 access.
13. Test recovery.

</div>During the intermediate state, both Authentik and Uptime Kuma authentication may appear.

That is intentional until the Authentik path is validated.

<div id="bkmrk--9" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Disabling Local Authentication

Only disable local Uptime Kuma authentication after Authentik is proven reliable.

Before disabling local authentication:

<div id="bkmrk-record-the-uptime-ku" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Record the Uptime Kuma administrator password.
- Confirm Proxmox backup coverage.
- Create a Proxmox snapshot if desired.
- Confirm direct private access.
- Confirm Authentik access.
- Confirm a non-admin user is denied.
- Confirm public status pages.
- Document the recovery process.

</div>After disabling local authentication:

<div id="bkmrk-enable-trust-proxy.-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Enable Trust Proxy.
- Restrict direct TCP 3001 access to the Authentik VM.
- Remove unnecessary direct Traefik-to-Kuma access if Traefik now routes to the outpost.
- Retain the original administrator password for recovery.

---

</div>## Direct Backend Security

When Uptime Kuma local authentication is disabled, direct access to `192.168.2.115:3001` must be restricted.

Otherwise, a LAN client could bypass Authentik and reach an unauthenticated dashboard.

The final firewall should permit TCP port 3001 only from approved sources such as:

<div id="bkmrk-source-purpose-192.1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Source</th><th>Purpose</th></tr><tr><td>`192.168.2.162`</td><td>Authentik embedded outpost</td></tr><tr><td>Administrative workstation during testing</td><td>Temporary recovery access</td></tr><tr><td>Approved monitoring source</td><td>Only if required</td></tr></tbody></table>

</div></div></div>Remove temporary direct access after validation.

<div id="bkmrk--10" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Public Status Pages

Some Uptime Kuma status pages may be intended for unauthenticated public viewing.

Authentik Proxy Provider exclusions may be required for:

<div id="bkmrk-published-status-pag" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Published status pages.
- Status-page API requests.
- Static assets.
- Uploaded status-page files.
- Badge endpoints.
- Push-monitor endpoints.
- Public icons.

</div>Unauthenticated-path exclusions must be as narrow as practical.

Do not exclude the entire Uptime Kuma API.

After configuring exclusions:

<div id="bkmrk-open-a-public-status" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Open a public status page in a private browser.
2. Confirm no Authentik login is required.
3. Open the dashboard.
4. Confirm Authentik login is required.
5. Test a push monitor.
6. Test a status badge if used.
7. Review Authentik and Traefik logs.

---

</div>## Push Monitors

Push monitors rely on a unique URL that an external process calls to report success.

If Uptime Kuma sits behind Authentik, the push path must remain reachable without an interactive login.

Protect push-monitor URLs as secrets.

Do not publish push URLs in BookStack.

If a push monitor stops updating after enabling Authentik:

<div id="bkmrk-confirm-the-push-pat" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Confirm the push path is excluded.
2. Confirm Traefik routes the request correctly.
3. Confirm the unique token is unchanged.
4. Review the Uptime Kuma monitor history.
5. Review Traefik access logs.
6. Review Authentik outpost logs.

---

</div>## Monitor Naming Standard

Use consistent names so the dashboard is easy to scan.

Recommended patterns include:

<div id="bkmrk-service-vm-service-b" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `Service VM`
- `Service Backend Direct`
- `Service Through Traefik`
- `Service External`
- `Service Certificate`
- `Service DNS`

</div>Examples:

<div id="bkmrk-nextcloud-vm-nextclo" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `Nextcloud VM`
- `Nextcloud AIO Apache`
- `Nextcloud Through Traefik`
- `Vikunja VM`
- `Vikunja Backend Direct`
- `Vikunja Through Traefik`
- `BookStack VM`
- `BookStack Backend Direct`
- `BookStack Through Traefik`

---

</div>## Core Infrastructure Monitors

Recommended core monitors include:

<div id="bkmrk-monitor-suggested-ty" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Monitor</th><th>Suggested Type</th><th>Target</th></tr><tr><td>Proxmox VE</td><td>HTTPS or TCP</td><td>`192.168.2.254:8006`</td></tr><tr><td>Pi-hole VM or LXC</td><td>Ping</td><td>`192.168.2.65`</td></tr><tr><td>Pi-hole DNS TCP</td><td>TCP</td><td>`192.168.2.65:53`</td></tr><tr><td>Pi-hole DNS UDP</td><td>UDP or DNS</td><td>`192.168.2.65:53`</td></tr><tr><td>WireGuard gateway</td><td>Ping</td><td>`192.168.2.64`</td></tr><tr><td>Public VPS</td><td>Ping or TCP</td><td>`38.29.213.101`</td></tr><tr><td>Public VPS HTTPS</td><td>TCP</td><td>`38.29.213.101:443`</td></tr><tr><td>Traefik VM</td><td>Ping</td><td>`192.168.2.182`</td></tr><tr><td>Traefik HTTPS</td><td>TCP</td><td>`192.168.2.182:443`</td></tr><tr><td>Authentik direct</td><td>HTTP</td><td>Direct readiness endpoint</td></tr><tr><td>Authentik routed</td><td>HTTPS</td><td>Routed readiness endpoint</td></tr></tbody></table>

</div></div>---

</div>## Nextcloud Monitors

<div id="bkmrk-monitor-type-target-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Monitor</th><th>Type</th><th>Target</th></tr><tr><td>Nextcloud VM</td><td>Ping</td><td>`192.168.2.100`</td></tr><tr><td>Nextcloud AIO Apache</td><td>TCP</td><td>`192.168.2.100:11000`</td></tr><tr><td>Nextcloud Through Traefik</td><td>HTTPS</td><td>`https://cloud.bytek.ca/status.php`</td></tr></tbody></table>

</div></div></div>Expected routed status:

<div id="bkmrk-http-200." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- HTTP 200.

---

</div>## Vikunja Monitors

<div id="bkmrk-monitor-type-target--1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Monitor</th><th>Type</th><th>Target</th></tr><tr><td>Vikunja VM</td><td>Ping</td><td>`192.168.2.121`</td></tr><tr><td>Vikunja Backend Direct</td><td>HTTP</td><td>`http://192.168.2.121:3456/health`</td></tr><tr><td>Vikunja Through Traefik</td><td>HTTPS</td><td>`https://projects.bytek.ca/health`</td></tr></tbody></table>

</div></div></div>Expected health status:

<div id="bkmrk-http-200.-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- HTTP 200.

</div>The Vikunja VM firewall must allow Uptime Kuma at `192.168.2.115` to reach TCP port 3456.

<div id="bkmrk--11" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## BookStack Monitors

<div id="bkmrk-monitor-type-target--2" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Monitor</th><th>Type</th><th>Target</th></tr><tr><td>BookStack VM</td><td>Ping</td><td>Confirm BookStack IP</td></tr><tr><td>BookStack Backend Direct</td><td>HTTP</td><td>BookStack IP on port 6875</td></tr><tr><td>BookStack Through Traefik</td><td>HTTPS</td><td>`https://docs.bytek.ca/login`</td></tr></tbody></table>

</div></div></div>Use accepted status codes from 200 through 399 if the application redirects to authentication.

The BookStack VM firewall must allow Uptime Kuma at `192.168.2.115` to reach TCP port 6875.

<div id="bkmrk--12" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Authentik Monitors

<div id="bkmrk-monitor-type-target--3" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Monitor</th><th>Type</th><th>Target</th></tr><tr><td>Authentik VM</td><td>Ping</td><td>`192.168.2.162`</td></tr><tr><td>Authentik Direct Readiness</td><td>HTTP</td><td>`http://192.168.2.162:9000/-/health/ready/`</td></tr><tr><td>Authentik Routed Readiness</td><td>HTTPS</td><td>`https://portal.bytek.ca/-/health/ready/`</td></tr><tr><td>Authentik Certificate</td><td>Certificate</td><td>`portal.bytek.ca`</td></tr><tr><td>Authentik Outpost</td><td>HTTP</td><td>Outpost ping endpoint</td></tr></tbody></table>

</div></div></div>Expected results:

<div id="bkmrk-direct-readiness-ret" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Direct readiness returns HTTP 200.
- Routed readiness returns HTTP 200.
- Outpost ping returns HTTP 204.

---

</div>## Traefik Monitors

<div id="bkmrk-monitor-type-target--4" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Monitor</th><th>Type</th><th>Target</th></tr><tr><td>Traefik VM</td><td>Ping</td><td>`192.168.2.182`</td></tr><tr><td>Traefik HTTPS</td><td>TCP</td><td>`192.168.2.182:443`</td></tr><tr><td>Traefik Dashboard</td><td>HTTPS</td><td>`https://proxy.bytek.ca/`</td></tr><tr><td>Traefik Certificate</td><td>Certificate</td><td>`proxy.bytek.ca`</td></tr></tbody></table>

</div></div></div>The dashboard monitor must account for Authentik and Basic Auth redirects if those protections are enabled.

Do not store Basic Auth credentials in BookStack.

<div id="bkmrk--13" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Proxmox Monitor Considerations

Proxmox may return a response that is valid but not HTTP 200 for some request methods.

Avoid relying on an unsupported HTTP HEAD request.

A TCP monitor on port 8006 can verify listener availability.

An HTTPS monitor can verify the login page if configured with an appropriate method and accepted status range.

Proxmox remains private and should be monitored using its private address.

<div id="bkmrk--14" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Certificate Monitoring

Important public hostnames should have certificate-expiry monitoring.

Recommended hostnames include:

<div id="bkmrk-portal.bytek.ca-clou" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `portal.bytek.ca`
- `cloud.bytek.ca`
- `projects.bytek.ca`
- `docs.bytek.ca`
- `status.bytek.ca`
- `proxy.bytek.ca`

</div>Certificate monitoring should alert before expiration.

A valid application response does not guarantee that certificate renewal automation remains healthy.

<div id="bkmrk--15" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Notification Channels

Uptime Kuma can notify administrators when a monitor changes state.

The configured notification methods should be recorded after verification.

Potential channels may include:

<div id="bkmrk-email.-microsoft-tea" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Email.
- Microsoft Teams webhook.
- Discord webhook.
- Matrix.
- Telegram.
- Other supported notification services.

</div>Notification credentials must remain outside BookStack.

BookStack should document:

<div id="bkmrk-notification-channel-1" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Notification channel name.
- Intended recipients.
- Severity policy.
- Test date.
- Secret-storage location.

---

</div>## Notification Policy

Recommended notification behavior:

### Critical Infrastructure

Immediate notification for:

<div id="bkmrk-proxmox.-pi-hole-dns" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Proxmox.
- Pi-hole DNS.
- WireGuard.
- Traefik.
- Authentik.
- Public VPS.

</div>### Applications

Notify after enough failed checks to avoid alerts from brief application restarts.

### Maintenance

Create maintenance windows before:

<div id="bkmrk-proxmox-reboots.-app" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Proxmox reboots.
- Application upgrades.
- Docker stack recreation.
- Firewall maintenance.
- Planned internet outages.
- Storage maintenance.

</div>This prevents expected maintenance from generating unnecessary alerts.

<div id="bkmrk--16" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Monitor Timing

Monitor intervals should balance timely detection with unnecessary load.

Suggested principles:

<div id="bkmrk-critical-service-che" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Critical service checks may run more frequently.
- Application backends can use moderate intervals.
- Certificate checks need less frequent execution.
- Avoid aggressively monitoring database internals without a clear operational need.
- Use retries before marking services down.
- Configure heartbeat intervals based on expected update frequency.

</div>These values should be tuned after observing false positives and actual recovery behavior.

<div id="bkmrk--17" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Status Pages

Status pages provide a consolidated view of selected monitors.

A public status page should include only services appropriate for public disclosure.

Avoid publishing:

<div id="bkmrk-private-ip-addresses" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Private IP addresses.
- Proxmox details.
- Pi-hole details.
- Authentik backend details.
- Internal database status.
- Hypervisor storage status.
- Internal firewall information.

</div>A private administrative status page may include more detail behind Authentik.

<div id="bkmrk--18" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Maintenance Windows

Use maintenance windows for planned outages.

Common maintenance events include:

<div id="bkmrk-proxmox-host-reboot." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Proxmox host reboot.
- Electrical maintenance.
- Docker upgrades.
- Authentik upgrades.
- Nextcloud AIO upgrades.
- Traefik configuration changes.
- Storage work.
- Firewall work.
- Backup restoration testing.

</div>Record:

<div id="bkmrk-reason-for-maintenan" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Reason for maintenance.
- Affected monitors.
- Date and time.
- Expected service impact.
- Actual result.

---

</div>## Firewall Requirements

Uptime Kuma requires outbound access to monitored services.

Application firewalls may require narrow inbound rules from:

<div id="bkmrk-192.168.2.115" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- `192.168.2.115`

</div>Known direct-monitor requirements include:

<div id="bkmrk-destination-port-pi-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;"><div class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Destination</th><th>Port</th></tr><tr><td>Pi-hole</td><td>TCP and UDP 53</td></tr><tr><td>Proxmox VE</td><td>TCP 8006</td></tr><tr><td>Traefik</td><td>TCP 443</td></tr><tr><td>Authentik</td><td>TCP 9000</td></tr><tr><td>Nextcloud</td><td>TCP 11000</td></tr><tr><td>Vikunja</td><td>TCP 3456</td></tr><tr><td>BookStack</td><td>TCP 6875</td></tr></tbody></table>

</div></div></div>ICMP must be allowed if ping monitors are used.

A failed ping monitor with a healthy HTTP monitor normally indicates blocked ICMP rather than a service outage.

<div id="bkmrk--19" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Health Validation

Check the VM address using:

`ip -br -4 addr`

Check the container state using:

`sudo docker compose ps`

Check container health using:

`sudo docker inspect --format='{{.State.Health.Status}}' uptime-kuma`

Confirm direct access using:

`curl -I http://192.168.2.115:3001/`

Confirm DNS inside the container using:

`sudo docker exec uptime-kuma getent hosts portal.bytek.ca`

Confirm the public route using:

`curl -I https://status.bytek.ca/`

Interpret redirects according to the currently enabled authentication layers.

<div id="bkmrk--20" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Logging

Review Uptime Kuma logs using:

`sudo docker compose logs --tail 100 uptime-kuma`

Follow logs live using:

`sudo docker compose logs -f uptime-kuma`

Review logs for:

<div id="bkmrk-database-startup-fai" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Database startup failures.
- Monitor connection failures.
- DNS errors.
- Certificate errors.
- Notification failures.
- Proxy-header errors.
- Authentication errors.
- File-permission problems.
- Persistent-volume errors.

</div>Do not paste access tokens, notification secrets, cookies, or push-monitor URLs into BookStack.

<div id="bkmrk--21" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Common Failure Scenarios

### Many Hostname Monitors Fail Simultaneously

Likely causes:

<div id="bkmrk-pi-hole-unavailable." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Pi-hole unavailable.
- Container DNS failure.
- Traefik unavailable.
- WireGuard outage.
- VPS outage.

</div>Check direct IP monitors before assuming every application failed.

### Direct Backends Work but Routed Monitors Fail

Likely causes:

<div id="bkmrk-pi-hole-split-dns.-t" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Pi-hole split DNS.
- Traefik router.
- Certificate.
- Authentik proxy.
- Hostname mismatch.

</div>### VM Ping Fails but HTTP Works

Likely cause:

<div id="bkmrk-icmp-blocked-by-prox" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- ICMP blocked by Proxmox or guest firewall.

</div>The VM is likely available.

### Kuma Dashboard Works by IP but Not by Hostname

Check:

<div id="bkmrk-pi-hole.-traefik.-ce" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Pi-hole.
- Traefik.
- Certificate.
- Authentik provider.
- Browser DNS over HTTPS.

</div>### Authentik Login Works but Kuma Is Unreachable

Check:

<div id="bkmrk-internal-host-in-the" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Internal host in the Authentik Proxy Provider.
- Authentik VM firewall access to TCP 3001.
- Uptime Kuma container.
- Embedded outpost assignment.
- Host-header forwarding.

</div>### Public Status Page Requires Login

Check:

<div id="bkmrk-authentik-unauthenti" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Authentik unauthenticated-path patterns.
- Status-page slug.
- Static asset exclusions.
- Status API exclusions.
- Traefik routing.

</div>### Push Monitor Stops Working

Check:

<div id="bkmrk-push-path-exclusion." style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Push path exclusion.
- Push token.
- Traefik access logs.
- Authentik outpost logs.
- Monitor heartbeat interval.

---

</div>## Power-Failure Recovery

After a power interruption:

<div id="bkmrk-confirm-proxmox.-con" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Confirm Proxmox.
2. Confirm Pi-hole.
3. Confirm the WireGuard gateway.
4. Confirm Authentik.
5. Confirm Traefik.
6. Confirm the Uptime Kuma VM owns `192.168.2.115`.
7. Confirm Docker.
8. Confirm the container.
9. Confirm container DNS.
10. Confirm embedded MariaDB health.
11. Confirm direct dashboard access.
12. Confirm the routed dashboard.
13. Confirm monitors recover.
14. Restart or recreate the container only if DNS remains broken.

</div>Uptime Kuma should start after the core DNS, identity, and routing services when practical.

<div id="bkmrk--22" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Backup

The Uptime Kuma VM is included in the Proxmox scheduled backup job.

Protect:

<div id="bkmrk-persistent-%2Fapp%2Fdata" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Persistent `/app/data`.
- Docker Compose file.
- Environment file, if used.
- Any custom certificates.
- Notification configuration.
- Status-page assets.
- Monitor history.
- Embedded database.

</div>A stopped Proxmox backup provides the strongest whole-VM consistency for a baseline.

Snapshot-mode backup may be used for routine operation where downtime is undesirable.

<div id="bkmrk--23" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Recovery Procedure

If Uptime Kuma is corrupted or unavailable:

<div id="bkmrk-confirm-the-vm-is-ru" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Confirm the VM is running.
2. Confirm `192.168.2.115`.
3. Confirm Docker.
4. Confirm the persistent-data mount.
5. Confirm the container.
6. Review logs.
7. Confirm embedded database health.
8. Test direct TCP port 3001.
9. Test Pi-hole DNS.
10. Test the Traefik route.
11. Test the Authentik proxy.

</div>If the VM must be restored:

<div id="bkmrk-restore-the-latest-b" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Restore the latest backup under a temporary VM ID.
2. Disconnect the restored VM network adapter.
3. Verify Docker and persistent data.
4. Verify monitor configuration.
5. Shut down the failed production VM.
6. Assign the expected network identity.
7. Start the restored VM.
8. Confirm `192.168.2.115`.
9. Confirm the dashboard.
10. Confirm notifications and monitors.
11. Reconnect the Authentik route.

---

</div>## Authentik Recovery

If the Authentik proxy prevents access:

<div id="bkmrk-restore-the-known-go" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">1. Restore the known-good direct Traefik route.
2. Temporarily permit the administrative workstation to reach TCP 3001.
3. Access Uptime Kuma using the private IP.
4. Re-enable Uptime Kuma local authentication.
5. Repair the Authentik Proxy Provider.
6. Test Authentik with a private browser.
7. Confirm `bytek-admin` access.
8. Confirm a normal user is denied.
9. Disable local authentication again only after validation.
10. Restrict TCP 3001 again.

</div>Record the original administrator password securely even after local authentication is disabled.

<div id="bkmrk--24" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">---

</div>## Security Checklist

<div id="bkmrk-uptime-kuma-is-not-d" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Uptime Kuma is not directly exposed publicly on TCP 3001.
- Dashboard access requires `bytek-admin`.
- Authentik policy engine uses `ALL`.
- Direct backend access is restricted after local authentication is disabled.
- Trust Proxy is enabled when required.
- Public status-page exclusions are narrow.
- Push URLs are treated as secrets.
- Notification credentials are protected.
- Container DNS is `192.168.2.65`.
- Persistent data is backed up.
- Local recovery credentials are stored securely.
- Proxmox backup includes the Uptime Kuma VM.
- Public status pages do not reveal sensitive infrastructure details.

---

</div>## Validation Checklist

<div id="bkmrk-uptime-kuma-vm-owns-" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- Uptime Kuma VM owns `192.168.2.115`.
- Docker is active.
- Uptime Kuma container is running.
- Container health is `healthy`.
- Embedded MariaDB is available.
- Persistent data is mounted.
- Container DNS uses Pi-hole.
- Internal Bytek names resolve.
- Direct TCP 3001 responds.
- Routed dashboard responds.
- Authentik Proxy Provider works.
- `bytek-admin` is allowed.
- Normal users are denied.
- Public status pages work as intended.
- Push monitors work.
- Notifications are tested.
- Certificate monitoring works.
- Proxmox backup includes the VM.
- Recovery access has been tested.

---

</div>## Document Control

<div id="bkmrk-owner%3A-bryan-gagne-p" style="font-family:'Segoe UI';font-size:14px;font-style:normal;font-weight:400;line-height:20px;">- **Owner:** Bryan Gagne-Plante
- **Private address:** `192.168.2.115`
- **Backend port:** TCP 3001
- **Public hostname:** `status.bytek.ca`
- **Deployment directory:** `/opt/uptime-kuma`
- **Database:** Embedded MariaDB
- **Container DNS:** `192.168.2.65`
- **Authentication:** Authentik Proxy Provider
- **Required group:** `bytek-admin`
- **Proxmox VM ID:** Confirm current VM ID
- **Last verified:** YYYY-MM-DD
- **Last notification test:** YYYY-MM-DD
- **Last Authentik proxy test:** YYYY-MM-DD
- **Last public status-page test:** YYYY-MM-DD
- **Last restore test:** YYYY-MM-DD
- **Known limitation:** Monitoring, status history, and alerting depend on one Uptime Kuma VM

</div>