2026 cleanup
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
skz-opack/
|
||||||
4
.sloptrap
Normal file
4
.sloptrap
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
name=skz-void
|
||||||
|
packages_extra=vagrant make jq python3 ripgrep curl git openssh-client
|
||||||
|
agent=codex
|
||||||
|
allow_host_network=true
|
||||||
76
AGENTS.md
Normal file
76
AGENTS.md
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
# Agent Guide
|
||||||
|
|
||||||
|
This repository builds and deploys OpenBSD VPN servers on Google Cloud. The goal is to make it easy to create multiple VPN VMs in two flavors:
|
||||||
|
|
||||||
|
- WireGuard, matching the existing historical deployment in `server/`.
|
||||||
|
- IPsec, using OpenBSD `iked`/`ipsecctl`.
|
||||||
|
|
||||||
|
Keep this repository focused on VPN server definitions, provisioning glue, firewall rules, and run commands. The local `skz-opack/` directory is an ignored dependency that provides the OpenBSD image/build/deploy Makefile interface. Read it when you need to understand `OPACK_*` variables or targets, but do not modify it unless the user explicitly asks for dependency work.
|
||||||
|
|
||||||
|
## Repository Shape
|
||||||
|
|
||||||
|
- `server/` is the current WireGuard deployment. It includes the OpenBSD install disklabel, provisioning script, GCP firewall overlay, and Makefile using `../skz-opack/src/opack.mk`.
|
||||||
|
- `src/` is early IPsec/iked work and should stay separate from WireGuard-specific provisioning.
|
||||||
|
- Future VPN servers should live in separate directories or separate Makefiles. Do not merge WireGuard and IPsec into one opaque shared Makefile until real duplication justifies it.
|
||||||
|
- Each server definition should declare its own `OPACK_TARGET`, hostname, GCP project/key settings, provision script, firewall rules, client list, and generated-state ignore patterns.
|
||||||
|
|
||||||
|
## Tools And Installation
|
||||||
|
|
||||||
|
Before build or deployment work, verify the required host tools:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
for x in make jq python3 rg curl git ssh scp nc vagrant packer terraform gcloud qemu-system-x86_64; do command -v "$x" || echo "missing: $x"; done
|
||||||
|
```
|
||||||
|
|
||||||
|
In sloptrap/Codex containers, install missing third-party tools under `/sloptrap-tools` and expose executables through `/sloptrap-tools/bin`, which is already on `PATH`. Do not install toolchains into this repo, `$HOME`, or one-off directories.
|
||||||
|
|
||||||
|
Use `/sloptrap-tools` for SDKs, plugins, and caches when configurable. For example, a Google Cloud SDK install may live under `/sloptrap-tools/google-cloud-sdk` with `/sloptrap-tools/bin/gcloud` symlinked to the real executable. Keep Packer plugin caches and similar generated tool state under `/sloptrap-tools` when possible.
|
||||||
|
|
||||||
|
## Secrets And Live State
|
||||||
|
|
||||||
|
`server/` may contain ignored live credentials and generated deployment state:
|
||||||
|
|
||||||
|
- `id_ed25519`
|
||||||
|
- `skz-void-bbb88f038188.json`
|
||||||
|
- `opack-cloud`
|
||||||
|
- `opack_deploy_*`
|
||||||
|
- `opack_installer_*`
|
||||||
|
|
||||||
|
Never commit, print, copy into tracked files, rotate, delete, or regenerate these files unless the user explicitly asks. Treat them as live operational material.
|
||||||
|
|
||||||
|
Agents may SSH for read-only diagnostics when useful, using the ignored key and current deployed IP:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ssh -i server/id_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@$(cat server/opack-cloud) 'uname -a; sysctl kern.version'
|
||||||
|
```
|
||||||
|
|
||||||
|
Do not change services, firewall rules, VPN keys, GCP resources, package state, or deployed configuration on the live VM without explicit user approval.
|
||||||
|
|
||||||
|
## Workflows
|
||||||
|
|
||||||
|
For existing WireGuard deployment work, the main entrypoint is:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make -C server void
|
||||||
|
```
|
||||||
|
|
||||||
|
This is not a harmless check. It may build an OpenBSD image, run Terraform, apply firewall rules, copy the external `skz-wg` tree to the live VM, and run remote provisioning. Use it only when the user wants deployment or provisioning work.
|
||||||
|
|
||||||
|
For read-only live inspection, prefer direct SSH commands and report exactly what was inspected. Avoid broad commands that dump secrets or large config files.
|
||||||
|
|
||||||
|
For future IPsec work, use OpenBSD-native `iked`/`ipsecctl` conventions. Keep IPsec provisioning, firewall rules, client/certificate generation, and run targets separate from WireGuard. Make IPsec firewall allowances explicit instead of reusing the WireGuard UDP rule.
|
||||||
|
|
||||||
|
For future multi-server work, prefer adding a new isolated server directory or Makefile that includes `../skz-opack/src/opack.mk` and overrides `OPACK_*` values before the include. Keep generated files ignored next to the server that creates them.
|
||||||
|
|
||||||
|
## Validation
|
||||||
|
|
||||||
|
For documentation-only changes, validate with:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sed -n '1,240p' AGENTS.md
|
||||||
|
git diff -- AGENTS.md
|
||||||
|
```
|
||||||
|
|
||||||
|
Do not run deployment targets as documentation validation.
|
||||||
|
|
||||||
|
For Makefile/provisioning changes, use the narrowest non-destructive validation first, such as reading expanded Make variables, shell syntax checks, or targeted dry-run inspection. Treat `make ... opack-cloud`, `make -C server void`, Terraform apply/destroy, and remote provisioning commands as live infrastructure changes.
|
||||||
5
server/.gitignore
vendored
Normal file
5
server/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
skz-void-bbb88f038188.json
|
||||||
|
opack-cloud
|
||||||
|
opack_deploy_*
|
||||||
|
opack_installer_*
|
||||||
|
id_ed25519
|
||||||
51
server/Makefile
Normal file
51
server/Makefile
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
OPACK_TARGET= skz-void-server
|
||||||
|
OPACK_SYS_VERSION= snapshots
|
||||||
|
OPACK_SYS_CPU= 2
|
||||||
|
OPACK_SYS_MEMORY= 1024
|
||||||
|
OPACK_SYS_DISK_SIZE= 10000
|
||||||
|
OPACK_SYS_SETS= +* -x* +xbase* -game* -comp* +bsd.rd
|
||||||
|
OPACK_SYS_HOSTNAME= void.sk4.nz
|
||||||
|
OPACK_SYS_USER= sk4nz
|
||||||
|
#OPACK_SYS_SSH_PRIVATE_KEY= $(HOME)/.ssh/id_ed25519
|
||||||
|
OPACK_GCE_MACHINE= e2-micro
|
||||||
|
OPACK_AUTODISKLABEL_FILE= $(shell realpath ./autodisklabel)
|
||||||
|
OPACK_PROVISION_FILE= $(shell realpath void-provision.sh)
|
||||||
|
OPACK_GCE_PROJECT= skz-void
|
||||||
|
OPACK_GCE_JSON_KEY= skz-void-bbb88f038188.json
|
||||||
|
OPACK_DEBUG=y
|
||||||
|
|
||||||
|
include ../skz-opack/src/opack.mk
|
||||||
|
|
||||||
|
SSH_OPTS= -i $(OPACK_SYS_SSH_PRIVATE_KEY) -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
|
||||||
|
FW_TF= $(OPACK_TERRAFORM_DIR)/opack-module/firewall.tf
|
||||||
|
|
||||||
|
IN_TCP= ssh
|
||||||
|
VPN_TCP= ssh domain http https 1024:65535
|
||||||
|
VPN_UDP= domain ntp 1024:65535
|
||||||
|
|
||||||
|
VOID_CLIENTS= psychopomp skzphone miri
|
||||||
|
|
||||||
|
.DEFAULT_GOAL := all
|
||||||
|
|
||||||
|
all: void
|
||||||
|
|
||||||
|
$(FW_TF): | opack-cloud
|
||||||
|
cp firewall.tf $@
|
||||||
|
cd $(OPACK_TERRAFORM_DIR) && terraform apply \
|
||||||
|
-target=module.opack-module.google_compute_firewall.icmp \
|
||||||
|
-target=module.opack-module.google_compute_firewall.wireguard \
|
||||||
|
-target=module.opack-module.google_compute_firewall.ssh \
|
||||||
|
-auto-approve > /dev/null
|
||||||
|
echo ▒ GCP Firewall configured
|
||||||
|
#-target=module.opack-module.google_compute_firewall.deny \
|
||||||
|
|
||||||
|
void: | $(FW_TF)
|
||||||
|
ssh $(SSH_OPTS) root@$(shell cat opack-cloud) \
|
||||||
|
"uname -a; sysctl kern.version;" 2> /dev/null
|
||||||
|
scp -q -r $(SSH_OPTS) \
|
||||||
|
../../skz-wg root@$(shell cat opack-cloud):/root/skz-wg
|
||||||
|
#vagrant ssh -c "make -C run bootstrap"
|
||||||
|
ssh $(SSH_OPTS) root@$(shell cat opack-cloud) \
|
||||||
|
"sh -c 'IN_TCP=\"$(IN_TCP)\" VPN_TCP=\"$(VPN_TCP)\" VPN_UDP=\"$(VPN_UDP)\" CLIENTS=\"$(VOID_CLIENTS)\" make -C /root/skz-wg'" 2> /dev/null
|
||||||
|
|
||||||
|
clean: opack-clean
|
||||||
5
server/autodisklabel
Normal file
5
server/autodisklabel
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
/ 1G-* 60%
|
||||||
|
swap 1G-2G 2%
|
||||||
|
/tmp 1G-4G 4%
|
||||||
|
/usr 3G-* 24%
|
||||||
|
/usr/local 2G-* 10%
|
||||||
46
server/firewall.tf
Normal file
46
server/firewall.tf
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
#resource "google_compute_firewall" "deny" {
|
||||||
|
# name = "deny-all"
|
||||||
|
# network = "default"
|
||||||
|
# direction = "INGRESS"
|
||||||
|
# deny {
|
||||||
|
# protocol = "all"
|
||||||
|
# }
|
||||||
|
# target_tags = ["skz-opack"]
|
||||||
|
# source_ranges = ["0.0.0.0/0"]
|
||||||
|
# priority = 1001
|
||||||
|
#}
|
||||||
|
|
||||||
|
resource "google_compute_firewall" "icmp" {
|
||||||
|
name = "allow-icmp"
|
||||||
|
network = "default"
|
||||||
|
direction = "INGRESS"
|
||||||
|
allow {
|
||||||
|
protocol = "icmp"
|
||||||
|
}
|
||||||
|
target_tags = ["skz-opack"]
|
||||||
|
source_ranges = ["0.0.0.0/0"]
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "google_compute_firewall" "wireguard" {
|
||||||
|
name = "allow-wireguard"
|
||||||
|
network = "default"
|
||||||
|
direction = "INGRESS"
|
||||||
|
allow {
|
||||||
|
protocol = "udp"
|
||||||
|
ports = ["5353"]
|
||||||
|
}
|
||||||
|
target_tags = ["skz-opack"]
|
||||||
|
source_ranges = ["0.0.0.0/0"]
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "google_compute_firewall" "ssh" {
|
||||||
|
name = "allow-ssh"
|
||||||
|
network = "default"
|
||||||
|
direction = "INGRESS"
|
||||||
|
allow {
|
||||||
|
protocol = "tcp"
|
||||||
|
ports = ["22"]
|
||||||
|
}
|
||||||
|
target_tags = ["skz-opack"]
|
||||||
|
source_ranges = ["0.0.0.0/0"]
|
||||||
|
}
|
||||||
1
server/id_ed25519.pub
Normal file
1
server/id_ed25519.pub
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHG+eIJBRWgko97xcSbp9EWI/LT82WKubSfYUvR7cErb sk4nz@psychopomp
|
||||||
22
server/void-provision.sh
Normal file
22
server/void-provision.sh
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
set +x
|
||||||
|
packages="htop vim--no_x11 nload"
|
||||||
|
(
|
||||||
|
echo VOID: Starting provisioning.
|
||||||
|
sysctl -n kern.version
|
||||||
|
printf 'hw.smt=1\n' >> /etc/sysctl.conf
|
||||||
|
printf 'permit nopass :wheel\n' > /etc/doas.conf
|
||||||
|
pkg_add -u 2> /dev/null || pkg_add -u -D snap 2> /dev/null
|
||||||
|
pkg_add -Iv $packages 2> /dev/null || pkg_add -Iv -D snap $packages 2> /dev/null
|
||||||
|
while(pgrep -f reorder_kernel > /dev/null) do echo Waiting for reorder_kernel to finish...; sleep 10; done
|
||||||
|
syspatch 2> /dev/null || (echo "No syspatch, continuing..."; true)
|
||||||
|
rm -f /etc/ssh/ssh_host*
|
||||||
|
find /var/log -type f | while read f; do echo -ne '' > $f; done
|
||||||
|
find /tmp -type f | while read f; do echo -ne '' > $f; done
|
||||||
|
for part in $(df | tail -n+2 | awk '{print $6}'); do dd if=/dev/zero of=$part/EMPTY bs=1M 2> /dev/null || true; rm -f $part/EMPTY || true; done
|
||||||
|
sync
|
||||||
|
sync
|
||||||
|
echo OPACK: provisionning done.
|
||||||
|
)
|
||||||
|
exit 0
|
||||||
26
src/Makefile
Normal file
26
src/Makefile
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
DATE= $$(date "+%H:%M:%S")
|
||||||
|
CLIENTS= sk4nz test
|
||||||
|
HOSTNAME!= cat /etc/myname
|
||||||
|
CA_PASSWORD= yolo
|
||||||
|
|
||||||
|
all: void
|
||||||
|
|
||||||
|
void: /etc/iked.conf $(CLIENTS)
|
||||||
|
@echo ▒ $(DATE) Void complete
|
||||||
|
|
||||||
|
$(CLIENTS): ca
|
||||||
|
ikectl ca void certificate $@.$(HOSTNAME) create
|
||||||
|
cp /etc/ssl/vpn/$@.$(HOSTNAME).crt /etc/iked/certs/
|
||||||
|
ikectl ca void certificate $@.$(HOSTNAME) export
|
||||||
|
tar -C /tmp -xzf $@.$(HOSTNAME).tgz *pfx
|
||||||
|
ls
|
||||||
|
#cp /tmp/export/client1.domain.pfx /var/www/htdocs/client1.domain.pfx
|
||||||
|
ls -lah
|
||||||
|
ls -lah /tmp
|
||||||
|
@echo ░ $(DATE) Client $@ configured
|
||||||
|
|
||||||
|
ca:
|
||||||
|
ikectl ca void create password $(CA_PASSWORD)
|
||||||
|
|
||||||
|
/etc/iked.conf:
|
||||||
|
@echo ░ $(DATE) IKED configured
|
||||||
Reference in New Issue
Block a user