A connector normally needs a public address it can dial. Exorails Connect lets it reach a host that is only visible from inside your network: a small agent on one of your machines keeps an outbound tunnel open, and only the routes you declare go through it.
exorails-connect on a Linux machine that can see the target (a bastion, a small VM in the VPC, the database host itself). It only makes outbound HTTPS connections to Exorails, so there is nothing to open on your firewall and no public IP to allow-list.db → 10.0.1.12:5432). The agent refuses to dial anything else, whatever the gateway asks.Open the environment's Private network tab and click Add a machine. You get a one-time enrollment token (valid 15 minutes) and the install command:
curl -fsSL https://api.exorails.net/connect/install.sh | sh -s -- --token exe_…
The script downloads the binary for your architecture (amd64 or arm64), verifies its checksum, installs it as a systemd service running as an unprivileged user, and enrolls the machine. The machine appears in the tab as soon as it connects. Without curl | sh, download exorails-connect-linux-amd64 or -arm64 from https://api.exorails.net/connect/dist/ and run:
exorails-connect up --token exe_… --name bastion-eu exorails-connect status
Enrollment gives the machine its own credential, stored in /etc/exorails/connect.json (mode 0600). The enrollment token is consumed; it cannot be reused. The agent reconnects by itself after a network blip or a reboot.
From Machines (organization level) add the hosts the machine may reach. Private addresses are fine here, that is the point; loopback and cloud metadata addresses are refused. One machine can hold many routes and serve many environments.
db 10.0.1.12:5432 PostgreSQL in the VPC analytics warehouse.internal:8443 ClickHouse cache 10.0.1.40:6379 Redis
In the environment's Tools tab pick a connector (PostgreSQL, MySQL, SQL Server, ClickHouse, Redis, MongoDB, Elasticsearch, SSH, Kubernetes, Prometheus, S3-compatible, REST or GraphQL API), choose the machine and route under Reach via, and paste the credential exactly as you would for a public host, using the private address:
postgres://readonly:…@10.0.1.12:5432/app?sslmode=require
The host in the credential must match the route; a mismatch is refused before any byte is sent. Everything else is unchanged: read-only by default, bounded output, one call logged per tool call.
wss://mcp.exorails.net; nothing listens on your machine.