CHAT_OUTPUT_BEGIN
COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=newfi-staging-upstream-tls-frontend-forensic-readonly
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=45b9f9814c0bff698962bcdd4c06d06953e5ec76ec01c8f56e680c51218c4047
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGE_DECLARED=false
RESULT_CONTRACT_VALID=true
RESULT_CONTRACT_STATUS=NOT_APPLICABLE
RESULT_CONTRACT_ERROR=NONE
COMMAND_RC=0
CHANGES_MADE=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
MUTATION_OUTCOME=NO_MUTATION
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=1997b836a531166d14298c77a514de124631aa8c239a2ef9b74202fb2bf9a4ff
SANITIZED_OUTPUT_SHA256=24bb5f3b58f9b3919ef16ca69845f204063a88ea8ab583d4e12ed0445d64f801
OUTPUT_BEGIN
FORENSIC3_BEGIN=true
COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3
MODE=read-only
MUTATIONS_PERFORMED=NO
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
REFERENCE_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED
PRIOR_FORENSIC2_GATE=PASS
PRIOR_FORENSIC2_HISTORY_SHA256=ca4539996dc20a97e98687e1c0721f53b03e9c9e0c9e68fc62d4686081053271
PUBLIC_DNS_PTR={"PTR":{"err":"","rc":0,"values":[]},"chat.gram1.ru":{"A":["185.225.35.6"],"err":"","rc":0},"git.gram1.ru":{"A":["185.225.35.6"],"err":"","rc":0},"groups.chat.gram1.ru":{"A":["chat.gram1.ru.","185.225.35.6"],"err":"","rc":0},"newfi-staging.gram1.ru":{"A":[],"err":"","rc":0},"share.chat.gram1.ru":{"A":["chat.gram1.ru.","185.225.35.6"],"err":"","rc":0}}
PUBLIC_CERT_GIT_GRAM1_RU={"err":"","out":"subject=CN=git.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE1\nserial=0668B385C8D6C5BBB0435761F84FADD0DB23\nnotBefore=Aug 17 02:03:29 2026 GMT\nnotAfter=Nov 15 02:03:28 2026 GMT\nX509v3 Subject Alternative Name: \n    DNS:git-read.gram1.ru, DNS:git.gram1.ru","rc":0}
PUBLIC_CURL_GIT_GRAM1_RU={"err":"","headers":["Server: nginx/1.28.3 (Ubuntu)"],"http":"200","rc":0}
PUBLIC_CERT_CHAT_GRAM1_RU={"err":"","out":"subject=CN=chat.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE2\nserial=05CCB33370771F433AE4E9AD47F2DB574672\nnotBefore=Aug 17 02:54:43 2026 GMT\nnotAfter=Nov 15 02:54:42 2026 GMT\nX509v3 Subject Alternative Name: \n    DNS:chat.gram1.ru, DNS:groups.chat.gram1.ru, DNS:share.chat.gram1.ru","rc":0}
PUBLIC_CURL_CHAT_GRAM1_RU={"err":"","headers":["Server: nginx/1.28.3 (Ubuntu)","location: /login"],"http":"302","rc":0}
PUBLIC_CERT_NEWFI_STAGING_GRAM1_RU={"err":"","out":"subject=CN=chat.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE2\nserial=05CCB33370771F433AE4E9AD47F2DB574672\nnotBefore=Aug 17 02:54:43 2026 GMT\nnotAfter=Nov 15 02:54:42 2026 GMT\nX509v3 Subject Alternative Name: \n    DNS:chat.gram1.ru, DNS:groups.chat.gram1.ru, DNS:share.chat.gram1.ru","rc":0}
PUBLIC_CURL_NEWFI_STAGING_GRAM1_RU={"err":"curl: (60) SSL: no alternative certificate subject name matches target hostname 'newfi-staging.gram1.ru'\nMore details here: https://curl.se/docs/sslcerts.html\n\ncurl failed to verify the legitimacy of the server and therefore could not\nestablish a secure connection to it. To learn more about this situation and\nhow to fix it, please visit the webpage mentioned above.\n","headers":[],"http":"000","rc":60}
CLUSTER_VM_CT_INVENTORY={"err":"","rc":0,"rows":[{"name":"dns1","node":"pve01","status":"running","template":0,"type":"lxc","vmid":110},{"name":"dns2","node":"pve02","status":"running","template":0,"type":"lxc","vmid":111},{"name":"unbound1","node":"pve01","status":"running","template":0,"type":"lxc","vmid":112},{"name":"unbound2","node":"pve02","status":"running","template":0,"type":"lxc","vmid":113},{"name":"edge-vm","node":"pve03","status":"running","template":0,"type":"qemu","vmid":130},{"name":"snikket","node":"pve01","status":"running","template":0,"type":"qemu","vmid":150},{"name":"forum-prod","node":"pve02","status":"running","template":0,"type":"qemu","vmid":160},{"name":"core-apps","node":"pve01","status":"running","template":0,"type":"qemu","vmid":170},{"name":"monitoring","node":"pve01","status":"running","template":0,"type":"qemu","vmid":171},{"name":"homelab-ops-worker","node":"pve03","status":"running","template":0,"type":"qemu","vmid":190},{"name":"newfi-prod","node":"pve01","status":"running","template":0,"type":"qemu","vmid":210},{"name":"newfi-staging","node":"pve03","status":"running","template":0,"type":"qemu","vmid":211},{"name":"edge-cold-standby","node":"pve02","status":"stopped","template":0,"type":"qemu","vmid":9130}]}
PVE01_DEFAULT_ROUTE={"err":"","gateway":"[PRIVATE_IP]","line":"default via [PRIVATE_IP] dev vmbr0 proto kernel onlink","rc":0}
PVE01_GATEWAY_NEIGHBOR={"err":"","out":"[PRIVATE_IP] dev vmbr0 lladdr d6:9c:53:00:2c:c3 REACHABLE","rc":0}
GATEWAY_BASIC_PORTS={"22":{"open":false,"rc":124},"443":{"open":false,"rc":124},"80":{"open":false,"rc":124},"8443":{"open":false,"rc":124}}
GATEWAY_SSH_KEYSCAN={"err":"","out":"","rc":1}
GATEWAY_HTTP_HEAD={"err":"curl: (28) Connection timed out after 5002 milliseconds\n","out":"","rc":28}
GATEWAY_HTTPS_HEAD={"err":"curl: (28) Connection timed out after 5001 milliseconds\n","out":"","rc":28}
EDGE_PRIVATE_IP_DISCOVERY={"ips":["[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]"],"rc":0,"selected":null}
EDGE_WEB_LISTENER_OWNERSHIP={"err":"","out":"--- SS_WEB ---\nState  Recv-Q Send-Q  Local Address:Port  Peer Address:PortProcess                                                                                                                                          \nLISTEN 0      511           0.0.0.0:443        0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=16),(\"nginx\",pid=2180089,fd=16),(\"nginx\",pid=2180083,fd=16),(\"nginx\",pid=2180082,fd=16),(\"nginx\",pid=3096,fd=16))\nLISTEN 0      511           0.0.0.0:443        0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=15),(\"nginx\",pid=2180089,fd=15),(\"nginx\",pid=2180083,fd=15),(\"nginx\",pid=2180082,fd=15),(\"nginx\",pid=3096,fd=15))\nLISTEN 0      511           0.0.0.0:443        0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=14),(\"nginx\",pid=2180089,fd=14),(\"nginx\",pid=2180083,fd=14),(\"nginx\",pid=2180082,fd=14),(\"nginx\",pid=3096,fd=14))\nLISTEN 0      511           0.0.0.0:443        0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=7),(\"nginx\",pid=2180089,fd=7),(\"nginx\",pid=2180083,fd=7),(\"nginx\",pid=2180082,fd=7),(\"nginx\",pid=3096,fd=7))     \nLISTEN 0      511           0.0.0.0:80         0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=13),(\"nginx\",pid=2180089,fd=13),(\"nginx\",pid=2180083,fd=13),(\"nginx\",pid=2180082,fd=13),(\"nginx\",pid=3096,fd=13))\nLISTEN 0      511           0.0.0.0:80         0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=12),(\"nginx\",pid=2180089,fd=12),(\"nginx\",pid=2180083,fd=12),(\"nginx\",pid=2180082,fd=12),(\"nginx\",pid=3096,fd=12))\nLISTEN 0      511           0.0.0.0:80         0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=11),(\"nginx\",pid=2180089,fd=11),(\"nginx\",pid=2180083,fd=11),(\"nginx\",pid=2180082,fd=11),(\"nginx\",pid=3096,fd=11))\nLISTEN 0      511           0.0.0.0:80         0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=6),(\"nginx\",pid=2180089,fd=6),(\"nginx\",pid=2180083,fd=6),(\"nginx\",pid=2180082,fd=6),(\"nginx\",pid=3096,fd=6))     \nLISTEN 0      511         127.0.0.1:81         0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=19),(\"nginx\",pid=2180089,fd=19),(\"nginx\",pid=2180083,fd=19),(\"nginx\",pid=2180082,fd=19),(\"nginx\",pid=3096,fd=19))\nLISTEN 0      511         127.0.0.1:81         0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=18),(\"nginx\",pid=2180089,fd=18),(\"nginx\",pid=2180083,fd=18),(\"nginx\",pid=2180082,fd=18),(\"nginx\",pid=3096,fd=18))\nLISTEN 0      511         127.0.0.1:81         0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=17),(\"nginx\",pid=2180089,fd=17),(\"nginx\",pid=2180083,fd=17),(\"nginx\",pid=2180082,fd=17),(\"nginx\",pid=3096,fd=17))\nLISTEN 0      511         127.0.0.1:81         0.0.0.0:*    users:((\"nginx\",pid=2180110,fd=8),(\"nginx\",pid=2180089,fd=8),(\"nginx\",pid=2180083,fd=8),(\"nginx\",pid=2180082,fd=8),(\"nginx\",pid=3096,fd=8))     \nLISTEN 0      511              [::]:443           [::]:*    users:((\"nginx\",pid=2180110,fd=10),(\"nginx\",pid=2180089,fd=10),(\"nginx\",pid=2180083,fd=10),(\"nginx\",pid=2180082,fd=10),(\"nginx\",pid=3096,fd=10))\nLISTEN 0      511              [::]:80            [::]:*    users:((\"nginx\",pid=2180110,fd=9),(\"nginx\",pid=2180089,fd=9),(\"nginx\",pid=2180083,fd=9),(\"nginx\",pid=2180082,fd=9),(\"nginx\",pid=3096,fd=9))     \n--- PROCESS_TREE_NGINX ---\n   1920    1674 root     haproxy         /usr/sbin/haproxy -f /run/haproxy/haproxy.cfg -W -db\n   2031     888 root     docker-proxy    /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 2375 -container-ip [PRIVATE_IP] -container-port 2375 -use-listen-fd\n   2107     888 root     docker-proxy    /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 8081 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\n   2160     888 root     docker-proxy    /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 7422 -container-ip [PRIVATE_IP] -container-port 7422 -use-listen-fd\n   2180     888 root     docker-proxy    /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 8088 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\n   2201     888 root     docker-proxy    /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 12345 -container-ip [PRIVATE_IP] -container-port 12345 -use-listen-fd\n   2213    1920 root     haproxy         /usr/sbin/haproxy -f /run/haproxy/haproxy.cfg -W -db\n   2223     888 root     docker-proxy    /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 3100 -container-ip [PRIVATE_IP] -container-port 3100 -use-listen-fd\n   2332     888 root     docker-proxy    /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 9999 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\n   3096    3095 root     nginx           nginx: master process nginx -e stderr\n1948449    3096 root     nginx           nginx: worker process is shutting down\n2180082    3096 root     nginx           nginx: worker process\n2180083    3096 root     nginx           nginx: worker process\n2180089    3096 root     nginx           nginx: worker process\n2180110    3096 root     nginx           nginx: worker process\n2183049     722 root     bash            /bin/bash -lc  echo '--- SS_WEB ---' ss -ltnp | awk 'NR==1 || $4 ~ /:(80|81|443)$/' echo '--- PROCESS_TREE_NGINX ---' ps -eo pid,ppid,user,comm,args | grep -E '[n]ginx|[d]ocker-proxy|[h]aproxy|[c]addy|[t]raefik' echo '--- NPMPLUS_MODE ---' docker inspect npmplus --format '{{.HostConfig.NetworkMode}}' echo '--- NPMPLUS_IMAGE ---' docker inspect npmplus --format '{{.Config.Image}} {{.Image}}' echo '--- NPMPLUS_NGINX_VERSION ---' docker exec npmplus /usr/local/nginx/sbin/nginx -v 2>&1 \n2631782       1 root     sudo            sudo bash -lc set -euo pipefail; IDS=\"30 32 33 34 35 36 37 38 39 40 43 44 47 54 55 56 57 58 59\"; B=\"/opt/npmplus/manual-backups/stale-proxy-host-retirement-$(date -u +%Y%m%dT%H%M%SZ)\"; install -d -m 700 \"$B\"; python3 -c \"import sqlite3; s=sqlite3.connect(\\\"file:/opt/npmplus/npmplus/database.sqlite?mode=ro\\\",uri=True); d=sqlite3.connect(\\\"$B/database.sqlite.before\\\"); s.backup(d); d.close(); s.close()\"; chmod 600 \"$B/database.sqlite.before\"; for id in $IDS; do [ ! -e \"/opt/npmplus/nginx/proxy_host/$id.conf\" ] || cp -a \"/opt/npmplus/nginx/proxy_host/$id.conf\" \"$B/$id.conf.before\"; done; docker exec npmplus grep -q \"is_deleted: 1\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"Delete Nginx Config\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"internalNginx.reload\" /app/internal/proxy-host.js; C=\"/data${B#/opt/npmplus}\"; printf \"%s\\n\" \"import internalProxyHost from \\\"/app/internal/proxy-host.js\\\";\" \"const ids=[30,32,33,34,35,36,37,38,39,40,43,44,47,54,55,56,57,58,59];\" \"const access={can:async()=>({permission_visibility:\\\"all\\\"}),token=<redacted>;\" \"for (const id of ids) { const ok=await internalProxyHost.delete(access,{id}); console.log(\\\"DELETED=\\\"+id+\\\":\\\"+ok); }\" > \"$B/delete-stale.mjs\"; chmod 644 \"$B/delete-stale.mjs\"; docker exec -u 0 npmplus node --check \"$C/delete-stale.mjs\"; echo \"BACKUP=$B\"; docker exec -u 0 npmplus node \"$C/delete-stale.mjs\"; docker exec npmplus nginx -t; echo NPMPLUS_STALE_PROXY_HOST_DELETE=PASS\n2631784 2631782 root     bash            bash -lc set -euo pipefail; IDS=\"30 32 33 34 35 36 37 38 39 40 43 44 47 54 55 56 57 58 59\"; B=\"/opt/npmplus/manual-backups/stale-proxy-host-retirement-$(date -u +%Y%m%dT%H%M%SZ)\"; install -d -m 700 \"$B\"; python3 -c \"import sqlite3; s=sqlite3.connect(\\\"file:/opt/npmplus/npmplus/database.sqlite?mode=ro\\\",uri=True); d=sqlite3.connect(\\\"$B/database.sqlite.before\\\"); s.backup(d); d.close(); s.close()\"; chmod 600 \"$B/database.sqlite.before\"; for id in $IDS; do [ ! -e \"/opt/npmplus/nginx/proxy_host/$id.conf\" ] || cp -a \"/opt/npmplus/nginx/proxy_host/$id.conf\" \"$B/$id.conf.before\"; done; docker exec npmplus grep -q \"is_deleted: 1\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"Delete Nginx Config\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"internalNginx.reload\" /app/internal/proxy-host.js; C=\"/data${B#/opt/npmplus}\"; printf \"%s\\n\" \"import internalProxyHost from \\\"/app/internal/proxy-host.js\\\";\" \"const ids=[30,32,33,34,35,36,37,38,39,40,43,44,47,54,55,56,57,58,59];\" \"const access={can:async()=>({permission_visibility:\\\"all\\\"}),token=<redacted>;\" \"for (const id of ids) { const ok=await internalProxyHost.delete(access,{id}); console.log(\\\"DELETED=\\\"+id+\\\":\\\"+ok); }\" > \"$B/delete-stale.mjs\"; chmod 644 \"$B/delete-stale.mjs\"; docker exec -u 0 npmplus node --check \"$C/delete-stale.mjs\"; echo \"BACKUP=$B\"; docker exec -u 0 npmplus node \"$C/delete-stale.mjs\"; docker exec npmplus nginx -t; echo NPMPLUS_STALE_PROXY_HOST_DELETE=PASS\n--- NPMPLUS_MODE ---\nhost\n--- NPMPLUS_IMAGE ---\ndocker.io/zoeyvid/npmplus:2026-06-17-b1 sha256:058637924fae1dbf161d1d78c84b738d86804e9a0ddad66cf7c87cbe33337834\n--- NPMPLUS_NGINX_VERSION ---\nnginx version: nginx/1.31.2 (NPMplus)","rc":0}
FOCUSED_FRONTEND_REFERENCES={"err":"","out":"[{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":951,\"text\":\"URL=https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":1967,\"text\":\"4. The only remaining access convenience item is optional: expose the cluster-admin panel via a VPN-only/internal reverse proxy route such as `cluster-admin.vpn.gram1.ru`.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2418,\"text\":\"from=\\\"[PRIVATE_IP]\\\",command=\\\"...\\\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2454,\"text\":\"- Optional ports 80/443 on VM150/170/171 are not hard failures because services may live behind reverse proxy or not expose direct ports.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2803,\"text\":\"Configure operator-friendly VPN reverse proxy route: cluster-admin.vpn.gram1.ru -> [PRIVATE_IP]:8080\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2832,\"text\":\"8. `http://[PRIVATE_IP]:8080/` is not reachable from a normal browser outside LAN/VPN. Use VPN, SSH tunnel, or internal reverse proxy.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":4810,\"text\":\"- likely frontend/cache;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":5436,\"text\":\"- \\u043a\\u0442\\u043e \\u043e\\u0442\\u0432\\u0435\\u0447\\u0430\\u0435\\u0442 \\u0437\\u0430 reverse proxy;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":6683,\"text\":\"| Core | Gitea | https://git.gram1.ru | public | Git |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7096,\"text\":\"- line 304: `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7161,\"text\":\"| 257 | `### NAT / port forwarding` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7455,\"text\":\"| 304 | `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7540,\"text\":\"- `https://git.gram1.ru`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8263,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8552,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8620,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8631,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8653,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8702,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9006,\"text\":\"  - https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9062,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9305,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9319,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9870,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10101,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10113,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10629,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10722,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":11033,\"text\":\"\\u0410 \\u0441\\u0430\\u043c\\u0430\\u044f \\u043a\\u0440\\u0438\\u0442\\u0438\\u0447\\u043d\\u0430\\u044f VM130 edge-vm \\u043d\\u0430\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043d\\u0430 pve03 \\u0438 \\u0434\\u0435\\u0440\\u0436\\u0438\\u0442 reverse proxy, monitoring, backup automation \\u0438 Docker application host.  \\u041f\\u0440\\u0438 \\u044d\\u0442\\u043e\\u043c pve03 \\u2014 \\u0441\\u0430\\u043c\\u044b\\u0439 \\u043e\\u0433\\u0440\\u0430\\u043d\\u0438\\u0447\\u0435\\u043d\\u043d\\u044b\\u0439 \\u043f\\u043e \\u0434\\u0438\\u0441\\u043a\\u0443: local-lvm \\u0443\\u0436\\u0435 \\u0431\\u044b\\u043b \\u0441\\u0430\\u043c\\u044b\\u043c constrained, \\u043f\\u043e\\u0442\\u043e\\u043c\\u0443 \\u0447\\u0442\\u043e VM130 \\u0438\\u043c\\u0435\\u0435\\u0442 96G OS + 150G media/data, \\u0430 pve03 staging \\u0434\\u043e\\u0445\\u043e\\u0434\\u0438\\u043b \\u0434\\u043e 77% \\u043f\\u0440\\u0438 WARN 80%.  \"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":11044,\"text\":\"4. \\u0415\\u0441\\u043b\\u0438 \\u043d\\u0435 \\u043f\\u0435\\u0440\\u0435\\u043d\\u043e\\u0441\\u0438\\u0442\\u044c \\u0441\\u0435\\u0439\\u0447\\u0430\\u0441, \\u0442\\u043e \\u043c\\u0438\\u043d\\u0438\\u043c\\u0443\\u043c \\u0441\\u0434\\u0435\\u043b\\u0430\\u0442\\u044c **cold standby edge-vm** \\u043d\\u0430 pve01 \\u0438\\u043b\\u0438 pve02: \\u0432\\u043e\\u0441\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u043d\\u0430\\u044f \\u0438\\u0437 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e backup, \\u0432\\u044b\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u043d\\u0430\\u044f, \\u0441 \\u043f\\u043e\\u043d\\u044f\\u0442\\u043d\\u044b\\u043c runbook \\u043f\\u0435\\u0440\\u0435\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u0438\\u044f IP/NPMplus/router port forward.\"},{\"path\":\"/etc/pve/HOMEPAGE_BACKUP_COVERAGE_MATRIX.md\",\"line\":22,\"text\":\"| Gitea | https://git.gram1.ru | 185 | 89 | 105 | EVIDENCE_FOUND_REVIEW |\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":315,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":604,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":672,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":683,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":705,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":754,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1058,\"text\":\"  - https://git.gram1.ru\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1114,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1357,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1371,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1922,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2153,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2165,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2515,\"text\":\"- Recommended future path: establish VPN/NetBird/WireGuard or reverse-proxy/private management endpoint first; then issue DNS-01 certificate on a trusted node and deploy cert/key to the router only over that private path.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2561,\"text\":\"- TLS terminates on edge using certbot DNS-01 cert router-taftauto.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2872,\"text\":\"- Primary domain: chat.gram1.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2873,\"text\":\"- groups.chat.gram1.ru and share.chat.gram1.ru are Snikket service domains.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2902,\"text\":\"- chat.gram1.ru public A is 185.225.35.6; groups.chat.gram1.ru and share.chat.gram1.ru continue through chat.gram1.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2905,\"text\":\"- VM150 Internet default path is via [PRIVATE_IP] and verified public egress is 185.225.35.6.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2906,\"text\":\"- Effective coturn external address uses 185.225.35.6 and no longer advertises 95.84.154.183.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2912,\"text\":\"- Public DNS observed at release: 185.225.35.6; DNS was not changed during forum cutover.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":1831,\"text\":\"URL=https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":2847,\"text\":\"4. The only remaining access convenience item is optional: expose the cluster-admin panel via a VPN-only/internal reverse proxy route such as `cluster-admin.vpn.gram1.ru`.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3298,\"text\":\"from=\\\"[PRIVATE_IP]\\\",command=\\\"...\\\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3334,\"text\":\"- Optional ports 80/443 on VM150/170/171 are not hard failures because services may live behind reverse proxy or not expose direct ports.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3683,\"text\":\"Configure operator-friendly VPN reverse proxy route: cluster-admin.vpn.gram1.ru -> [PRIVATE_IP]:8080\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3712,\"text\":\"8. `http://[PRIVATE_IP]:8080/` is not reachable from a normal browser outside LAN/VPN. Use VPN, SSH tunnel, or internal reverse proxy.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":5690,\"text\":\"- likely frontend/cache;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":6316,\"text\":\"- \\u043a\\u0442\\u043e \\u043e\\u0442\\u0432\\u0435\\u0447\\u0430\\u0435\\u0442 \\u0437\\u0430 reverse proxy;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":7563,\"text\":\"| Core | Gitea | https://git.gram1.ru | public | Git |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":7976,\"text\":\"- line 304: `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":8041,\"text\":\"| 257 | `### NAT / port forwarding` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":8335,\"text\":\"| 304 | `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":8420,\"text\":\"- `https://git.gram1.ru`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9143,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9432,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9500,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9511,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9533,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9582,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9886,\"text\":\"  - https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9942,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10185,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10199,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10750,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10981,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10993,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11509,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11602,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11913,\"text\":\"\\u0410 \\u0441\\u0430\\u043c\\u0430\\u044f \\u043a\\u0440\\u0438\\u0442\\u0438\\u0447\\u043d\\u0430\\u044f VM130 edge-vm \\u043d\\u0430\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043d\\u0430 pve03 \\u0438 \\u0434\\u0435\\u0440\\u0436\\u0438\\u0442 reverse proxy, monitoring, backup automation \\u0438 Docker application host.  \\u041f\\u0440\\u0438 \\u044d\\u0442\\u043e\\u043c pve03 \\u2014 \\u0441\\u0430\\u043c\\u044b\\u0439 \\u043e\\u0433\\u0440\\u0430\\u043d\\u0438\\u0447\\u0435\\u043d\\u043d\\u044b\\u0439 \\u043f\\u043e \\u0434\\u0438\\u0441\\u043a\\u0443: local-lvm \\u0443\\u0436\\u0435 \\u0431\\u044b\\u043b \\u0441\\u0430\\u043c\\u044b\\u043c constrained, \\u043f\\u043e\\u0442\\u043e\\u043c\\u0443 \\u0447\\u0442\\u043e VM130 \\u0438\\u043c\\u0435\\u0435\\u0442 96G OS + 150G media/data, \\u0430 pve03 staging \\u0434\\u043e\\u0445\\u043e\\u0434\\u0438\\u043b \\u0434\\u043e 77% \\u043f\\u0440\\u0438 WARN 80%.  \"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11924,\"text\":\"4. \\u0415\\u0441\\u043b\\u0438 \\u043d\\u0435 \\u043f\\u0435\\u0440\\u0435\\u043d\\u043e\\u0441\\u0438\\u0442\\u044c \\u0441\\u0435\\u0439\\u0447\\u0430\\u0441, \\u0442\\u043e \\u043c\\u0438\\u043d\\u0438\\u043c\\u0443\\u043c \\u0441\\u0434\\u0435\\u043b\\u0430\\u0442\\u044c **cold standby edge-vm** \\u043d\\u0430 pve01 \\u0438\\u043b\\u0438 pve02: \\u0432\\u043e\\u0441\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u043d\\u0430\\u044f \\u0438\\u0437 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e backup, \\u0432\\u044b\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u043d\\u0430\\u044f, \\u0441 \\u043f\\u043e\\u043d\\u044f\\u0442\\u043d\\u044b\\u043c runbook \\u043f\\u0435\\u0440\\u0435\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u0438\\u044f IP/NPMplus/router port forward.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":211,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":304,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":1730,\"text\":\"- public_dns_root: 185.225.35.6\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":1731,\"text\":\"- public_dns_www: 185.225.35.6\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":2603,\"text\":\"2026-09-03 KOW_EXTERNAL_PUBLIC_FRONT_SERVER_VERSION_DISCLOSURE OPEN public_response_Server_nginx_1_28_3_Ubuntu direct_NPMplus_Server_absent identify_external_reverse_proxy_before_mutation\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":3035,\"text\":\"CERT38_NARROW_MIGRATION_20260904 | CLOSED_COMMITTED_PASS | Cert38 meta/runtime credential migrated to verified narrow gram1 token; stock npm-38 renewal dry-run succeeded for chat.gram1.ru, groups.chat.gram1.ru and share.chat.gram1.ru.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":3100,\"text\":\"EDGE01_SSH_HOSTKEY_UNKNOWN_20260904 | OPEN | Strict SSH to 185.225.35.6 stopped before authentication because no pinned ED25519 host key exists for the IP; no remote state changed and no unverified key was accepted.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":3112,\"text\":\"PUBLIC_SERVER_VERSION_HARDENING_RUNTIME_MISMATCH_20260904 | CLOSED_PARTIAL_BLOCKED_EXTERNAL_INGRESS | VM130 NPMplus now has server_tokens off on all 13 public manual vhosts and direct-edge responses expose no Server header; public nginx/1.28.3 (Ubuntu) is emitted by EDGE01 185.225.35.6. kingofwolk.ru proves EDGE01 supports per-vhost server_tokens off, but external mutation is blocked until an authorized EDGE01 management credential is restored.\"},{\"path\":\"/root/finish_skladchik_cr_2026_0010_v2.sh\",\"line\":20,\"text\":\"API=https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-ops\"},{\"path\":\"/root/774c_dockge_agent_capability_inspect.sh\",\"line\":70,\"text\":\"  for f in /app/package.json /app/backend/package.json /app/frontend/package.json; do\"},{\"path\":\"/root/771h_crowdsec_capi_register_correct_sequence.sh\",\"line\":453,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771d_crowdsec_capi_via_privoxy_tor.sh\",\"line\":64,\"text\":\"export DEBIAN_FRONTEND=noninteractive\"},{\"path\":\"/root/771d_crowdsec_capi_via_privoxy_tor.sh\",\"line\":314,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771w_pve01_netbird_ssh_egress_crowdsec_capi.sh\",\"line\":586,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/HOMELAB_READONLY_SERVICE_CENSUS_20260816T065015Z.txt\",\"line\":4306,\"text\":\"   \\\"out-data\\\" : \\\"GUEST_BEGIN|host=forum-prod|utc=2026-08-16T06:50:56Z\\\\nPRETTY_NAME=\\\\\\\"Debian GNU/Linux 12 (bookworm)\\\\\\\"\\\\nVERSION_ID=\\\\\\\"12\\\\\\\"\\\\nID=debian\\\\n\\\\n--- GUEST_DF ---\\\\nFilesystem     Type      Size  Used Avail Use% Mounted on\\\\nudev           devtmpfs  3.9G     0  3.9G   0% /dev\\\\ntmpfs          tmpfs     796M  512K  795M   1% /run\\\\n/dev/sda1      ext4      197G   15G  175G   8% /\\\\ntmpfs          tmpfs     3.9G     0  3.9G   0% /dev/shm\\\\ntmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock\\\\n/dev/sda15     vfat      124M   12M  112M  10% /boot/efi\\\\n\\\\n--- GUEST_FAILED_UNITS ---\\\\nUNIT LOAD ACTIVE SUB DESCRIPTION\\\\n0 loaded units listed.\\\\n\\\\n--- GUEST_RUNNING_SERVICES ---\\\\nUNIT                        LOAD   ACTIVE SUB     DESCRIPTION\\\\nchrony.service              loaded active running chrony, an NTP client/server\\\\ncron.service                loaded active running Regular background program processing daemon\\\\ndbus.service                loaded active running D-Bus System Message Bus\\\\ngetty@tty1.service          loaded active running Getty on tty1\\\\nmariadb.service             loaded active running MariaDB 10.11.18 database server\\\\nnginx.service               loaded active running A high \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1665,\"text\":\"DOMAIN = git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1668,\"text\":\"ROOT_URL = https://git.gram1.ru/\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1705,\"text\":\"REVERSE_PROXY_LIMIT = 1\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1706,\"text\":\"REVERSE_PROXY_TRUSTED_PROXIES = *\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1902,\"text\":\"# Load frontend themes from the themes folder\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1903,\"text\":\"frontend:\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":2955,\"text\":\"9   [\\\"git.gram1.ru\\\"]                1               custom                    0                none                  0                      0                        SAMEORIGIN               1      \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":3524,\"text\":\"# git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":3536,\"text\":\"  server_name git.gram1.ru;\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":10159,\"text\":\"dns_server=[PRIVATE_IP] domain=git.gram1.ru A=[PRIVATE_IP] \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":10165,\"text\":\"dns_server=[PRIVATE_IP] domain=git.gram1.ru A=[PRIVATE_IP] \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23215,\"text\":\"git.gram1.ru,[PRIVATE_IP],optional-empty,http://127.0.0.1:3002,LAN-only,cloudflare-dns-challenge\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23264,\"text\":\"| Gitea | 127.0.0.1:3002 | https://git.gram1.ru |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23304,\"text\":\"Homelab gram1.ru \\u043f\\u043e\\u0441\\u0442\\u0440\\u043e\\u0435\\u043d \\u0432\\u043e\\u043a\\u0440\\u0443\\u0433 Proxmox-\\u043a\\u043b\\u0430\\u0441\\u0442\\u0435\\u0440\\u0430, \\u0432\\u043d\\u0443\\u0442\\u0440\\u0435\\u043d\\u043d\\u0435\\u0433\\u043e DNS, NPMplus reverse proxy, \\u043c\\u043e\\u043d\\u0438\\u0442\\u043e\\u0440\\u0438\\u043d\\u0433\\u0430, backup \\u0438 \\u043d\\u0430\\u0431\\u043e\\u0440\\u0430 self-hosted \\u0441\\u0435\\u0440\\u0432\\u0438\\u0441\\u043e\\u0432.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23647,\"text\":\"- edge-vm hosting reverse proxy and most application containers.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23719,\"text\":\"- Purpose: reverse proxy and TLS termination.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23782,\"text\":\"- Domain: https://git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24054,\"text\":\"- Remote: https://git.gram1.ru/homelab-admin/homelab-configs\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24193,\"text\":\"- https://git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24406,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | yes | LAN only | git.gram1.ru | enabled |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24438,\"text\":\"| git.gram1.ru | letsencrypt | 2026-09-13 17:36:55 |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24465,\"text\":\"| `git.gram1.ru` | `http://127.0.0.1:3002` | cert id 29 | yes | Gitea |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24708,\"text\":\"5. Recover reverse proxy/Kuma/Auth/Gitea/Vaultwarden and service configs.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24721,\"text\":\"git clone https://git.gram1.ru/homelab-admin/homelab-configs.git\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":25074,\"text\":\"git clone https://git.gram1.ru/homelab-admin/homelab-configs.git\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":25411,\"text\":\"- reverse proxy upstream;\"},{\"path\":\"/root/771_crowdsec_capi_ipv4_restore_or_fallback.sh\",\"line\":326,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":211,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/root/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":304,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/root/772b_homepage_russian_normalize_apply.sh\",\"line\":89,\"text\":\"    \\\"NPMplus\\\": \\\"\\u0410\\u0434\\u043c\\u0438\\u043d\\u0438\\u0441\\u0442\\u0440\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 reverse proxy.\\\",\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":1316,\"text\":\"IP_ROUTE|185.225.35.6 via [PRIVATE_IP] dev eth0 src [PRIVATE_IP] \"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2390,\"text\":\"NPM_ROW|proxy_host|{\\\"domain_names\\\":\\\"[\\\\\\\"git.gram1.ru\\\\\\\"]\\\",\\\"enabled\\\":1,\\\"forward_host\\\":\\\"127.0.0.1\\\",\\\"forward_port\\\":3002,\\\"forward_scheme\\\":\\\"http\\\",\\\"id\\\":9}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2433,\"text\":\"NPM_ROW|proxy_host|{\\\"domain_names\\\":\\\"[\\\\\\\"chat.gram1.ru\\\\\\\",\\\\\\\"groups.chat.gram1.ru\\\\\\\",\\\\\\\"share.chat.gram1.ru\\\\\\\"]\\\",\\\"enabled\\\":1,\\\"forward_host\\\":\\\"[PRIVATE_IP]\\\",\\\"forward_port\\\":443,\\\"forward_scheme\\\":\\\"https\\\",\\\"id\\\":61}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2440,\"text\":\"NPM_ROW|certificate|{\\\"domain_names\\\":\\\"[\\\\\\\"git.gram1.ru\\\\\\\"]\\\",\\\"id\\\":29,\\\"nice_name\\\":\\\"git.gram1.ru\\\",\\\"provider\\\":\\\"letsencrypt\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2445,\"text\":\"NPM_ROW|certificate|{\\\"domain_names\\\":\\\"[\\\\\\\"chat.gram1.ru\\\\\\\",\\\\\\\"groups.chat.gram1.ru\\\\\\\",\\\\\\\"share.chat.gram1.ru\\\\\\\"]\\\",\\\"id\\\":38,\\\"nice_name\\\":\\\"chat.gram1.ru, groups.chat.gram1.ru, share.chat.gram1.ru\\\",\\\"provider\\\":\\\"letsencrypt\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2456,\"text\":\"DOMAIN|chat.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2464,\"text\":\"DOMAIN|git.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2468,\"text\":\"DOMAIN|groups.chat.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2495,\"text\":\"DOMAIN|share.chat.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2607,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"[PRIVATE_IP]\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"domain\\\":\\\"chat.gram1.ru\\\",\\\"https\\\":\\\"302|[PRIVATE_IP]|https://chat.gram1.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2610,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"codevipe.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2615,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"MX\\\":[],\\\"domain\\\":\\\"dsmods.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2617,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"gamevipe.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2618,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"git-read.gram1.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2619,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"git.gram1.ru\\\",\\\"https\\\":\\\"200|[PRIVATE_IP]|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2623,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"gram1.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://gram1.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2624,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"[PRIVATE_IP]\\\"],\\\"AAAA\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"MX\\\":[],\\\"domain\\\":\\\"groups.chat.gram1.ru\\\",\\\"https\\\":\\\"301|[PRIVATE_IP]|https://chat.gram1.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2625,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"hapusya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2626,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"hbarhub.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2627,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"hkmods.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2635,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"kingofwolk.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2645,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"newfi.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2646,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"newfilya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2656,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[\\\"10\\\",\\\"mail.pvepro.ru.\\\"],\\\"domain\\\":\\\"pvepro.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://pvepro.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2659,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"[PRIVATE_IP]\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"share.chat.gram1.ru\\\",\\\"https\\\":\\\"301|[PRIVATE_IP]|https://chat.gram1.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2661,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"taftauto.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2666,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.codevipe.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://codevipe.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2667,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.dsmods.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://dsmods.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2668,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.gamevipe.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://gamevipe.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2669,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"domain\\\":\\\"www.gram1.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://www.gram1.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2670,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.hapusya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2671,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.hbarhub.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2672,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.hkmods.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://hkmods.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2673,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.kingofwolk.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2674,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.newfi.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2675,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.newfilya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2676,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.pvepro.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://www.pvepro.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2677,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.taftauto.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2678,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.zakrutim.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://zakrutim.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2679,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"zakrutim.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/diag-pve03-dns2-20260615T091114Z.txt\",\"line\":261,\"text\":\"debug1: Remote: [SENSITIVE_PATH] key options: agent-forwarding port-forwarding pty user-rc x11-forwarding\"},{\"path\":\"/root/diag-pve03-dns2-20260615T091114Z.txt\",\"line\":263,\"text\":\"debug1: Remote: [SENSITIVE_PATH] key options: agent-forwarding port-forwarding pty user-rc x11-forwarding\"},{\"path\":\"/root/771x_crowdsec_capi_mtu_hardfix.sh\",\"line\":542,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771f_crowdsec_capi_godebug_mss_fix.sh\",\"line\":344,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771l_crowdsec_capi_netbird_vps_egress.sh\",\"line\":695,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/homelab_network_equipment_audit_20260623T170441Z.txt\",\"line\":154,\"text\":\"--- git.gram1.ru ---\"},{\"path\":\"/root/homelab_network_equipment_audit_20260623T170441Z.txt\",\"line\":155,\"text\":\"[PRIVATE_IP]   STREAM git.gram1.ru\"},{\"path\":\"/root/767_deep_tail_and_regression_audit.sh\",\"line\":40,\"text\":\"  echo \\\"1 reverse_proxy_upstream_and_headers\\\"\"},{\"path\":\"/root/767_deep_tail_and_regression_audit.sh\",\"line\":70,\"text\":\"    auth.gram1.ru photos.gram1.ru homeassistant.vpn.gram1.ru vault.gram1.ru git.gram1.ru paper.gram1.ru \\\\\"},{\"path\":\"/root/Workers2_AUDIT0_collect_2026-08-23.sh\",\"line\":15,\"text\":\"GITEA_HOST=\\\"${AUDIT_GITEA_HOST:-git.gram1.ru}\\\"\"},{\"path\":\"/root/Workers2_AUDIT0_collect_2026-08-23.sh\",\"line\":16,\"text\":\"GITEA_REPO=\\\"${AUDIT_GITEA_REPO:-https://git.gram1.ru/homelab-admin/homelab-ops.git}\\\"\"},{\"path\":\"/root/homelab-clean-machine-bootstrap-rehearsal-v1.sh\",\"line\":92,\"text\":\"export DEBIAN_FRONTEND=noninteractive\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":101,\"text\":\"--- git.gram1.ru ---\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":102,\"text\":\"[PRIVATE_IP]   STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1479,\"text\":\"    - domain: git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1545,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1546,\"text\":\"95.84.154.183   STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1739,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1740,\"text\":\"95.84.154.183   STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2028,\"text\":\"    - domain: git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2091,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2092,\"text\":\"95.84.154.183   STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2265,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2266,\"text\":\"95.84.154.183   STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3358,\"text\":\"      GITEA__server__DOMAIN: git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3359,\"text\":\"      GITEA__server__ROOT_URL: https://git.gram1.ru/\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3668,\"text\":\"9   [\\\"git.gram1.ru\\\"]                http            127.0.0.1      3002          29              1           0             0                1              1                        0               0                1      \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3718,\"text\":\"29  git.gram1.ru                      [\\\"git.gram1.ru\\\"]                                                                         letsencrypt  2026-09-13 17:36:55\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3855,\"text\":\"      href: https://git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3910,\"text\":\"      description: Reverse proxy admin\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":5196,\"text\":\"### DNS git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":5197,\"text\":\"[PRIVATE_IP]   STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":5322,\"text\":\"https://git.gram1.ru/ => 200\"},{\"path\":\"/root/CR0085_IMPLEMENTATION_INPUT_20260819.txt\",\"line\":1358,\"text\":\"   \\\"out-data\\\" : \\\"UNIT_BEGIN\\\\n# /etc/systemd/system/homelab-git-read.service\\\\n[Unit]\\\\nDescription=Read-only Gitea facade for ChatGPT\\\\nAfter=network-online.target\\\\nWants=network-online.target\\\\n\\\\n[Service]\\\\nType=simple\\\\nUser=gitread\\\\nGroup=gitread\\\\nExecStart=/usr/bin/python3 /usr/local/libexec/homelab-git-read\\\\nRestart=on-failure\\\\nRestartSec=2\\\\nNoNewPrivileges=true\\\\nPrivateTmp=true\\\\nPrivateDevices=true\\\\nProtectSystem=strict\\\\nProtectHome=true\\\\nProtectKernelTunables=true\\\\nProtectKernelModules=true\\\\nProtectControlGroups=true\\\\nRestrictAddressFamilies=AF_INET AF_INET6\\\\nLockPersonality=true\\\\nMemoryDenyWriteExecute=true\\\\n\\\\n[Install]\\\\nWantedBy=multi-user.target\\\\nUNIT_END\\\\nSOURCE_BEGIN\\\\nd6110a75f789e56231196c314046263785a795ce3d220de9272777a718bca382  /usr/local/libexec/homelab-git-read\\\\n#!/usr/bin/env python3\\\\nfrom __future__ import annotations\\\\nimport base64, json, os, re\\\\nfrom http.server import BaseHTTPRequestHandler, ThreadingHTTPServer\\\\nfrom urllib.parse import parse_qs, quote, urlparse\\\\nfrom urllib.request import Request, urlopen\\\\nfrom urllib.error import HTTPError, URLError\\\\n\\\\nHOST=\\\\\\\"0.0.0.0\\\\\\\"\\\\nPORT=8787\\\\nAPI=\\\\\\\"https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-ops\\\\\\\"\\\\nTOKEN_FILE=\\\\\"},{\"path\":\"/root/771j_crowdsec_capi_via_cloudflare_warp_proxy.sh\",\"line\":228,\"text\":\"  export DEBIAN_FRONTEND=noninteractive\"},{\"path\":\"/root/771j_crowdsec_capi_via_cloudflare_warp_proxy.sh\",\"line\":567,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771k_fix_warp_register_or_clean.sh\",\"line\":569,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/Workers2_AUDIT1_deep_collect_20260823_v1.py\",\"line\":24,\"text\":\"GITEA_REPO = \\\"https://git.gram1.ru/homelab-admin/homelab-ops.git\\\"\"},{\"path\":\"/root/Workers2_AUDIT1_deep_collect_20260823_v1.py\",\"line\":25,\"text\":\"GITEA_HOST = \\\"git.gram1.ru\\\"\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":257,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":546,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":614,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":625,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":647,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":696,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1000,\"text\":\"  - https://git.gram1.ru\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1056,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1299,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1313,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1864,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2095,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2107,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2457,\"text\":\"- Recommended future path: establish VPN/NetBird/WireGuard or reverse-proxy/private management endpoint first; then issue DNS-01 certificate on a trusted node and deploy cert/key to the router only over that private path.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2503,\"text\":\"- TLS terminates on edge using certbot DNS-01 cert router-taftauto.ru.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2814,\"text\":\"- Primary domain: chat.gram1.ru.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2815,\"text\":\"- groups.chat.gram1.ru and share.chat.gram1.ru are Snikket service domains.\"},{\"path\":\"/root/hread-06.py\",\"line\":108,\"text\":\"            if (u.scheme != 'https' or u.netloc != 'git.gram1.ru' or\"},{\"path\":\"/root/771e_abort_cleanup_verify_stable.sh\",\"line\":100,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/hread-04.py\",\"line\":104,\"text\":\"            if (u.scheme != 'https' or u.netloc != 'git.gram1.ru' or\"},{\"path\":\"/root/771s_vps_identity_repair_netbird_capi.sh\",\"line\":704,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771q_netbird_public_vps_repair_then_capi.sh\",\"line\":594,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/build_full_8020_demonov_handoff.sh\",\"line\":351,\"text\":\"https://git.gram1.ru/homelab-admin/8020-demonov-shadow-bot.git\"},{\"path\":\"/root/771ae_crowdsec_capi_soak_final.sh\",\"line\":105,\"text\":\"  for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.r...<truncated>
SSH_CONFIG_REFERENCES=[{"line":"# users, and the values can be changed in per-user configuration files","path":"/etc/ssh/ssh_config"},{"line":"Host *","path":"/etc/ssh/ssh_config"},{"line":"#   ProxyCommand ssh -q -W %h:%p gateway.example.com","path":"/etc/ssh/ssh_config"}]
FINAL_DECISION=FRONTEND_FORENSIC3_COMPLETE_NO_MUTATION
FORENSIC3_END=true

OUTPUT_END
CHAT_OUTPUT_END
