# MikroTik WISP Router Backup Pipeline ## Pipeline Architecture ``` Core (netcup) → L2TP/IPsec VPN → MikroTik Router (WireGuard tunnel interface) ↓ SSH export config → gzip → S3 upload (mikrotik-ccr-backups) ``` ## Key Configuration | Setting | Value | |---------|-------| | Router IP (via VPN tunnel) | 10.77.0.2 | | LAN IP (NOT via VPN) | 192.168.88.1 | | SSH port | 22 (restricted to 10.77.0.0/24) | | Backup frequency | 6:00 AM daily | | S3 bucket | `mikrotik-ccr-backups` | | Script | `/root/.hermes/scripts/run-wisp-backup.sh` | | Config | `/root/.hermes/scripts/wisp-backup/config.yaml` | | Method | paramiko SSH → `/export` → gzip → S3 upload | ## Diagnosis When the backup fails: 1. Check cron: `cronjob action=list` — look for `home-router-daily-backup` status 2. Check VPN: `ipsec status` or `xl2tpd` — tunnel must be up 3. Check IP: router must be reachable on `10.77.0.2` (tunnel), NOT `192.168.88.1` (LAN) 4. Check for stuck exports: SSH in and check for `.in_progress` files 5. Check paramiko: `python3 -c "import paramiko"` ## Pitfalls - **Wrong IP in config** — The tower IP was set to `192.168.88.1` (LAN) instead of `10.77.0.2` (VPN tunnel). SSH is restricted to 10.77.0.0/24. - **Missing paramiko** — `wisp-backup.py` requires paramiko. Install with `pip install paramiko`. - **Missing VPN stack** — `xl2tpd` and `strongswan-starter` packages may not be installed on the backup server. - **Stuck exports** — If a previous export failed, the router retains a `.in_progress` file. Clean it via SSH: `ssh admin@10.77.0.2 /file remove [filename].in_progress` - **Wrong cron script** — The cron was using `home-router-backup.sh` (old WireGuard script) instead of `run-wisp-backup.sh`. ## Verification ```bash aws s3 ls s3://mikrotik-ccr-backups/wisp-backups/configs/home/ \ --endpoint-url https://s3.us-east-1.wasabisys.com ``` Files are named: `home-gateway-YYYY-MM-DD.rsc.gz`