VoidRun provides native Tailscale integration, allowing sandboxes to securely connect to your private tailnet. This enables AI agents and code execution environments to interact with internal APIs, databases, and services without exposing them to the public internet.
🔒 Zero-Trust Security
WireGuard-based encryption with automatic key rotation.
🌐 Private Access
Connect to internal APIs, databases, and services securely.
⚡ Simple Setup
Pre-installed in all VoidRun images. Just authenticate and connect.
Ephemeral: Enable (recommended) - nodes auto-remove after disconnect
Tags: Optional - assign ACL tags for access control
Copy the auth key (starts with tskey-auth-)
3
Store Auth Key Securely
Store your auth key in environment variables or a secrets manager. Never commit it to source control.
Ephemeral nodes are strongly recommended for VoidRun sandboxes. Without ephemeral mode, each sandbox creates a permanent node in your tailnet, which can clutter your network and reach node limits.
import { VoidRun } from '@voidrun/sdk';const vr = new VoidRun({ apiKey: process.env.VOIDRUN_API_KEY });const sandbox = await vr.createSandbox({ cpu: 2, mem: 2048 });const authKey = process.env.TAILSCALE_AUTH_KEY!;// Connect with a tag for ACL controlawait sandbox.exec({ command: `sudo tailscale up --authkey=${authKey} --hostname=voidrun-agent --tag=tag:voidrun`});// The tag allows you to control what this sandbox can access via Tailscale ACLsconsole.log('Connected with tag:voidrun');
import { VoidRun } from '@voidrun/sdk';const vr = new VoidRun({ apiKey: process.env.VOIDRUN_API_KEY });const sandbox = await vr.getSandbox('sandbox-id');// Connect to Tailscale first (see above)// ...// Access an internal API via Tailscaleconst result = await sandbox.exec({ command: 'curl -s http://internal-api.tailnet-name.tsvc:8080/health'});console.log('Internal API response:', result.data?.stdout);// Access using Tailscale MagicDNSconst dbResult = await sandbox.exec({ command: 'curl -s http://postgres.internal.ts.net:5432/status'});
import { VoidRun } from '@voidrun/sdk';const vr = new VoidRun({ apiKey: process.env.VOIDRUN_API_KEY });const sandbox = await vr.getSandbox('sandbox-id');// SSH to an internal server via Tailscale// Note: You'll need to set up SSH keys firstawait sandbox.exec({ command: 'ssh user@internal-server.tailnet-name.ts.net "uname -a"'});
Ephemeral nodes are critical for VoidRun sandboxes. Each sandbox creates a new node in your tailnet. Without ephemeral mode, these nodes persist forever, cluttering your network and potentially reaching Tailscale’s node limits.
Security Note: Auth keys provide access to your entire tailnet (limited by ACLs). Treat them like passwords. Rotate keys regularly and use tags to limit access scope.