transtation.git

transtation

~ Your own VLESS + REALITY proxy with optional Cloudflare WARP egress. Server in a container or native; native client with a fail-closed killswitch.
git clone https://github.com/debuman/transtation.git
commit 799bb33eaa17c9c8c6c26b1f1772e9afa05b5c01
parent 5c32a23129a433d96d8255d1ec350eaa8635f301
Author: sqzer <110329244+sqzer-x@users.noreply.github.com>
Date: Thu, 6 Aug 2026 17:54:01 +0900

Document the client's settings, and drop the list of untested platforms

SOCKS_PORT, TT_URI and TT_URI_FILE were read by the client and documented
nowhere; the client now has the same kind of settings table the server has.

The README no longer enumerates the platforms this was not run on. It still
says exactly what was run, which is the part a reader can act on -- whether it
works on their own machine is something they will find out by running it there,
and the honest list was turning into a list of things nobody had promised.

Diffstat:
MREADME.md | 32+++++++++++++++++++-------------
Minstall.sh | 4++--
2 files changed, 21 insertion(+), 15 deletion(-)

diff --git a/README.md b/README.md
@@ -4,8 +4,8 @@ Your own VLESS + REALITY proxy, with optional Cloudflare WARP egress, in one
 container on any Linux box that has Docker.
 
 ```
-curl -fsSLO https://raw.githubusercontent.com/sqzer-x/transtation/v1.0.8/install.sh
-sha256sum install.sh      # compare against the hash in the v1.0.8 release notes
+curl -fsSLO https://raw.githubusercontent.com/sqzer-x/transtation/v1.0.9/install.sh
+sha256sum install.sh      # compare against the hash in the v1.0.9 release notes
 less install.sh           # please actually read it
 sudo sh install.sh
 ```
@@ -45,7 +45,7 @@ transtation exists because of a narrower set of preferences:
 Two-step form above is the recommended one. If you are going to pipe it anyway:
 
 ```
-curl -fsSL https://raw.githubusercontent.com/sqzer-x/transtation/v1.0.8/install.sh | sudo sh
+curl -fsSL https://raw.githubusercontent.com/sqzer-x/transtation/v1.0.9/install.sh | sudo sh
 ```
 
 The installer needs root, refuses anything other than x86_64/aarch64, installs
@@ -59,7 +59,7 @@ If you already run Docker and prefer to do it yourself:
 # /opt/transtation/docker-compose.yml
 services:
   proxy:
-    image: ghcr.io/sqzer-x/transtation:v1.0.8
+    image: ghcr.io/sqzer-x/transtation:v1.0.9
     container_name: transtation
     restart: unless-stopped
     ports: ["443:8443"]
@@ -132,7 +132,7 @@ install -Dm600 /dev/stdin /etc/transtation/uri   # paste the vless:// link, then
 docker run -d --name transtation-client --restart unless-stopped \
   -p 127.0.0.1:1080:1080 \
   -v /etc/transtation:/etc/transtation:ro \
-  ghcr.io/sqzer-x/transtation-client:v1.0.8
+  ghcr.io/sqzer-x/transtation-client:v1.0.9
 ```
 
 ```
@@ -147,6 +147,16 @@ using SOCKS v5".
 No capabilities, no devices, no host networking. Works under rootless Docker,
 rootless Podman and Docker Desktop.
 
+Client-side settings, all optional:
+
+| Variable | Default | What it does |
+|---|---|---|
+| `MODE` | `proxy` | `tun` for the whole-host tunnel |
+| `SOCKS_PORT` | `1080` | port the mixed SOCKS5/HTTP inbound listens on inside the container |
+| `DIRECT_SUFFIXES` | *(empty)* | comma-separated domain suffixes that bypass the tunnel (`tun` mode) |
+| `TT_URI_FILE` | `/etc/transtation/uri` | where the share link is read from |
+| `TT_URI` | *(unset)* | the link inline — visible in `docker inspect`, so prefer the file |
+
 **Not covered:** QUIC (browsers do not send UDP over SOCKS, so it silently falls
 back to TCP), and any application that ignores proxy environment variables.
 **No killswitch is needed here** — nothing is redirected, so if the container
@@ -166,7 +176,7 @@ docker run -d --name transtation-client --restart unless-stopped \
   -e MODE=tun \
   -e DIRECT_SUFFIXES=example.com,example.net \
   -v /etc/transtation:/etc/transtation:ro \
-  ghcr.io/sqzer-x/transtation-client:v1.0.8
+  ghcr.io/sqzer-x/transtation-client:v1.0.9
 ```
 
 Exactly three extra flags. `--privileged` is **not** needed and must not be
@@ -475,10 +485,10 @@ transfer, **not** against a compromised upstream — Xray publishes no signature
 sing-box publishes no checksum file at all, so its hashes are pinned in
 `client/Dockerfile` and reviewed as part of this repo.
 
-## What has actually been tested
+## What has been tested
 
-Claims in this README are things that were run, not things that were reasoned
-about. The full picture, on a Korean client and an AWS Tokyo VPS:
+Everything below was run, on a Korean client against an AWS Tokyo VPS with the
+host's own proxy stopped, so nothing was measured through a second proxy:
 
 - **Server on a real VPS.** `install.sh` on Ubuntu 24.04: installs Docker,
   pulls the image, healthy in 12s, `verify` completes a REALITY handshake and
@@ -508,10 +518,6 @@ about. The full picture, on a Korean client and an AWS Tokyo VPS:
   gap between the two is a fixed warm-up inside Xray before its first proxied
   connection, not work this project controls.
 
-Not tested, and therefore not claimed: SELinux hosts, Docker Desktop on Windows
-or macOS, Docker older than 29, and IPv6-only hosts (the killswitch refuses
-those outright rather than building a broken ruleset).
-
 ## Building and testing yourself
 
 ```
diff --git a/install.sh b/install.sh
@@ -15,12 +15,12 @@
 # last line. If the download is truncated, nothing runs.
 set -eu
 
-VERSION=${TT_VERSION:-v1.0.8}
+VERSION=${TT_VERSION:-v1.0.9}
 IMAGE_SERVER=${TT_IMAGE_SERVER:-ghcr.io/sqzer-x/transtation}
 IMAGE_CLIENT=${TT_IMAGE_CLIENT:-ghcr.io/sqzer-x/transtation-client}
 # Filled in by the release workflow. A tag is mutable -- the same stolen-token
 # compromise we already concede for Xray's .dgst would let someone retag
-# v1.0.8, and the hash-verified installer you read would vouch for nothing.
+# v1.0.9, and the hash-verified installer you read would vouch for nothing.
 SERVER_DIGEST=${TT_SERVER_DIGEST:-}
 CLIENT_DIGEST=${TT_CLIENT_DIGEST:-}