Skip to content

XTLS Vision: never switches to direct copy when inner TLS records arrive back to back (IsCompleteRecord is per batch) #7164

Open

Description

@pylaterreur

Integrity requirements

  • I have read all the comments in the issue template and ensured that this issue meet the requirements.
  • I confirm that I have read the documentation, understand the meaning of all the configuration items I wrote, and did not pile up seemingly useful options or default values.
  • I provided the complete config and logs, rather than just providing the truncated parts based on my own judgment.
  • I searched issues and did not find any similar issues.
  • The problem can be successfully reproduced in the latest Release

The fourth box is unchecked on purpose: #6124 shows the same symptom for one download. It was closed together with #4878 by #6834, which fixed the close_notify leak but not the switch. Details below.

Description

Since #5179 (first released in v25.12.1), VisionWriter switches to direct copy only when a whole read batch is made of complete TLS application-data records:

Xray-core/proxy/proxy.go

Lines 362 to 369 in 701af60

isComplete := IsCompleteRecord(mb)
mb = ReshapeMultiBuffer(w.ctx, mb)
longPadding := w.trafficState.IsTLS
for i, b := range mb {
if w.trafficState.IsTLS && b.Len() >= 6 && bytes.Equal(TlsApplicationDataStart, b.BytesTo(3)) && isComplete {
if w.trafficState.EnableXtls {
*switchToDirectCopy = true
}

IsCompleteRecord (proxy.go#L408-L460) looks at one batch at a time and keeps no state between batches. For TLS 1.3 nothing else ends the padding: the shortcut at L381 only applies to traffic that is not TLS 1.2+. Once a batch ends inside a record, the next batch starts inside a record and cannot pass. The switch then only happens if two reads in a row both end exactly on a record boundary.

With a sender that writes full-size records back to back, that doesn't happen:

  • The first read after the handshake is a single 8 KiB buffer. ReadVReader starts with one buf.Size buffer and only adds more after a full read (readv_reader.go#L63-L70, #L124-L145). So when the handshake fits in 8 KiB, as it does here, the first 16 KiB record (16,406 bytes on the wire) is always cut. In the upload log below, the first batch is the client's ChangeCipherSpec + Finished (64 bytes) plus the first 8,128 bytes of the first record.
  • Later reads take up to 8 × 8 KiB. Whenever data waits in the socket, because the proxy or the link behind it is slower than the sender, every read is a full 64 KiB. Two full reads in a row can never both end on a record boundary, because 65,536 is not a multiple of 16,406. So the check can only pass next to a read that drains the socket, which needs the proxy to catch up with the sender.

The download batches come straight from freedom's reads of the target socket (freedom.go#L435, proxy.go#L790-L797). The upload batches are the client inbound's reads (outbound.go#L367).

So the connection stays in padding mode for the whole transfer. Each buffer is reshaped and padded, the inner TLS stream is encrypted a second time by the outer TLS, and neither direct copy nor, for downloads, splice ever starts. CommandPaddingDirect is only sent after the payload, when a short trailing record arrives alone (here the receiver's 1-byte reply or a close_notify).

Evidence (repro below; plain TCP on 127.0.0.1, official Xray-linux-64.zip):

  • 1 GB upload at debug level: the client logs 232,453 XtlsPadding … 0 lines. Its only XtlsPadding … 2 is the 24-byte close_notify after the payload. In a 1 GB download, the server logs 232,494 XtlsPadding … 0 lines and no CopyRawConn splice.
  • The outcome depends on read timing, but here it is consistent. All 41 unpinned debug runs on v26.10.10 stayed in padding mode: 24 uploads and 17 downloads of 256 KiB to 1 GB. That includes 10 runs with Go's default dynamic record sizing, which sends small records first. Judging by their CPU cost, all 20 back-to-back Vision runs in the table below stayed in padding mode too, as did 6 of 6 debug runs on v26.3.27. With all four processes squeezed onto 3 CPUs, 1 run of 4 switched after the second record.
  • When the sender first writes one 100-byte record between two 10 ms pauses (prelude below), that record is read alone and the switch happens on it. This worked in 10 of 10 uploads and 10 of 10 downloads:
    [Debug] [3798155656] proxy: XtlsPadding 122 1253 2
    [Debug] [3798155656] proxy: CopyRawConn splice
    
  • A real client is affected too. curl 8.22.0 (OpenSSL 4.0.2) uploaded 20 MB with PUT through the same setup to a Go net/http HTTPS server. Over HTTP/1.1, 2 of 3 uploads stayed in padding mode to the end; the third switched on its 153-byte request-header record, which happened to be read alone. Over HTTP/2, the switch came after about 0.07, 3.9 and 5.3 MB, each time when a small control-frame record happened to be read alone.
  • v25.10.15, from before XTLS Vision: Check TLS record isComplete #5179, switches on the first data batch of the same transfers (6 of 6), cutting the first record in two. That is the problem XTLS Vision: Check TLS record isComplete #5179 fixed (Vision 协议 偶发bug 导致TLS IN TLS 特征 #5169).
  • main (0888beb) has not changed proxy/proxy.go, proxy/vless/, proxy/freedom/ or common/buf/ since v26.10.10.

Cost: 1 GB per run, "loglevel": "warning", median of 5 runs. CPU is in seconds per GB for each xray process, shown as client + server.

1 GB unpinned Gbit/s unpinned CPU s/GB pinned Gbit/s pinned CPU s/GB
Upload, Vision, back-to-back records 0.34 45.6 + 32.3 1.33 5.4 + 6.0
Upload, Vision, prelude (switches) 2.11 4.3 + 4.4 4.64 1.3 + 1.2
Upload, no flow (VLESS + TLS) 1.13 5.5 + 10.1 2.26 1.5 + 3.5
Download, Vision, back-to-back records 0.36 26.6 + 42.4 1.33 5.5 + 5.8
Download, Vision, prelude (switches) 1.84 2.8 + 4.1 3.81 1.1 + 1.4
Download, no flow (VLESS + TLS) 1.15 10.1 + 5.2 2.26 3.5 + 1.6

In padding mode, a transfer takes about 9–10× the CPU it takes after the switch, and 4.5–5× the CPU of VLESS + TLS without flow. Pinned, the ratios are about 4.5× and 2.2×.

Real traffic: this is probably what #6124 logged. An App Store download (iosapps.itunes.apple.com) stayed in XtlsPadding for 25 MB / 13 s, while 8 short connections to other Apple hosts on the same inbound switched within 0.2–0.4 s. Uploads are probably hit hardest. A TLS 1.3 client's first application data often shares a read with its ChangeCipherSpec + Finished, and that batch can never pass because it starts with a ChangeCipherSpec record. If the request body follows without a pause, no later batch passes either. I found this while measuring Vision's CPU cost for uploads on an OpenMPTCProuter router over MPTCP; the repro uses plain TCP, so MPTCP is not involved.

Question: could the writer track record boundaries across batches instead, that is, the bytes left in the current record? On the first batch that contains a record boundary followed by application data, it could pad and send the part up to the boundary with CommandPaddingDirect, then write the rest directly. That would keep what #5179 guarantees (the padded part ends on a record boundary) without needing a whole batch to be aligned. I may be missing a reason why the check has to be per batch.

Reproduction Method

  1. Download Xray-linux-64.zip v26.10.10 and check it against Xray-linux-64.zip.dgst. Save the configs below as client.json and server.json. They use a fresh UUID (xray uuid) and a fresh self-signed certificate (xray tls cert --domain=example.com), which the client pins with pinnedPeerCertSha256. The server's freedom outbound needs finalRules to allow 127.0.0.1, which v26.10.10 blocks by default behind a VLESS inbound.
  2. Save the program below as tlsblast.go and build it with go build tlsblast.go (Go 1.21 or later, standard library only). It sends N bytes over TLS 1.3 in one direction as back-to-back 16 KiB records, and prints the throughput.
  3. Run:
    ./xray run -c server.json &   # VLESS + TLS + Vision on 127.0.0.1:8443, freedom out
    ./xray run -c client.json &   # dokodemo-door 127.0.0.1:10000 -> 127.0.0.1:9000 through the server
    sleep 1
    ./tlsblast server 127.0.0.1:9000 up 1000000000 & sleep 1
    ./tlsblast client 127.0.0.1:10000 up 1000000000
    For a download, use down instead of up in both tlsblast commands. To get the switch, add prelude at the end of both. Without Vision, remove "flow": "xtls-rprx-vision" from both configs.

For the numbers, I started fresh xray processes for every run. CPU is utime + stime of each xray process, read from /proc/<pid>/stat right before and after the transfer. "Pinned" puts each of the four processes on its own CPU with taskset -c, so Go uses GOMAXPROCS=1. The machine has 8 vCPUs of an AMD Ryzen 9 5900X (VirtualBox VM), Ubuntu 25.10, Linux 6.17.0-41-generic; only the ratios matter.

The client and server logs below are the complete debug logs (dnsLog on) of one 256 KiB upload (up 262144) with the configs below. With 1 GB, the same XtlsPadding … 0 and Xtls Unpadding … command 0 lines repeat about 230,000 times on each side.

tlsblast.go
// tlsblast: one TLS 1.3 connection that carries BYTES in one direction as
// back-to-back 16 KiB records (no small records at the start), then prints
// the throughput. up: the client sends; down: the server sends. With "prelude",
// the sender first writes one 100-byte record between two 10 ms pauses.
//
//	tlsblast server 127.0.0.1:9000 up|down BYTES [prelude]
//	tlsblast client 127.0.0.1:10000 up|down BYTES [prelude]
package main

import (
	"crypto/ecdsa"
	"crypto/elliptic"
	"crypto/rand"
	"crypto/tls"
	"crypto/x509"
	"fmt"
	"io"
	"math/big"
	"net"
	"os"
	"strconv"
	"time"
)

func check(err error) {
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
}

func main() {
	role, addr, dir := os.Args[1], os.Args[2], os.Args[3]
	total, err := strconv.ParseInt(os.Args[4], 10, 64)
	check(err)
	cfg := &tls.Config{MinVersion: tls.VersionTLS13, DynamicRecordSizingDisabled: true}
	var c *tls.Conn
	if role == "server" {
		key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
		check(err)
		tmpl := &x509.Certificate{SerialNumber: big.NewInt(1), NotAfter: time.Now().Add(time.Hour)}
		der, err := x509.CreateCertificate(rand.Reader, tmpl, tmpl, &key.PublicKey, key)
		check(err)
		cfg.Certificates = []tls.Certificate{{Certificate: [][]byte{der}, PrivateKey: key}}
		ln, err := net.Listen("tcp", addr)
		check(err)
		raw, err := ln.Accept()
		check(err)
		c = tls.Server(raw, cfg)
	} else {
		cfg.InsecureSkipVerify = true
		raw, err := net.Dial("tcp", addr)
		check(err)
		c = tls.Client(raw, cfg)
	}
	check(c.Handshake())
	start, buf, n := time.Now(), make([]byte, 16384), total
	if (role == "client") == (dir == "up") { // this side sends
		if len(os.Args) > 5 && os.Args[5] == "prelude" {
			time.Sleep(10 * time.Millisecond)
			_, err = c.Write(buf[:100])
			n -= 100
			time.Sleep(10 * time.Millisecond)
		}
		for ; n > 0 && err == nil; n -= 16384 {
			_, err = c.Write(buf[:min(n, 16384)])
		}
		check(err)
		_, err = io.ReadFull(c, buf[:1]) // the receiver's 1-byte ack
	} else {
		_, err = io.CopyN(io.Discard, c, n)
		check(err)
		_, err = c.Write([]byte{'K'})
	}
	check(err)
	sec := time.Since(start).Seconds()
	c.Close()
	fmt.Printf("%s %s: %d bytes in %.2f s = %.2f Gbit/s\n", role, dir, total, sec, float64(total)*8/sec/1e9)
}

Client config

Details

{
  "log": {
    "loglevel": "debug",
    "dnsLog": true
  },
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 10000,
      "protocol": "dokodemo-door",
      "settings": {
        "address": "127.0.0.1",
        "port": 9000
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {
        "address": "127.0.0.1",
        "port": 8443,
        "id": "f6e1cd24-9a78-46f4-b6b6-f95e09cfd1e7",
        "flow": "xtls-rprx-vision",
        "encryption": "none"
      },
      "streamSettings": {
        "security": "tls",
        "tlsSettings": {
          "pinnedPeerCertSha256": "e3a8fe8b0ba4b847af03a09a20e30c4e1f4cdeaa7943ff8fdf6fa358a503eb65"
        }
      }
    }
  ]
}

Server config

Details

{
  "log": {
    "loglevel": "debug",
    "dnsLog": true
  },
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 8443,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "f6e1cd24-9a78-46f4-b6b6-f95e09cfd1e7",
            "flow": "xtls-rprx-vision"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "security": "tls",
        "tlsSettings": {
          "certificates": [
            {
              "certificate": [
                "-----BEGIN CERTIFICATE-----",
                "MIIBmTCCAT6gAwIBAgIRAM9Om6FtwfzWX8oi97lc5aswCgYIKoZIzj0EAwIwJjER",
                "MA8GA1UEChMIWHJheSBJbmMxETAPBgNVBAMTCFhyYXkgSW5jMB4XDTI2MTAxNTA5",
                "Mjg0MFoXDTI3MDExMzEwMjg0MFowJjERMA8GA1UEChMIWHJheSBJbmMxETAPBgNV",
                "BAMTCFhyYXkgSW5jMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAJUkVi4rMfl9",
                "KQt2xD01Iftwj3h1L3EgSQNiwwrDMWp2olzS+ZLNARnmP3cPgqfSR+y9nqJXC+qS",
                "MaCrTVebTKNNMEswDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMB",
                "MAwGA1UdEwEB/wQCMAAwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0E",
                "AwIDSQAwRgIhAJVDQ35Iu1bpFQOoyvOcB6EuN3V29yLYOPKhTg0PwjJfAiEArMxT",
                "UP/4Bv9BsqAdn9P92kspVShPBln1jxamGAPXS8M=",
                "-----END CERTIFICATE-----"
              ],
              "key": [
                "-----BEGIN RSA PRIVATE KEY-----",
                "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgP2n+zrvPp09NYkN+",
                "BbihPbsEjyvvoifvRA6RZvETgCqhRANCAAQAlSRWLisx+X0pC3bEPTUh+3CPeHUv",
                "cSBJA2LDCsMxanaiXNL5ks0BGeY/dw+Cp9JH7L2eolcL6pIxoKtNV5tM",
                "-----END RSA PRIVATE KEY-----"
              ]
            }
          ]
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {
        "finalRules": [
          {
            "action": "allow",
            "ip": [
              "127.0.0.1"
            ]
          }
        ]
      }
    }
  ]
}

Client log

Details

Xray 26.10.10 (Xray, Penetrates Everything.) 701af60 (go1.27.2 linux/amd64)
A unified platform for anti-censorship.
2026/10/15 11:55:19.414735 [Info] infra/conf/serial: Reading config: &{Name:client.json Format:json}
2026/10/15 11:55:19.416409 [Debug] app/log: Logger started
2026/10/15 11:55:19.417908 [Debug] app/proxyman/inbound: creating stream worker on 127.0.0.1:10000
2026/10/15 11:55:19.417925 [Info] transport/internet/tcp: listening tcp on 127.0.0.1:10000
2026/10/15 11:55:19.417930 [Warning] core: Xray 26.10.10 started
2026/10/15 11:55:19.695936 [Debug] [2286240241] proxy/dokodemo: processing connection from: 127.0.0.1:51580
2026/10/15 11:55:19.695977 [Info] [2286240241] proxy/dokodemo: received request for 127.0.0.1:51580
2026/10/15 11:55:19.695986 [Info] [2286240241] app/dispatcher: default route for tcp:127.0.0.1:9000
2026/10/15 11:55:19.695990 [Info] [2286240241] transport/internet/tcp: dialing TCP to tcp:127.0.0.1:8443
2026/10/15 11:55:19.695994 [Debug] [2286240241] transport/internet: dialing to tcp:127.0.0.1:8443
2026/10/15 11:55:19.696564 from 127.0.0.1:51580 accepted tcp:127.0.0.1:9000
2026/10/15 11:55:19.702678 [Info] [2286240241] proxy/vless/outbound: tunneling request to tcp:127.0.0.1:9000 via 127.0.0.1:8443
2026/10/15 11:55:19.703013 [Debug] [2286240241] proxy: XtlsFilterTls found tls client hello! 1455
2026/10/15 11:55:19.703041 [Debug] [2286240241] proxy: XtlsPadding 1455 38 0
2026/10/15 11:55:19.705622 [Debug] [2286240241] proxy: Xtls Unpadding new block, content 1684 padding 250 command 0
2026/10/15 11:55:19.705646 [Debug] [2286240241] proxy: XtlsFilterTls found tls 1.3! 1163 TLS_AES_128_GCM_SHA256
2026/10/15 11:55:19.708019 [Debug] [2286240241] proxy: ReshapeMultiBuffer  64 8128
2026/10/15 11:55:19.708432 [Debug] [2286240241] proxy: XtlsPadding 64 1190 0
2026/10/15 11:55:19.708445 [Debug] [2286240241] proxy: XtlsPadding 8128 24 0
2026/10/15 11:55:19.708450 [Debug] [2286240241] proxy: ReshapeMultiBuffer  4096 4096 86 8106
2026/10/15 11:55:19.708454 [Debug] [2286240241] proxy: XtlsPadding 4096 231 0
2026/10/15 11:55:19.708457 [Debug] [2286240241] proxy: XtlsPadding 4096 107 0
2026/10/15 11:55:19.708461 [Debug] [2286240241] proxy: XtlsPadding 86 814 0
2026/10/15 11:55:19.708465 [Debug] [2286240241] proxy: XtlsPadding 8106 65 0
2026/10/15 11:55:19.709688 [Debug] [2286240241] proxy: ReshapeMultiBuffer  4096 4096 108 8084 4096 4096 130 8062
2026/10/15 11:55:19.709700 [Debug] [2286240241] proxy: XtlsPadding 4096 33 0
2026/10/15 11:55:19.709704 [Debug] [2286240241] proxy: XtlsPadding 4096 6 0
2026/10/15 11:55:19.709708 [Debug] [2286240241] proxy: XtlsPadding 108 826 0
2026/10/15 11:55:19.709711 [Debug] [2286240241] proxy: XtlsPadding 8084 18 0
2026/10/15 11:55:19.709715 [Debug] [2286240241] proxy: XtlsPadding 4096 208 0
2026/10/15 11:55:19.709718 [Debug] [2286240241] proxy: XtlsPadding 4096 212 0
2026/10/15 11:55:19.709722 [Debug] [2286240241] proxy: XtlsPadding 130 1128 0
2026/10/15 11:55:19.709725 [Debug] [2286240241] proxy: XtlsPadding 8062 109 0
2026/10/15 11:55:19.709738 [Debug] [2286240241] proxy: ReshapeMultiBuffer  4096 4096 152 8040 4096 4096 174 8018 4096 4096 196 7996 4096 4096 218
2026/10/15 11:55:19.709743 [Debug] [2286240241] proxy: XtlsPadding 4096 112 0
2026/10/15 11:55:19.709747 [Debug] [2286240241] proxy: XtlsPadding 4096 140 0
2026/10/15 11:55:19.709751 [Debug] [2286240241] proxy: XtlsPadding 152 904 0
2026/10/15 11:55:19.709754 [Debug] [2286240241] proxy: XtlsPadding 8040 131 0
2026/10/15 11:55:19.709758 [Debug] [2286240241] proxy: XtlsPadding 4096 245 0
2026/10/15 11:55:19.709762 [Debug] [2286240241] proxy: XtlsPadding 4096 33 0
2026/10/15 11:55:19.709766 [Debug] [2286240241] proxy: XtlsPadding 174 1086 0
2026/10/15 11:55:19.709770 [Debug] [2286240241] proxy: XtlsPadding 8018 153 0
2026/10/15 11:55:19.709773 [Debug] [2286240241] proxy: XtlsPadding 4096 169 0
2026/10/15 11:55:19.709776 [Debug] [2286240241] proxy: XtlsPadding 4096 6 0
2026/10/15 11:55:19.709780 [Debug] [2286240241] proxy: XtlsPadding 196 711 0
2026/10/15 11:55:19.709783 [Debug] [2286240241] proxy: XtlsPadding 7996 104 0
2026/10/15 11:55:19.709801 [Debug] [2286240241] proxy: XtlsPadding 4096 56 0
2026/10/15 11:55:19.709805 [Debug] [2286240241] proxy: XtlsPadding 4096 12 0
2026/10/15 11:55:19.709809 [Debug] [2286240241] proxy: XtlsPadding 218 773 0
2026/10/15 11:55:19.714427 [Debug] [2286240241] proxy: ReshapeMultiBuffer  4096 4096 4096 4096 22 8170 4096 4096 44 8148 4096 4096 66 8126 4096 4096
2026/10/15 11:55:19.714439 [Debug] [2286240241] proxy: XtlsPadding 4096 228 0
2026/10/15 11:55:19.714445 [Debug] [2286240241] proxy: XtlsPadding 4096 232 0
2026/10/15 11:55:19.714449 [Debug] [2286240241] proxy: XtlsPadding 4096 11 0
2026/10/15 11:55:19.714452 [Debug] [2286240241] proxy: XtlsPadding 4096 55 0
2026/10/15 11:55:19.714456 [Debug] [2286240241] proxy: XtlsPadding 22 1278 0
2026/10/15 11:55:19.714460 [Debug] [2286240241] proxy: XtlsPadding 8170 1 0
2026/10/15 11:55:19.714463 [Debug] [2286240241] proxy: XtlsPadding 4096 240 0
2026/10/15 11:55:19.714466 [Debug] [2286240241] proxy: XtlsPadding 4096 255 0
2026/10/15 11:55:19.714471 [Debug] [2286240241] proxy: XtlsPadding 44 1281 0
2026/10/15 11:55:19.714474 [Debug] [2286240241] proxy: XtlsPadding 8148 20 0
2026/10/15 11:55:19.714477 [Debug] [2286240241] proxy: XtlsPadding 4096 2 0
2026/10/15 11:55:19.714481 [Debug] [2286240241] proxy: XtlsPadding 4096 194 0
2026/10/15 11:55:19.714485 [Debug] [2286240241] proxy: XtlsPadding 66 1113 0
2026/10/15 11:55:19.714488 [Debug] [2286240241] proxy: XtlsPadding 8126 45 0
2026/10/15 11:55:19.714492 [Debug] [2286240241] proxy: XtlsPadding 4096 231 0
2026/10/15 11:55:19.714495 [Debug] [2286240241] proxy: XtlsPadding 4096 59 0
2026/10/15 11:55:19.714907 [Debug] [2286240241] proxy: ReshapeMultiBuffer  88 8104 4096 4096 110 8082 4096 4096 132 8060 4096 4096 154 8038 4096 4096
2026/10/15 11:55:19.714916 [Debug] [2286240241] proxy: XtlsPadding 88 1190 0
2026/10/15 11:55:19.714920 [Debug] [2286240241] proxy: XtlsPadding 8104 67 0
2026/10/15 11:55:19.714924 [Debug] [2286240241] proxy: XtlsPadding 4096 50 0
2026/10/15 11:55:19.714927 [Debug] [2286240241] proxy: XtlsPadding 4096 175 0
2026/10/15 11:55:19.714931 [Debug] [2286240241] proxy: XtlsPadding 110 1076 0
2026/10/15 11:55:19.714935 [Debug] [2286240241] proxy: XtlsPadding 8082 89 0
2026/10/15 11:55:19.714938 [Debug] [2286240241] proxy: XtlsPadding 4096 255 0
2026/10/15 11:55:19.714951 [Debug] [2286240241] proxy: XtlsPadding 4096 58 0
2026/10/15 11:55:19.714956 [Debug] [2286240241] proxy: XtlsPadding 132 826 0
2026/10/15 11:55:19.714959 [Debug] [2286240241] proxy: XtlsPadding 8060 111 0
2026/10/15 11:55:19.714969 [Debug] [2286240241] proxy: XtlsPadding 4096 142 0
2026/10/15 11:55:19.714973 [Debug] [2286240241] proxy: XtlsPadding 4096 252 0
2026/10/15 11:55:19.714977 [Debug] [2286240241] proxy: XtlsPadding 154 988 0
2026/10/15 11:55:19.714980 [Debug] [2286240241] proxy: XtlsPadding 8038 133 0
2026/10/15 11:55:19.714984 [Debug] [2286240241] proxy: XtlsPadding 4096 143 0
2026/10/15 11:55:19.714988 [Debug] [2286240241] proxy: XtlsPadding 4096 121 0
2026/10/15 11:55:19.715504 [Debug] [2286240241] proxy: ReshapeMultiBuffer  176 8016 4096 4096 198
2026/10/15 11:55:19.715515 [Debug] [2286240241] proxy: XtlsPadding 176 846 0
2026/10/15 11:55:19.715519 [Debug] [2286240241] proxy: XtlsPadding 8016 155 0
2026/10/15 11:55:19.715522 [Debug] [2286240241] proxy: XtlsPadding 4096 20 0
2026/10/15 11:55:19.715526 [Debug] [2286240241] proxy: XtlsPadding 4096 42 0
2026/10/15 11:55:19.715529 [Debug] [2286240241] proxy: XtlsPadding 198 1127 0
2026/10/15 11:55:19.720783 [Debug] [2286240241] proxy: Xtls Unpadding new block, content 47 padding 878 command 2
2026/10/15 11:55:19.720794 [Debug] [2286240241] proxy: CopyRawConn splice
2026/10/15 11:55:19.723744 [Debug] [2286240241] proxy: XtlsPadding 24 1314 2

Server log

Details

Xray 26.10.10 (Xray, Penetrates Everything.) 701af60 (go1.27.2 linux/amd64)
A unified platform for anti-censorship.
2026/10/15 11:55:19.327008 [Info] infra/conf/serial: Reading config: &{Name:server.json Format:json}
2026/10/15 11:55:19.351613 [Debug] app/log: Logger started
2026/10/15 11:55:19.358302 [Debug] app/proxyman/inbound: creating stream worker on 127.0.0.1:8443
2026/10/15 11:55:19.414484 [Info] transport/internet/tcp: listening tcp on 127.0.0.1:8443
2026/10/15 11:55:19.416422 [Warning] core: Xray 26.10.10 started
2026/10/15 11:55:19.703574 [Info] [1150408639] proxy/vless/inbound: firstLen = 1186
2026/10/15 11:55:19.703611 [Info] [1150408639] proxy/vless/inbound: received request for tcp:127.0.0.1:9000
2026/10/15 11:55:19.703621 [Info] [1150408639] app/dispatcher: default route for tcp:127.0.0.1:9000
2026/10/15 11:55:19.703626 [Info] [1150408639] transport/internet/tcp: dialing TCP to tcp:127.0.0.1:9000
2026/10/15 11:55:19.703630 [Debug] [1150408639] transport/internet: dialing to tcp:127.0.0.1:9000
2026/10/15 11:55:19.703640 from 127.0.0.1:49342 accepted tcp:127.0.0.1:9000
2026/10/15 11:55:19.703753 [Info] [1150408639] proxy/freedom: connection opened to tcp:127.0.0.1:9000, local endpoint 127.0.0.1:52930, remote endpoint 127.0.0.1:9000
2026/10/15 11:55:19.703985 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 1455 padding 38 command 0
2026/10/15 11:55:19.703999 [Debug] [1150408639] proxy: XtlsFilterTls found tls client hello! 1121
2026/10/15 11:55:19.704868 [Debug] [1150408639] proxy: XtlsFilterTls found tls 1.3! 1684 TLS_AES_128_GCM_SHA256
2026/10/15 11:55:19.704882 [Debug] [1150408639] proxy: XtlsPadding 1684 250 0
2026/10/15 11:55:19.708348 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 64 padding 1190 command 0
2026/10/15 11:55:19.708359 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8128 padding 24 command 0
2026/10/15 11:55:19.708364 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 231 command 0
2026/10/15 11:55:19.708368 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 107 command 0
2026/10/15 11:55:19.708372 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 86 padding 814 command 0
2026/10/15 11:55:19.708375 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8106 padding 65 command 0
2026/10/15 11:55:19.709578 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 33 command 0
2026/10/15 11:55:19.709589 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 6 command 0
2026/10/15 11:55:19.709592 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 108 padding 826 command 0
2026/10/15 11:55:19.709596 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8084 padding 18 command 0
2026/10/15 11:55:19.709600 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 208 command 0
2026/10/15 11:55:19.709603 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 212 command 0
2026/10/15 11:55:19.709606 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 130 padding 1128 command 0
2026/10/15 11:55:19.709610 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8062 padding 109 command 0
2026/10/15 11:55:19.713045 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 112 command 0
2026/10/15 11:55:19.713064 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 140 command 0
2026/10/15 11:55:19.713070 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 152 padding 904 command 0
2026/10/15 11:55:19.713075 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8040 padding 131 command 0
2026/10/15 11:55:19.713549 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 245 command 0
2026/10/15 11:55:19.713563 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 33 command 0
2026/10/15 11:55:19.713569 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 174 padding 1086 command 0
2026/10/15 11:55:19.713574 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8018 padding 153 command 0
2026/10/15 11:55:19.713589 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 169 command 0
2026/10/15 11:55:19.713594 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 6 command 0
2026/10/15 11:55:19.713598 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 196 padding 711 command 0
2026/10/15 11:55:19.713603 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 7996 padding 104 command 0
2026/10/15 11:55:19.713607 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 56 command 0
2026/10/15 11:55:19.713613 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 12 command 0
2026/10/15 11:55:19.713617 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 218 padding 773 command 0
2026/10/15 11:55:19.714668 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 228 command 0
2026/10/15 11:55:19.714680 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 232 command 0
2026/10/15 11:55:19.714684 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 11 command 0
2026/10/15 11:55:19.714688 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 55 command 0
2026/10/15 11:55:19.714692 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 22 padding 1278 command 0
2026/10/15 11:55:19.714695 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8170 padding 1 command 0
2026/10/15 11:55:19.714699 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 240 command 0
2026/10/15 11:55:19.714703 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 255 command 0
2026/10/15 11:55:19.714707 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 44 padding 1281 command 0
2026/10/15 11:55:19.714711 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8148 padding 20 command 0
2026/10/15 11:55:19.714714 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 2 command 0
2026/10/15 11:55:19.714718 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 194 command 0
2026/10/15 11:55:19.714722 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 66 padding 1113 command 0
2026/10/15 11:55:19.714735 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8126 padding 45 command 0
2026/10/15 11:55:19.714740 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 231 command 0
2026/10/15 11:55:19.714744 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 59 command 0
2026/10/15 11:55:19.715437 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 88 padding 1190 command 0
2026/10/15 11:55:19.718208 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8104 padding 67 command 0
2026/10/15 11:55:19.718220 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 50 command 0
2026/10/15 11:55:19.718223 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 175 command 0
2026/10/15 11:55:19.718225 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 110 padding 1076 command 0
2026/10/15 11:55:19.718228 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8082 padding 89 command 0
2026/10/15 11:55:19.718230 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 255 command 0
2026/10/15 11:55:19.718233 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 58 command 0
2026/10/15 11:55:19.718236 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 132 padding 826 command 0
2026/10/15 11:55:19.718240 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8060 padding 111 command 0
2026/10/15 11:55:19.718245 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 142 command 0
2026/10/15 11:55:19.718248 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 252 command 0
2026/10/15 11:55:19.718258 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 154 padding 988 command 0
2026/10/15 11:55:19.718262 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8038 padding 133 command 0
2026/10/15 11:55:19.718266 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 143 command 0
2026/10/15 11:55:19.718270 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 121 command 0
2026/10/15 11:55:19.718273 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 176 padding 846 command 0
2026/10/15 11:55:19.718275 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 8016 padding 155 command 0
2026/10/15 11:55:19.718278 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 20 command 0
2026/10/15 11:55:19.718280 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 4096 padding 42 command 0
2026/10/15 11:55:19.718291 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 198 padding 1127 command 0
2026/10/15 11:55:19.719889 [Debug] [1150408639] proxy: XtlsPadding 47 878 2
2026/10/15 11:55:19.723929 [Debug] [1150408639] proxy: Xtls Unpadding new block, content 24 padding 1314 command 2

Activity

  1. RPRX commented on Oct 16, 2026

    @RPRX
    Member
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions