Part 5 - Relocating Offsite#
If you haven’t already, complete Part 4 - Hyper Backup Configuration and Local Seeding before continuing. With a full backup on the rsyncd server, this part covers moving the server offsite and routing Hyper Backup through a proxy VM.
What We Are Doing#
There are four pieces of work in this part:
- Install Tailscale on the rsyncd server.
- Physically move the rsyncd server to its offsite location.
- Build a proxy VM on the home network. Assign a static IP. Enable BBR. Install Tailscale. Configure HAProxy.
- Update the Hyper Backup task to point at the proxy VM instead of the rsyncd server directly.
This guide uses Tailscale MagicDNS so HAProxy can refer to the rsyncd server by hostname instead of IP. Make sure MagicDNS is enabled in your Tailscale admin console under DNS before continuing.
Step 1 - Install Tailscale on the rsyncd Server#
SSH into the rsyncd server and run:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale upTailscale will print an authentication link. Open it in any browser and log in.
Confirm the machine registered under the expected hostname:
tailscale statusThe hostname shown here is what HAProxy will use to reach this server later. It defaults to the system’s hostname. Note it down. If you want to change it, rename the node in the Tailscale admin console now.
Do not unplug the server until tailscale status shows it as registered. Once Tailscale is working, you have remote access if anything goes wrong after the move.
(Optional) Lock Down Access to Tailscale Only#
Limits SSH (22) and rsync (873) to your Tailscale network, blocking LAN and public access.
Find your Tailscale interface (usually tailscale0):
ip addrAllow SSH and rsync only over Tailscale:
sudo ufw allow in on tailscale0 to any port 22
sudo ufw allow in on tailscale0 to any port 873Double-check the rules, then enable the firewall:
sudo ufw show added
sudo ufw enableMake sure you are connected over Tailscale before enabling, or you may lock yourself out.
Step 2 - Move the rsyncd Server Offsite#
Shut down the rsyncd server cleanly:
sudo shutdown nowUnplug it and move it to its offsite location along with the USB hard drive. Plug it in, connect it to the network, and power it on.
From any device on your tailnet (your workstation, laptop, phone), verify the server is back online:
tailscale statusYou should see the rsyncd server listed. SSH into it over Tailscale and confirm rsyncd is running:
sudo systemctl status rsyncIf anything is wrong, you have remote access to fix it.
Step 3 - Proxy VM Setup#
The proxy server can live anywhere on your LAN, physical or virtual. Out of convenience, I run mine as a VM on Synology’s Virtual Machine Manager. Install Ubuntu Server, then continue below.
Assign a Static IP#
Hyper Backup will be configured to point at the proxy VM’s LAN IP, so that IP must not change. Configure a static address with netplan.
SSH into the proxy VM and find the existing netplan config:
sudo ls /etc/netplan/Edit the file (the filename will vary):
sudo nano /etc/netplan/50-cloud-init.yamlReplace the contents with the following, adjusting the interface name, address, gateway, and DNS servers to match your network. Confirm the interface name with ip a if you are unsure:
network:
version: 2
ethernets:
INTERFACE_NAME_HERE:
dhcp4: no
addresses:
- 192.168.1.50/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 192.168.1.1
- 1.1.1.1Apply the configuration:
sudo netplan applyIf you were SSHed in over the old DHCP address, your session will drop. Reconnect on the new static address.
Enable BBR#
Run:
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
sudo sysctl -pVerify it is active:
sysctl net.ipv4.tcp_congestion_control
# Expected output: net.ipv4.tcp_congestion_control = bbrInstall Tailscale#
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale upTailscale will print an authentication link. Open it in any browser and log in.
Configure HAProxy#
Install HAProxy:
sudo apt install haproxy -y
sudo nano /etc/haproxy/haproxy.cfgAdd the following. Replace rsync-server with the hostname of your rsyncd server as it appears in your Tailscale admin console:
frontend rsyncd_gate
bind *:873
mode tcp
timeout client 1h
default_backend rsyncd_offsite
backend rsyncd_offsite
mode tcp
timeout server 1h
server offsite rsync-server:873 checkEnable on boot and restart HAProxy:
sudo systemctl restart haproxy
sudo systemctl enable haproxyConfirm it is running:
sudo systemctl status haproxyConfigure HAProxy to Retry on Boot#
If the proxy VM reboots, HAProxy will fail to start. It tries to resolve the rsyncd server’s MagicDNS hostname before Tailscale is up, the lookup fails, and the service exits. Add a systemd override so HAProxy keeps retrying until Tailscale comes up and the name resolves.
Open the override editor:
sudo systemctl edit haproxyThis opens the override file in nano. Near the top you will see two comment markers. Place the override between them. Anything written below the second marker will be discarded. Everything is case sensitive. :
### Anything between here and the comment below will become the contents of the drop-in file
[Service]
Restart=on-failure
RestartSec=30s
StartLimitBurst=0
### Edits below this comment will be discardedSave and exit. Reload systemd to pick up the change:
sudo systemctl daemon-reloadHow This Works#
The NAS sends its Hyper Backup job to the proxy VM’s LAN IP on port 873. HAProxy accepts that connection and opens a new one outbound to the offsite rsyncd over Tailscale. Two separate TCP sessions stitched at layer 4. The long-haul leg to the offsite server originates from the proxy VM, not from DSM, so it benefits from BBR.
The NAS never crosses the internet. From Hyper Backup’s perspective, it is just talking to a local rsyncd server.
Verify End-to-End Connectivity#
Test that HAProxy is correctly forwarding to the offsite rsyncd server over Tailscale. The simplest way is to run the test from the proxy VM itself, hitting its own LAN IP. This looks recursive (the VM connecting to itself) but it works: the connection still goes through HAProxy, out over Tailscale to the offsite server, and back. Any other Linux machine on your LAN works too if you would rather test from there.
Replace <proxy-vm-lan-ip> with the proxy VM’s static IP from earlier in this step:
rsync rsync://synology@<proxy-vm-lan-ip>/backupEnter the password when prompted. You should see backup folder synology created in Part 4. If you do, the full path works.
Step 4 - Update Hyper Backup#
The backup task from Part 4 is currently pointing at the rsyncd server’s old LAN IP. That server is no longer on your network. Update the task to point at the proxy VM’s static LAN IP instead.
Open Hyper Backup on the NAS and navigate to:
Rsync Backup Job > Edit > Target > LAN IP
Replace the old IP with the proxy VM’s static LAN IP. Leave every other setting alone.
Save the task. The target should say it’s on-line. Run the backup
Upload Speed Cap Now that the backup is running over your residential internet connection, consider setting an upload speed limit in Hyper Backup’s settings to prevent it from saturating your uplink.
Verify the First Incremental Backup#
The first run after relocation will be a normal incremental, not a full backup. It should be small and quick, transferring only changes since the seed.
Test a restore from the offsite destination. Before trusting this setup long term, confirm you can restore at least one file now that the server is offsite.
Local Restore Tip: If you need to restore a large amount of data, bring the rsync server back onto your local network and update your Hyper Backup job to point to its local IP address. This avoids the bandwidth and time constraints of restoring over the internet.