# Linux x86-64 headless peer 1.6.8 Go 1.6.8 retains the latest authenticated server-assigned relay in the existing fallback cycle and atomically saves accepted redirects in the existing identity file. Retries can return to an assigned spare after a temporary outage, including after an SDK restart. Existing manual relay pins, healthy sibling protection, stale-redirect checks, target safety, Retry-After and exponential backoff remain. One socket is the default; explicit WS_CONNECTIONS or -connections settings are preserved. Upgrade one stopped device first, keeping its key, name and state. This client change does not repair an overloaded relay or prove customer routing. Control traffic and health probes are not billable customer traffic. This package is a standalone command-line program: no GUI, Go, Docker, Node.js or compiler is needed on the device. It needs Linux x86-64, outbound DNS/HTTPS/ WebSocket and target TCP access, an OS CA certificate store, and a valid farmer SDK/device key. The optional service installer requires systemd 235+ and sudo. Only deploy on devices with informed end-user consent and a current agreement. ## Current connection incident — October 3 The original EU and US SDK relays are experiencing intermittent connection failures under load. Registration can succeed while the subsequent WebSocket times out. This client update does not establish server recovery. Keep the original key, name and state; do not repeatedly reinstall or restart an entire fleet. Report one device ID, SDK version and UTC failure time to support, without secrets. ## Required source declaration Complete https://farmer.proxies.sx/settings#peer-source with the device owners and upstream suppliers, app/distribution channels, countries and network types, informed permission before traffic, and withdrawal process. Use your preferred language and keep the declaration current. Submission is not independent KYC or proof of consent; secure identity/business verification is being prepared. Do not email or paste identity documents, secrets, end-user lists or exit IPs. Source collection does not introduce a new automatic registration gate or change an existing signed agreement. ## Install one device first Download from https://agents.proxies.sx/peer/releases/1.6.8/: curl -fLO https://agents.proxies.sx/peer/releases/1.6.8/proxies-peer-linux-amd64.tar.gz curl -fLO https://agents.proxies.sx/peer/releases/1.6.8/SHA256SUMS sha256sum -c SHA256SUMS tar -xzf proxies-peer-linux-amd64.tar.gz cd proxies-peer-linux-amd64 sudo bash install.sh The installer asks privately for the SDK key and creates a stable random device name once. It keeps the key in /etc/proxies-peer/peer.env (root-only, 0600), runs as a systemd dynamic unprivileged user, and persists identity in /var/lib/proxies-peer/state.json. Keep BOTH configuration and state across restarts. Never copy a populated state/config directory into a device image. Existing configuration is retained; an already-running service is not replaced. For fleet automation provision a distinct stable AGENT_NAME per real device and a private 0600 EnvironmentFile before invoking install.sh. Never clone one name or state across devices. Stage the rollout centrally; jitter alone is not pacing. /usr/local/bin/proxies-peer -version sudo systemctl status proxies-peer --no-pager sudo journalctl -u proxies-peer -n 40 --no-pager Expect REGISTERED (or RESUMED), CONNECTED and ACK. Regional relay hostnames vary. The installer and standalone Go SDK default to one socket per device. Explicit settings are retained, normally clamped to five, hard maximum six. Do not increase sockets across a whole fleet without observing relay resources and NAT limits. ## Without systemd Extract the same package. Run as an ordinary dedicated user with a persistent, private HOME/state path. Read the key privately instead of putting it in shell history or command-line arguments: read -r -s -p 'SDK key: ' API_KEY; echo export API_KEY export AGENT_NAME='your-stable-unique-device-name' export PEER_STATE_FILE="$HOME/.local/state/proxies-peer/state.json" export WS_CONNECTIONS=1 REGISTER_JITTER_MS=30000 ./proxies-peer These are Bash commands. To stop, press Ctrl+C. Your orchestrator must preserve state, use bounded restarts, and stop retrying persistent 401/403 responses while support checks key/account/agreement status. Outbound access is required; no inbound port or root network capability is required by the SDK itself. ## Build fresh source (Linux x86-64) Use a currently supported Go compiler on the build machine. Start in a new working directory so an old local file cannot be compiled accidentally. These commands fetch the published 1.6.8 source, validate all three file checksums and build a standalone executable: ```bash set -eu build_dir="$(mktemp -d)" cd "$build_dir" curl -fL -H 'Cache-Control: no-cache' -o reference-sdk.go 'https://agents.proxies.sx/peer/releases/1.6.8/reference-sdk.go' curl -fL -H 'Cache-Control: no-cache' -o go.mod 'https://agents.proxies.sx/peer/releases/1.6.8/go.mod' curl -fL -H 'Cache-Control: no-cache' -o go.sum 'https://agents.proxies.sx/peer/releases/1.6.8/go.sum' sha256sum -c <<'SHA256SUMS' d18b26f4180fb73c9e1c7edcf8c764921132d967066d9e364824b1692a957ae6 reference-sdk.go f9bce7d0fa8c432f56c968e117ec09dd9a5896b88866fccc4b11437453e62110 go.mod 1737d5523b7264df09b253e86e29f96af295a7bd18e0aaa4373c6099317e065f go.sum SHA256SUMS go mod download go mod verify CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -o proxies-peer reference-sdk.go ./proxies-peer -version ``` The final command must print `proxies-peer 1.6.8` before installation. It exits without registering a device. These matching source/module files and the package are immutable in the 1.6.8 release directory; downloading them does not update installed devices. If any checksum differs, stop and check the current guide rather than using an old local source file. For cross-compilation on another OS, run the final version check on the Linux x86-64 target. The published archive above remains the simpler install path. If an existing device still reports 1.6.2, downloading source alone has not updated its executable. Follow the upgrade steps below for one stopped device, retaining the original key, device name and state. Check the installed path with `/usr/local/bin/proxies-peer -version`; your service may use a different path. ## Registration returns HTTP 403 Compiling `reference-sdk.go` yourself is supported. The source build and the published binary use the same registration endpoint and account checks; switching between them does not remove a server-side account restriction. A valid SDK key can still receive 403 when its owner account is suspended, the current Partner Agreement is missing, or a hard device limit is reached. A login that works does not by itself prove device registration is enabled. The current Go client reports the HTTP status without the server's detailed rejection body, so the number alone does not identify which check failed. 1. Sign in to the same account at https://farmer.proxies.sx and check the existing key in **API Keys** and the current agreement in **Partner Agreement**. 2. Ask support to check the account's registration status. Supply the account email, key **name**, one stable device name, SDK version and UTC error time. Never send the key, token or state file. An account restriction needs review on our side; generating more keys or repeatedly rebuilding is not a remedy. 3. After support confirms the restriction is cleared, retry **one** device with its original key/name/state. Look for `REGISTERED` or `RESUMED`, then `CONNECTED` and `ACK`, before increasing the cohort. Do not delete identity state, randomize names or start the whole fleet to diagnose 403. HTTP 401 and 429 are different outcomes; for 429 retain the retry/backoff behavior described below. ## Upgrade an existing device Download and verify the new archive above before stopping the existing service. Check `./proxies-peer -version` in the extracted directory; it should report 1.6.8. During a maintenance window for **one device**, stop its service, then run the verified local installer: sudo systemctl stop proxies-peer sudo bash install.sh /usr/local/bin/proxies-peer -version sudo journalctl -u proxies-peer -n 40 --no-pager Stopping disconnects that device's active tunnels. Keep the original `/etc/proxies-peer/peer.env` and `/var/lib/proxies-peer/state.json`; do not delete, copy or change the key/name/state to upgrade. The installer retains configuration and starts the updated service. Check the same device ID resumes and receives ACK before updating a small cohort. For a manually compiled build, fetch the matching source, `go.mod` and `go.sum`, rebuild, and replace the executable only while that process is stopped. Publication does not update running devices. ## Changes and limits Go 1.6.8 checks the actual resolved IPv4 target before opening a TCP connection and refuses private, loopback, link-local, CGNAT, benchmark and multicast/reserved ranges. It keeps the existing public IPv4 routing policy; IPv6-only targets are not supported. Registration, saved identity and relay protocol are unchanged. This package does not automatically update devices or certify fleet capacity. 1.6.3 preserves existing connections and their tunnels when they are already on the selected relay. A redirect closes only connections to other relays; competing redirects share the existing 60-second anti-flap limit. Explicit relay selection and the relay allowlist remain enforced. Upgrade one stopped device first. 1.6.2 prevents a stalled target TCP write from blocking the relay WebSocket reader and its control PONG responses. Target writes stay ordered, with bounded pending data and a 15-second write deadline; an over-limit or stalled target is closed without intentionally closing sibling tunnels. Pending writes drain on normal target FIN, and failed connection acknowledgments clean up that target. This is a client reliability fix, not a fleet-capacity or destination-success guarantee. Registration, saved identity and relay wire format are unchanged. 1.6.1 adds REGISTER_JITTER_MS (default 30000, maximum 3600000), up to five total registration attempts on transient failures/429/5xx with exponential backoff, jitter and Retry-After (seconds or HTTP date), atomic 0600 identity writes that fail visibly, 128-bit generated names, and key/name binding for saved state. Relay wire protocol is unchanged. Keep the original key/name/state when updating. Named legacy state migrates once by registering the same key and name; old state without a saved name needs the original explicit name. Corrupt state requires review/restoration; do not delete it blindly or randomize identities on errors. Server identity is agent_ plus the first 16 hexadecimal characters of SHA256(apiKey + ':' + name). Changing a key or name can create a new identity. No fleet/throughput capacity is guaranteed by successful installation. Start with one device, then a small controlled cohort, then progress toward the agreed 5,000-device pilot only after checks. At each stage verify online, verified, listed, real customer routing, country/IP classification, stable restart identity, successful token refresh, usage metering and resource headroom. Arrange an onboarding window with support; do not start thousands together. Online + verified alone does not prove listed/routable or paid customer demand. Current production account caps were 200,000 total / 20,000 unproven devices at 2026-09-25 audit; limits can change. The observed routing throughput floor was 500 KB/s, with other quality, consent, geo and account checks. Verification and quality probes are separate queue-based processes; neither five probes nor a fixed completion time is guaranteed. Multiple devices behind carrier NAT may share an IP: duplicates are not extra distinct exits. The SDK does not bind separate processes to separate modems; uplink isolation requires your network configuration. Do not lower mobile/consent/quality requirements to grow counts. A production routing self-test needs separate customer proxy credentials and an existing traffic balance or a support-arranged test. Never use the farmer API key as a proxy password or buy a package simply to prove that this installer starts. Report UTC time, SDK version, one device name/ID and redacted logs to support. Never send keys, refresh tokens, state files or full environment files. ## Stop / uninstall sudo systemctl disable --now proxies-peer Stopping disconnects this device's tunnels. Keep state for a later restart. For permanent removal, stop the process first, remove the device from the farmer dashboard, then delete its local secrets/state according to your retention rules. Do not revoke a shared fleet key merely to remove one device.