เซิร์ฟเวอร์พร็อกซี
เซิร์ฟเวอร์พร็อกซีส่งต่อคำขอไปยังพร็อกซีต้นทาง Chute รองรับโปรโตคอลพร็อกซี HTTP/HTTPS/SOCKS5/SOCKS5-TLS/SS/SSR/Trojan/VMess/VLESS/AnyTLS/TUIC/Hysteria2/WireGuard/AmneziaWG/ShadowTLS/MASQUE/SSH
ส่วน [Proxy] ประกาศเซิร์ฟเวอร์พร็อกซี คุณสามารถสร้างเซิร์ฟเวอร์พร็อกซีหลายตัวสำหรับกฎที่แตกต่างกัน
ตัวอย่าง:
[Proxy]
ProxyHTTP = http, 1.2.3.4, 443, username, password
ProxyHTTPS = https, 1.2.3.4, 443, username, password, sni=example.com
ProxySOCKS5 = socks5, 1.2.3.4, 443, username, password
ProxySOCKS5TLS = socks5-tls, 1.2.3.4, 443, username, password, sni=example.com
SS = ss, 1.2.3.4, 443, method, password, obfs=http
SSR = ssr, 1.2.3.4, 443, method, password, protocol=auth_chain_f, protocol_param=user:pass, obfs=http_post, obfs_param=example.com
Trojan = trojan, 1.2.3.4, 443, password=password, tls=true, sni=example.com, skip-cert-verify=false, ws=true
VMess = vmess, 1.2.3.4, 443, uuid=uuid, sni=example.com, tls=true, ws=true
VLESS = vless, 1.2.3.4, 443, uuid=uuid, sni=example.com, xtls=true
AnyTLS = anytls, 1.2.3.4, 443, password, sni=example.com
TUIC = tuic, 1.2.3.4, 443, uuid=uuid, password=password, sni=example.com
Hysteria2 = hysteria2, 1.2.3.4, 443, auth=password, sni=example.com, up=10, down=100
WireGuard = wireguard, private-key=base64key, peer-public-key=base64key, section-name=wg0, self-ip=10.0.0.2
AmneziaWG = amneziawg, section-name=awg0
ShadowTLS = shadowtls, 1.2.3.4, 443, password=password, sni=example.com, skip-cert-verify=false, fingerprint=chrome
ProxyMASQUE = masque, 1.2.3.4, 443, token=auth-token, mode=connect-udp, sni=example.com, alpn=h3, skip-cert-verify=false
SSH = ssh, 1.2.3.4, 22, root, password=pw
SCHEME = scheme, ssr://....
หมายเหตุ: นโยบาย Trojan ต้องระบุ
tls=trueอย่างชัดเจน — TLS จะไม่ถูกกำหนดโดยนัย หากไม่มีค่านี้ (และไม่มีgrpc=trueซึ่งทำงานบน TLS เสมอ) นโยบายจะเชื่อมต่อแบบไม่เข้ารหัส และบันทึกจะแจ้งเรื่องนี้เมื่อโหลดการกำหนดค่า:Trojan policy <name> has no tls=true; it connects without TLSการนำเข้าโปรไฟล์ Clash/mihomo จะเขียนtls=trueลงในโหนด Trojan ทุกโหนดหมายเหตุ:
schemeรับลิงก์แชร์ประเภทใดประเภทหนึ่งต่อไปนี้:ss://,ssr://,anytls://,tuic://,hysteria2://และshadowtls://ลิงก์ประเภทอื่นใดจะทำให้บรรทัดนั้นเป็นข้อผิดพลาดของการกำหนดค่า
พารามิเตอร์
| ประเภท | ชื่อผู้ใช้ | รหัสผ่าน | วิธีการ | TLS | XTLS | WebSocket | QUIC |
|---|---|---|---|---|---|---|---|
| HTTP | √ | √ | |||||
| HTTPS | √ | √ | TLS | ||||
| Socks | √ | √ | |||||
| SOCKS5-TLS | √ | √ | TLS | ||||
| Shadowsocks | √ | วิธีการ, OBFS | TLS, ลายนิ้วมือ, ECH | WS | |||
| ShadowsocksR | √ | วิธีการ, โปรโตคอล, OBFS | TLS, ลายนิ้วมือ, ECH | WS | |||
| Trojan | √ | TLS, ลายนิ้วมือ, ECH | WS, gRPC, XHTTP | ||||
| VMess | uuid | TLS, ลายนิ้วมือ, ECH | WS, gRPC, XHTTP | ||||
| VLESS | uuid | TLS, ลายนิ้วมือ, ECH | XTLS | WS, gRPC, XHTTP | |||
| AnyTLS | √ | TLS | |||||
| TUIC | uuid | √ | TLS | √ | |||
| Hysteria2 | auth | TLS | √ | ||||
| WireGuard | private-key | WireGuard เนทีฟ | |||||
| AmneziaWG | private-key | WireGuard เนทีฟ | |||||
| ShadowTLS | √ | TLS, ลายนิ้วมือ | |||||
| MASQUE | token | TLS, โหมด, มัลติเพล็กซ์ | √ | ||||
| SSH | √ | การยืนยันตัวตน | |
พารามิเตอร์สำหรับพร็อกซีด้วย TLS
tls: ไม่บังคับ
tls=true
เปิดใช้งานการขนส่ง TLS
skip-cert-verify: ไม่บังคับ
skip-cert-verify=true
หากเปิดใช้งานตัวเลือกนี้ Chute จะไม่ตรวจสอบใบรับรองของเซิร์ฟเวอร์ ค่า true, 1 และ yes ล้วนเปิดใช้งานตัวเลือกนี้ ดังนั้นลิงก์แชร์ที่เขียน insecure=1 จึงใช้งานได้ skip-common-name-verify=true ซึ่งเป็นการสะกดของ Shadowrocket ในบรรทัด socks5-tls จะถูกอ่านเป็นตัวเลือกเดียวกัน
sni (ค่าเริ่มต้น: hostname)
sni=exmaple.com
คุณสามารถปรับแต่ง Server Name Indication (SNI) ในระหว่างการจับมือ TLS โดยค่าเริ่มต้น Chute จะส่ง SNI ด้วยชื่อโฮสต์เหมือนเบราว์เซอร์ส่วนใหญ่
fingerprint: ไม่บังคับ
fingerprint=chrome
ส่ง TLS ClientHello ของเบราว์เซอร์แทนของระบบ เพื่อไม่ให้การจับมือดูโดดเด่นว่าเป็นไคลเอนต์พร็อกซี ค่าที่รองรับคือ chrome, firefox, safari และ ios รวมถึง edge, 360, qq, android และ random ซึ่งทั้งหมดถูกจัดการเป็น Chrome ชื่อที่ mihomo, sing-box และ Xray ใช้ก็รับได้เช่นกัน โดยจับคู่เข้ากับพรีเซ็ตทั้งสี่นี้ เช่น randomized, chrome_pq และ hellochrome_131 ถูกจัดการเป็น Chrome, hellofirefox_120 เป็น Firefox, hellosafari_16_0 เป็น Safari และ helloios_14 เป็น iOS ส่วน hellogolang ของ Xray ไม่มีพรีเซ็ตที่ตรงกัน
ใช้ได้กับ Trojan, VMess และ VLESS ที่ทำงานบน TLS รวมถึงการขนส่งแบบ WebSocket และ gRPC และใช้ได้กับ Shadowsocks และ ShadowsocksR ที่ทำงานบนWebSocket กับ TLS ด้วย ส่วน REALITY และ ShadowTLS มีตัวเลือกชื่อเดียวกันในหัวข้อของตนเอง หากต้องการกำหนดลายนิ้วมือเดียวให้ทุกนโยบายที่ไม่ได้ระบุเอง ให้ใช้global-client-fingerprintซึ่งมีผลกับนโยบาย ShadowTLS เสมอ มีผลกับนโยบาย VLESS ที่ตั้ง tls=true หรือ reality=true นโยบาย Trojan และ VMess ที่ตั้ง tls=true และนโยบาย Shadowsocks ที่ตั้งทั้ง ws=true และ tls=true นโยบายที่ใช้การขนส่งแบบ gRPC ก็ต้องเขียน tls=true ด้วย และไม่มีผลกับนโยบาย ShadowsocksR เลย
บนโปรโตคอลเหล่านี้ fingerprint=none (หรือ unsafe ซึ่งมีความหมายเดียวกัน) หมายถึงเลือกใช้สแต็ก TLS ของระบบ และมีผลเหนือกว่า global-client-fingerprint ส่วน REALITY และ ShadowTLS ขาดการจับมือแบบเบราว์เซอร์ไม่ได้ ดังนั้นในสองโปรโตคอลนี้ none จะทำให้การเชื่อมต่อถูกปฏิเสธ ค่าที่ Chute ไม่รู้จักจะทำให้การเชื่อมต่อของนโยบายนั้นถูกปฏิเสธแทนที่จะถอยกลับไปใช้ TLS ของระบบไม่ว่าโปรโตคอลใด: จะไม่มีข้อมูลใดถูกส่งไปยังเซิร์ฟเวอร์ การเชื่อมต่อจะจบลงด้วยความล้มเหลว (กลุ่ม url-test หรือ fallback นับเป็นความล้มเหลวเหมือนกรณีอื่น) และเมื่อโหลดการกำหนดค่า บันทึกจะมีข้อความ Policy <name>: fingerprint '<value>' is not supported; connections through this policy are refused ในทางกลับกัน global-client-fingerprint ที่มีค่าที่ไม่รู้จักจะถูกละเว้นเท่านั้น
การกำหนดลายนิ้วมือยังเปิดใช้การแลกเปลี่ยนคีย์แบบต้านควอนตัมด้วย: Chute จะเสนอกลุ่มไฮบริด X25519MLKEM768 ควบคู่ไปกับ X25519 ทำให้เซสชันที่ถูกบันทึกไว้วันนี้ไม่อาจถูกถอดรหัสในภายหลังโดยผู้โจมตีที่มีคอมพิวเตอร์ควอนตัม เซิร์ฟเวอร์ที่ไม่รู้จักกลุ่มนี้จะเลือก X25519 ตามปกติ จึงไม่มีอะไรเสียหาย หากไม่ได้กำหนดลายนิ้วมือ การเชื่อมต่อจะใช้ TLS ของระบบซึ่งไม่เสนอกลุ่มนี้ ด้วยเหตุผลเดียวกับที่ ECH ต้องมีลายนิ้วมือ
พารามิเตอร์สำหรับพร็อกซีด้วย Shadowsocks
method: จำเป็นต้องระบุ
ปัจจุบันรองรับ:
rc4-md5
aes-128-cfb
aes-192-cfb
aes-256-cfb
aes-128-ctr
aes-192-ctr
aes-256-ctr
bf-cfb
camellia-128-cfb
camellia-192-cfb
camellia-256-cfb
salsa20
chacha20
chacha20-ietf
aes-128-gcm
aes-192-gcm
aes-256-gcm
chacha20-ietf-poly1305
xchacha20-ietf-poly1305
วิธีการ Shadowsocks 2022
Chute รองรับโปรโตคอล Shadowsocks 2022 ซึ่งใช้การสร้างคีย์แบบ BLAKE3 และรหัส AEAD ชื่อวิธีการกำหนดชุดรหัส:
2022-blake3-aes-128-gcm
2022-blake3-aes-256-gcm
2022-blake3-chacha20-poly1305
รูปแบบรหัสผ่าน:
ฟิลด์รหัสผ่านสำหรับ SS2022 ประกอบด้วยคีย์ที่เข้ารหัส base64 หนึ่งหรือสองตัว คั่นด้วย : (ทวิภาค)
โหมดผู้ใช้เดียว (หนึ่งคีย์):
SS2022 = ss, 1.2.3.4, 443, 2022-blake3-aes-256-gcm, "base64-key"
โหมดหลายผู้ใช้ด้วยส่วนหัวระบุตัวตน (สองคีย์):
สำหรับ 2022-blake3-aes-128-gcm และ 2022-blake3-aes-256-gcm คุณสามารถระบุคีย์ส่วนหัวระบุตัวตนและคีย์ผู้ใช้ คั่นด้วย ::
SS2022 = ss, 1.2.3.4, 443, 2022-blake3-aes-256-gcm, "header-base64-key:user-base64-key"
แต่ละคีย์เป็นสตริงที่เข้ารหัส base64 (รองรับทั้ง base64 มาตรฐานและ URL-safe) ความยาวคีย์ที่ต้องการ:
| วิธีการ | ความยาวคีย์ผู้ใช้ | ความยาวคีย์ส่วนหัว |
|---|---|---|
2022-blake3-aes-128-gcm |
16 ไบต์ | 16 ไบต์ |
2022-blake3-aes-256-gcm |
32 ไบต์ | 32 ไบต์ |
2022-blake3-chacha20-poly1305 |
32 ไบต์ | N/A (ไม่รองรับส่วนหัวระบุตัวตน) |
สร้างคีย์:
openssl rand -base64 32
หมายเหตุ: วิธีการ SS2022 ไม่รองรับพารามิเตอร์
obfsวิธีการ2022-blake3-chacha20-poly1305ไม่รองรับโหมดหลายผู้ใช้
วิธีการ Shadowsocks AEGIS
Chute รองรับตระกูลรหัส AEAD แบบ AEGIS ด้วย รหัสเหล่านี้สร้างขึ้นบนฟังก์ชันรอบของ AES และเร็วกว่า AES-GCM หรือ ChaCha20-Poly1305 อย่างชัดเจนบนหน่วยประมวลผลที่มี AES ในฮาร์ดแวร์ ซึ่งรวมถึง iPhone, iPad, Apple TV และ Mac รุ่นใหม่ทั้งหมด:
aegis-128l
aegis-256
ตั้งค่าเหมือนวิธีการ AEAD แบบดั้งเดิมด้านบน โดยรหัสผ่านเป็นวลีรหัสผ่านธรรมดา ไม่ใช่คีย์แบบ base64:
AEGIS = ss, 1.2.3.4, 443, aegis-128l, your-password
| วิธีการ | คีย์ | Nonce | แท็ก |
|---|---|---|---|
aegis-128l |
16 ไบต์ | 16 ไบต์ | 16 ไบต์ |
aegis-256 |
32 ไบต์ | 32 ไบต์ | 16 ไบต์ |
ส่วนที่เหลือเป็นไปตาม SIP004 ทุกประการ: salt ยาวเท่ากับคีย์ คีย์ย่อยของเซสชันคือ HKDF-SHA1(key, salt, "ss-subkey") เพย์โหลด TCP ส่งเป็นชิ้น AEAD ที่มีคำนำหน้าความยาวและเพิ่มค่า nonce หลังแต่ละการดำเนินการ ส่วน UDP ใช้ nonce ที่เป็นศูนย์ทั้งหมด
คุณต้องรันเซิร์ฟเวอร์เอง AEGIS ไม่ได้เป็นส่วนหนึ่งของข้อกำหนด Shadowsocks ไม่มี SIP ใดนิยามไว้ และไม่มีเซิร์ฟเวอร์ Shadowsocks กระแสหลักตัวใดรองรับ ทั้ง shadowsocks-rust, shadowsocks-libev, shadowsocks-go, sing-box และ Xray การเลือกวิธีการเหล่านี้จะใช้งานได้เฉพาะกับเซิร์ฟเวอร์ที่คุณดูแลเองและสร้างมาให้รองรับเท่านั้น หากคุณเชื่อมต่อกับโหนดเชิงพาณิชย์หรือโหนดที่ใช้ร่วมกัน ให้ใช้วิธีการที่ใช้งานร่วมกันได้ด้านบนแทน
obfs: ไม่บังคับ
ปัจจุบันรองรับ:
tls
http
obfs_param: ไม่บังคับ
obfs_param=example.com
กำหนด Host ที่ชั้น obfs ใช้ หากไม่ได้ตั้งค่าจะใช้ค่าเริ่มต้น cloudfront.net
WebSocket (v2ray-plugin): ไม่บังคับ
ws=true, ws-path=/path, ws-headers=Host:example.com, tls=true, sni=example.com, skip-cert-verify=false
ส่งสตรีม Shadowsocks ภายใน WebSocket แบบเดียวกับโหมด websocket ของ v2ray-plugin นโยบายจึงเชื่อมต่อกับเซิร์ฟเวอร์ Shadowsocks ที่ทำงานอยู่หลัง v2ray-plugin ได้ รวมถึงกรณีที่มี CDN อยู่ด้านหน้า ตัวเลือกที่ใช้คือตัวเลือกของการขนส่งแบบ WebSocketและของ TLS วิธีการของ Shadowsocks 2022 ก็ทำงานบนนี้ได้ และนโยบาย ShadowsocksR ก็รับตัวเลือกชุดเดียวกันโดยยังคงโปรโตคอลและ obfs ของตัวเองไว้
ws-pathมีค่าเริ่มต้นเป็น/และเส้นทางที่เขียนโดยไม่มีเครื่องหมายทับนำหน้าจะถูกเติมให้Hostของคำขออัปเกรดคือ Host ในws-headersโดยใช้ตามที่เขียนไว้ หากไม่มีจะเป็นsni— หรือที่อยู่เซิร์ฟเวอร์เมื่อไม่มีsni— ตามด้วย:<port>tls=trueเรียกใช้ TLS ใต้ WebSocket ตัวเลือกsni,skip-cert-verify, fingerprint และตัวเลือก ECH ทำงานเหมือนกับของ Trojan หากไม่มีws=trueค่าtls=trueจะไม่มีผลใด ๆ: นโยบายจะเชื่อมต่อโดยไม่ใช้ TLS และบรรทัดนั้นจะได้รับคำแนะนำShadowsocks tls=true only applies with ws=true (the v2ray-plugin transport); this policy connects without TLSws-mux(ค่าเริ่มต้นtrue) จะเปิดเซสชัน mux.cool หนึ่งเซสชันบน WebSocket แต่ละตัว ซึ่งเป็นสิ่งที่เซิร์ฟเวอร์ v2ray-plugin ที่เริ่มด้วยค่าเริ่มต้นmux=1คาดหวัง สำหรับเซิร์ฟเวอร์ที่เริ่มด้วยmux=0ให้เขียนws-mux=false- หากมี
obfs=อยู่ในบรรทัดเดียวกันด้วย จะใช้ WebSocket และไม่ใช้ simple-obfs เมื่อโหลดการกำหนดค่าบันทึกจะมีPolicy <name> ignored unsupported option(s): obfs - UDP ไม่ผ่านปลั๊กอิน: เป็น UDP ของ Shadowsocks ธรรมดาที่ส่งตรงไปยัง
host:portจึงผ่าน CDN ไม่ได้ ให้เขียนudp-relay=falseสำหรับเซิร์ฟเวอร์ที่คุณเข้าถึงผ่าน CDN หากเซิร์ฟเวอร์ Shadowsocks หลังปลั๊กอินรองรับ UoT จะใช้udp-over-tcp=trueแทนก็ได้ UDP จะถูกส่งภายในสตรีมของนโยบาย จึงผ่าน WebSocket ไปด้วย - ไม่รองรับโหมด quic ของ v2ray-plugin
รูปแบบการเขียนของ Shadowrocket ก็อ่านได้เช่นกัน: obfs=websocket (หรือ obfs=ws) โดยใส่ Host ใน obfsParam หรือ obfs-host และเส้นทางใน path หรือ obfs-uri นโยบายจะถูกบันทึกเป็น ws=true ส่วนค่า obfs อื่นที่สแต็กของ Shadowsocks อ่านไม่ได้ — เช่น wss ของ Quantumult X หรือค่าที่พิมพ์ผิด — จะถูกระบุชื่อในคำแนะนำ และนโยบายจะเชื่อมต่อเป็น Shadowsocks ธรรมดา: Shadowsocks over WebSocket (the v2ray-plugin transport) is written ws=true, with ws-path= and ws-headers=; obfs=<value> is not read, so this policy would connect as plain Shadowsocks
SS = ss, 1.2.3.4, 443, aes-256-gcm, password, ws=true, ws-path=/ws, ws-headers=Host:cdn.example.com, tls=true, sni=cdn.example.com
udp-over-tcp: ไม่บังคับ
udp-over-tcp=true, udp-over-tcp-version=2
ส่ง UDP ของนโยบายภายในการเชื่อมต่อ TCP ของนโยบายเอง แทนการใช้รีเลย์ UDP ของเซิร์ฟเวอร์ — คือ UDP over TCP (UoT) ของ sing-box แต่ละโฟลว์ UDP จะได้การเชื่อมต่อของตัวเองไปยังที่อยู่นัดหมายที่เซิร์ฟเวอร์รู้จัก (sp.v2.udp-over-tcp.arpa หรือ sp.udp-over-tcp.arpa สำหรับเวอร์ชัน 1) การเชื่อมต่อเหล่านี้เป็นการเชื่อมต่อปกติของนโยบาย จึงทำตาม underlying-proxy ของมันเหมือนการเชื่อมต่ออื่น ๆ: UDP จึงใช้ได้แม้ผ่านอัปสตรีมที่ไม่รับส่ง UDP เช่นพร็อกซี HTTP และผ่านการขนส่งแบบ WebSocket ได้ด้วย เซิร์ฟเวอร์ต้องรองรับ UoT ซึ่งเซิร์ฟเวอร์ sing-box และ mihomo รองรับ ใช้กับวิธีการ Shadowsocks 2022 ได้
udp-over-tcp-version(ค่าเริ่มต้น2): เวอร์ชัน 2 เปิดแต่ละการเชื่อมต่อด้วยคำขอที่ระบุปลายทาง แล้วแบ่งดาต้าแกรมแต่ละอันด้วยความยาว ส่วนเวอร์ชัน 1 ไม่มีคำขอ แต่ใส่ที่อยู่ไว้หน้าดาต้าแกรมทุกอัน ค่าเริ่มต้นของ mihomo คือเวอร์ชัน 1 โปรไฟล์ที่นำเข้าจาก mihomo จึงเขียนเวอร์ชันไว้ชัดเจน ค่าอื่นจะถูกรายงานในบันทึกและใช้เป็น2และเมื่อบันทึกโปรไฟล์จะคงไว้ตามที่เขียนudp-relay=falseยังคงปิด UDP ของนโยบายเช่นเดิม- ในตัวแก้ไข Shadowsocks ของแอป ค่าเหล่านี้คือสวิตช์ UDP ผ่าน TCP และตัวเลือก เวอร์ชัน UoT
SS = ss, 1.2.3.4, 8388, aes-256-gcm, password, udp-over-tcp=true
พารามิเตอร์สำหรับพร็อกซีด้วย ShadowsocksR/ShadowsocksRR/ShadowsocksR-Akarin
method: จำเป็นต้องระบุ
ปัจจุบันรองรับ:
rc4
rc4-md5-6
rc4-md5
aes-128-cfb
aes-192-cfb
aes-256-cfb
aes-128-ctr
aes-192-ctr
aes-256-ctr
bf-cfb
camellia-128-cfb
camellia-192-cfb
camellia-256-cfb
cast5-cfb
des-cfb
idea-cfb
rc2-cfb
seed-cfb
salsa20
chacha20
chacha20-ietf
protocol: ไม่บังคับ
ปัจจุบันรองรับ:
origin
auth_sha1
auth_sha1_v2
auth_sha1_v4
auth_aes128_md5
auth_aes128_sha1
auth_chain_a
auth_chain_b
auth_chain_c
auth_chain_d
auth_chain_e
auth_chain_f
auth_akarin_rand
auth_akarin_spec_a
protocol_param: ไม่บังคับ
obfs: ไม่บังคับ
ปัจจุบันรองรับ:
plain
http_simple
http_post
tls1.2_ticket_auth
obfs_param: ไม่บังคับ
พารามิเตอร์สำหรับพร็อกซีด้วย WebSocket
การขนส่งแบบ WebSocket ใช้ได้กับ Trojan, VMess และ VLESS และใช้ได้กับ Shadowsocks และ ShadowsocksR ด้วย ซึ่งสำหรับสองตัวหลังคือโหมด websocket ของ v2ray-plugin — ดูสิ่งที่แตกต่างได้ที่ WebSocket (v2ray-plugin)
ws: ไม่บังคับ
ws=true
เปิดใช้งานการขนส่ง WebSocket
ws-path: ไม่บังคับ
ws-path=/exmaple
เปลี่ยนเส้นทางของคำขอ HTTP WebSocket
ws-headers: ไม่บังคับ
ws-headers=Header1:Value1|Header2:Value2
แก้ไขส่วนหัว HTTP ของคำขอ HTTP WebSocket
พารามิเตอร์สำหรับพร็อกซีด้วย gRPC
การขนส่ง gRPC มีให้สำหรับโปรโตคอล Trojan, VMess และ VLESS การขนส่งนี้ใช้การจัดเฟรม gRPC แบบ HTTP/2 ผ่าน TLS ซึ่งสามารถช่วยหลีกเลี่ยงข้อจำกัดเครือข่ายบางอย่าง
grpc: ไม่บังคับ
grpc=true
เปิดใช้งานการขนส่ง gRPC การขนส่งนี้ทำงานบน TLS เสมอไม่ว่าค่า tls ของนโยบายจะเป็นอะไร แต่ก็ยังควรเขียน tls=true ไว้หากต้องการให้นโยบายได้รับ global-client-fingerprint ซึ่งมีผลกับนโยบาย gRPC เฉพาะเมื่อตั้งค่านี้ไว้เท่านั้น
grpc-service-name: จำเป็นต้องระบุเมื่อ grpc=true
grpc-service-name=MyService
ระบุชื่อ/เส้นทางบริการ gRPC สำหรับการมัลติเพล็กซ์ ค่านี้ต้องตรงกับชื่อบริการที่กำหนดค่าบนเซิร์ฟเวอร์; ไม่มีค่าเริ่มต้น
grpc-multi-mode: ไม่บังคับ
grpc-multi-mode=true
ใช้โหมด multi ของ Xray: ทันเนลจะเรียก /<service>/TunMulti แทน /<service>/Tun และการเขียนหลายครั้งจะเดินทางไปในข้อความ gRPC เดียว เซิร์ฟเวอร์ต้องรองรับโหมด multi ด้วย แต่ละทันเนลยังคงมีการเชื่อมต่อของตัวเอง
ตัวอย่างกับ VMess และ gRPC:
VMess = vmess, 1.2.3.4, 443, uuid=uuid, tls=true, grpc=true, grpc-service-name=GunService, sni=example.com
พารามิเตอร์สำหรับพร็อกซีด้วย XHTTP
การขนส่ง XHTTP ใช้ได้กับโปรโตคอล Trojan, VMess และ VLESS แทนที่จะเปิดการเชื่อมต่อค้างไว้หนึ่งเส้น XHTTP จะบรรจุทันเนลไว้ในคำขอ HTTP ธรรมดา ขาดาวน์โหลดมาเป็นการตอบกลับเส้นเดียวที่ไม่จบ ส่วนขาอัปโหลดออกไปเป็นชุดคำขอ POST หรือเป็น POST เส้นเดียวที่ไม่จบสิ่งนี้ทำให้ใช้งานผ่าน CDN ได้ ซึ่งเป็นเหตุผลหลักที่เลือกใช้แทน WebSocket หรือ gRPC
เวอร์ชัน HTTP ไม่ได้ตั้งค่าโดยตรง ถ้าไม่มี TLS จะเป็น HTTP/1.1 ถ้ามี TLS จะเป็น HTTP/2 เว้นแต่ alpn เป็น http/1.1 พอดี (ได้ HTTP/1.1) หรือเป็น h3 พอดี (ได้ HTTP/3)ส่วน REALITY จะใช้ HTTP/2 เสมอ
xhttp: ไม่บังคับ
xhttp=true
เปิดใช้งานการขนส่ง XHTTP
xhttp-mode: ไม่บังคับ
xhttp-mode=packet-up
วิธีนำพาข้อมูลขาอัปโหลด ค่า auto (ค่าเริ่มต้น) เท่ากับ packet-up และเท่ากับ stream-one เมื่อใช้ REALITY
packet-up— ขาอัปโหลดเป็นชุดคำขอ POST ที่มีหมายเลขกำกับ เข้ากันได้ดีที่สุดและ เหมาะกับ CDN มากที่สุดstream-up— ขาอัปโหลดเป็น POST เส้นเดียวที่ไม่จบ ส่วนขาดาวน์โหลดใช้คำขอแยกstream-one— คำขอเดียวรับส่งทั้งสองทิศทาง ต้องให้เซิร์ฟเวอร์และอุปกรณ์ระหว่างทาง รองรับ HTTP แบบสองทางพร้อมกัน
โดยทั่วไปเซิร์ฟเวอร์จะกำหนดโหมดตายตัว หากไม่ตรงกันจะตอบกลับด้วย 400
xhttp-path: ไม่บังคับ
xhttp-path=/yourpath
เส้นทางของคำขอ ค่าเริ่มต้นคือ / ต้องตรงกับเส้นทางที่เซิร์ฟเวอร์ให้บริการ XHTTP
xhttp-host: ไม่บังคับ
xhttp-host=example.com
ชื่อโฮสต์ที่ใช้ในส่วนหัว Host และ URL ของคำขอ ค่าเริ่มต้นคือ sni และใช้ที่อยู่เซิร์ฟเวอร์เมื่อไม่ได้ตั้งค่า
xhttp-headers: ไม่บังคับ
xhttp-headers=Header1:Value1|Header2:Value2
ส่วนหัว HTTP เพิ่มเติม รูปแบบเดียวกับws-headers
xhttp-padding: ไม่บังคับ
xhttp-padding=100-1000
ช่วงความยาวของแพดดิงที่ทุกคำขอมี เขียนเป็น MIN-MAX หรือตัวเลขเดียวค่าเริ่มต้นคือ 100-1000 เซิร์ฟเวอร์บังคับให้มีแพดดิงและตรวจสอบความยาว ช่วงนี้จึงต้องอยู่ในกรอบที่เซิร์ฟเวอร์ยอมรับ คำขอที่ไม่มีแพดดิงหรือความยาวไม่ถูกต้องจะได้รับ 400
xhttp-max-post-bytes: ไม่บังคับ
xhttp-max-post-bytes=1000000
ขนาดสูงสุดของ POST ขาอัปโหลดหนึ่งครั้ง หน่วยเป็นไบต์ ค่าเริ่มต้นคือ 1000000 การเขียนที่ใหญ่กว่านั้นจะถูกแบ่งเป็นหลาย POST
xhttp-min-post-interval: ไม่บังคับ
xhttp-min-post-interval=30
ระยะห่างขั้นต่ำระหว่าง POST ขาอัปโหลดที่ต่อเนื่องกัน หน่วยเป็นมิลลิวินาที ค่าเริ่มต้นคือ 30
xhttp-xmux-max-concurrency, xhttp-xmux-max-connections, xhttp-xmux-max-reuse-times, xhttp-xmux-max-lifetime: ไม่บังคับ
xhttp-xmux-max-concurrency=4
XMUX จะรวมการเชื่อมต่อ HTTP/2 ที่อยู่เบื้องล่างไว้ในพูล เพื่อให้หลายทันเนลใช้การเชื่อมต่อเดียวร่วมกัน ซึ่งดูเหมือนเซสชันเบราว์เซอร์ธรรมดามากกว่าการเปิดหนึ่งการเชื่อมต่อต่อหนึ่งทันเนล ทั้งสี่ค่ามีค่าเริ่มต้นเป็น 0 ซึ่งปิดการรวมพูล
xhttp-xmux-max-concurrency— จำนวนทันเนลที่ใช้การเชื่อมต่อเดียวร่วมกันได้xhttp-xmux-max-connections— จำนวนการเชื่อมต่อที่อนุญาตต่อเซิร์ฟเวอร์xhttp-xmux-max-reuse-times— การเชื่อมต่อหนึ่งรับกี่ทันเนลก่อนจะหยุดรับใหม่xhttp-xmux-max-lifetime— ผ่านไปกี่วินาทีแล้วจะหยุดรับทันเนลใหม่
โปรดทราบว่านโยบาย XHTTP จะปฏิเสธ mux=true ไม่ว่าจะเป็นโปรโตคอลใด และเมื่อโหลดการกำหนดค่าบันทึกจะมี Policy <name> ignored unsupported option(s): mux เพราะ XHTTP มีการมัลติเพล็กซ์ของตัวเองอยู่แล้วการซ้อนแบบทั่วไปทับลงไปจะกลายเป็นสองชั้น
xhttp-download-server, xhttp-download-port: ไม่บังคับ
xhttp-download-server=cdn.example.com
ส่งเฉพาะขาดาวน์โหลดผ่านที่อยู่อื่น ซึ่งโดยทั่วไปคือ CDN ที่อยู่หน้าเซิร์ฟเวอร์เดียวกันขณะที่ขาอัปโหลดยังใช้ที่อยู่หลัก ทั้งสองต้องไปถึงเซิร์ฟเวอร์เดียวกัน เพราะเซสชันเป็นสถานะฝั่งเซิร์ฟเวอร์ การเปลี่ยนเส้นทางทำได้ แต่เปลี่ยนเซิร์ฟเวอร์ไม่ได้
ตัวอย่างกับ VLESS และ XHTTP:
VLESS = vless, 1.2.3.4, 443, uuid=uuid, tls=true, xhttp=true, xhttp-mode=packet-up, xhttp-path=/yourpath, sni=example.com
พารามิเตอร์สำหรับพร็อกซีด้วย XTLS
xtls: ไม่บังคับ
xtls=true
ห่อการขนส่งไว้ใน XTLS โดยลำพังตัวมันเองจะไม่ประกาศโฟลว์ใด ๆ: คำขอ VLESS จะส่งบล็อก addons ที่ว่างเปล่าไป จึงไม่มีการเจรจาโฟลว์ ใช้ flow=xtls-rprx-vision ด้านล่างเพื่อประกาศโฟลว์ ส่วน xtls-rprx-direct ยังไม่รองรับ
flow: ไม่บังคับ
flow = xtls-rprx-vision
เลือกการควบคุมโฟลว์ของ XTLS ค่าเดียวที่รองรับคือ xtls-rprx-vision ซึ่งเปิดใช้การจัดเฟรมแบบ Vision โดยค่าโฟลว์นี้จะถูกส่งไปยังเซิร์ฟเวอร์ใน addons ของ VLESS
skip-cert-verify: ไม่บังคับ
skip-cert-verify=true
เหมือนกับ TLS
sni (ค่าเริ่มต้น: hostname)
sni=exmaple.com
เหมือนกับ TLS
พารามิเตอร์สำหรับพร็อกซีด้วย REALITY
REALITY เป็นเทคนิคการอำพรางแบบ TLS ที่ทำให้ทราฟฟิกพร็อกซีแยกไม่ออกจากทราฟฟิก TLS ปกติไปยังเว็บไซต์จริง ใช้ได้กับโปรโตคอล VLESS
reality: ไม่บังคับ
reality=true
เปิดใช้งานการอำพราง REALITY ต้องการเซิร์ฟเวอร์เป้าหมายที่จะทำหน้าที่เป็นปลายทางพราง
public-key: จำเป็นต้องระบุ
public-key=BASE64KEY
คีย์สาธารณะ X25519 ของเซิร์ฟเวอร์ (base64) การจับมือ REALITY ไม่สามารถสร้างได้หากไม่มีมัน
short-id: ไม่บังคับ
short-id=abcd1234
ตัวระบุสั้นที่ใช้สำหรับการยืนยันตัวตน REALITY โดยทั่วไปเป็นสตริงฐานสิบหก
server-name: ไม่บังคับ
server-name=www.microsoft.com
SNI (Server Name Indication) ที่จะนำเสนอระหว่างการจับมือ TLS นี้ควรเป็นเว็บไซต์จริงที่เข้าถึงบ่อยเพื่อผลการพรางที่ดีที่สุด ใบรับรองของเซิร์ฟเวอร์เป้าหมายต้องตรงกับชื่อนี้
fingerprint: ไม่บังคับ
fingerprint=chrome
ลายนิ้วมือไคลเอนต์ TLS ที่จะเลียนแบบ ค่าที่รองรับรวมถึง chrome, firefox, safari, ios, edge, 360, qq, android, random และชื่ออื่นที่ระบุไว้ใน fingerprint การใช้ลายนิ้วมือเบราว์เซอร์ทั่วไปช่วยหลีกเลี่ยงการตรวจจับ โปรดทราบว่า android และ random ไม่ได้แตกต่างกันในที่นี้ — ทั้งสองค่าจะถูกถือว่าเป็น chrome ส่วน none และค่าที่ Chute ไม่รู้จักจะทำให้การเชื่อมต่อถูกปฏิเสธ เพราะสแต็ก TLS ของระบบทำการจับมือแบบนี้ไม่ได้
spiderx: ไม่บังคับ
spiderx=/path
เส้นทางที่กำหนดเองสำหรับการพราง REALITY spider
ตัวอย่างกับ VLESS:
VLESS = vless, 1.2.3.4, 443, uuid=uuid, reality=true, public-key=BASE64KEY, server-name=www.microsoft.com, short-id=abcd, fingerprint=chrome
หมายเหตุ: REALITY ไม่ใช้ใบรับรองแบบดั้งเดิม การเชื่อมต่อใช้ใบรับรองจริงของเซิร์ฟเวอร์พราง
พารามิเตอร์สำหรับพร็อกซีที่ใช้ ECH
Encrypted Client Hello ซ่อนชื่อเซิร์ฟเวอร์จากผู้ที่เฝ้าดูการเชื่อมต่อ ชื่อจริงจะถูกเข้ารหัสอยู่ภายในการจับมือ ส่วนชื่อที่ส่งออกไปจริงบนสายคือ public_name ที่ ECHConfig ของเซิร์ฟเวอร์ประกาศไว้
ECH สร้างอยู่บนชุดเดียวกับลายนิ้วมือไคลเอนต์ ดังนั้นนโยบายต้องตั้งfingerprint ด้วย หากไม่มี ech=true จะไม่ทำอะไรเลยและชื่อจริงจะถูกส่งออกไปแบบไม่เข้ารหัส ใช้ได้กับ Trojan, VMess และ VLESS ที่ทำงานบน TLS ธรรมดารวมถึงการขนส่งแบบ WebSocket ของโปรโตคอลเหล่านั้น และกับ Shadowsocks และ ShadowsocksR ที่ทำงานบน WebSocket กับ TLS
หมายเหตุ: การขนส่งแบบ gRPC และ XHTTP ไม่รองรับ ECH เมื่อใช้
grpc=trueหรือxhttp=trueค่าech=trueจะถูกเพิกเฉยอย่างเงียบ ๆ และชื่อเซิร์ฟเวอร์จริงจะถูกส่งออกไปแบบไม่เข้ารหัส (ส่วนลายนิ้วมือไคลเอนต์และการแลกเปลี่ยนคีย์แบบต้านควอนตัมยังใช้ได้กับ gRPC และ XHTTP)
ech: ไม่บังคับ
ech=true
เปิดใช้ ECH หากไม่ได้ตั้ง ech-config Chute จะค้นหา ECHConfig จากระเบียน DNS HTTPS ของชื่อเซิร์ฟเวอร์ เช่นเดียวกับที่เบราว์เซอร์ทำ
ech-config: ไม่บังคับ
ech-config=AEX+DQBBAAAgACD...
ECHConfigList แบบ base64 ใช้แทนการค้นหาผ่าน DNS ตั้งค่านี้เมื่อเซิร์ฟเวอร์ไม่ได้ประกาศระเบียน HTTPS หรือเมื่อต้องการตรึงการตั้งค่าใดค่าหนึ่ง การตั้งค่านี้จะเปิด ECH ด้วยตัวมันเอง จึงไม่จำเป็นต้องมี ech=true เพิ่มอีก
ech-public-name: ไม่บังคับ
ech-public-name=cover.example.com
แทนที่ชื่อกำบังที่ถูกส่งแบบไม่เข้ารหัส ค่าเริ่มต้นคือ public_name ภายใน ECHConfig ซึ่งเป็นค่าที่เซิร์ฟเวอร์คาดหวัง ให้ตั้งค่านี้เฉพาะกรณีที่การติดตั้งใช้โฮสต์อื่นบังหน้า ECHConfig นี้
ตัวอย่างกับ Trojan:
Trojan = trojan, 1.2.3.4, 443, password=pw, tls=true, sni=secret.example.com, fingerprint=chrome, ech=true
หากเซิร์ฟเวอร์ปฏิเสธ ECH ซึ่งมักเกิดจากการตั้งค่าที่เก่าไปแล้ว มันจะตอบด้วยชื่อกำบังและแสดงใบรับรองของชื่อนั้น แล้วการจับมือจะถอยไปใช้ TLS ชั้นนอกแทน ตราบใดที่การตรวจสอบใบรับรองยังเปิดอยู่ การเชื่อมต่อจะล้มเหลวที่ขั้นตรวจสอบตัวตนแทนที่จะดำเนินต่อไปอย่างเงียบ ๆ แต่เมื่อใช้
skip-cert-verify=trueจะไม่มีอะไรตรวจชื่อนั้น และเซสชันจะดำเนินต่อไปอย่างเงียบ ๆ ภายใต้ชื่อกำบัง ให้อัปเดตech-configหรือลบออกเพื่อกลับไปใช้การค้นหาผ่าน DNS
TCP Fast Open (ทดลอง)
tfo: ไม่บังคับ
tfo=true
ข้อมูลเพิ่มเติมของ TCP fast open สามารถอ่านได้ใน Wikipedia การเปิดใช้งาน TCP fast open อาจทำให้การเชื่อมต่อล้มเหลวอย่างไม่คาดคิด Chute Android จะละเว้น tfo
พารามิเตอร์ทั่วไป
udp-relay: ไม่บังคับ (ค่าเริ่มต้น: true)
udp-relay=false
ทำเครื่องหมายนโยบายเป็น TCP เท่านั้น การรีเลย์ UDP เปิดโดยค่าเริ่มต้นเมื่อโปรโตคอลรองรับ ตั้งค่า udp-relay=false เพื่อยกเว้นนโยบายจากการรีเลย์ทราฟฟิก UDP Trojan รีเลย์ UDP ผ่านการเชื่อมต่อ TLS ธรรมดาไปยังพอร์ตของเซิร์ฟเวอร์ — โดยไม่ใช้ WebSocket, gRPC หรือ XHTTP และไม่ใช้ ECH แต่ใช้ลายนิ้วมือของนโยบาย — ดังนั้นหากเซิร์ฟเวอร์ให้บริการเฉพาะการขนส่งแบบใดแบบหนึ่งในนั้น ให้ตั้งค่า udp-relay=false
mux: ไม่บังคับ
mux=true
เปิดใช้งานการใช้การเชื่อมต่อซ้ำ / มัลติเพล็กซ์ ชื่อแฝง multiplex และ reuse ก็ยอมรับด้วย รองรับโดย HTTP/HTTPS, SOCKS5/SOCKS5-TLS, Trojan, VMess, VLESS, Hysteria2, Shadowsocks(R), ShadowTLS และ MASQUE ส่วน AnyTLS, TUIC และ SSH จะไม่ถูกมัลติเพล็กซ์บนแพลตฟอร์มใดเลย สำหรับโปรโตคอลเหล่านี้ mux=true จะไม่ถูกนำไปใช้ และบันทึกจะแจ้งเรื่องนี้เมื่อโหลดการกำหนดค่า: Policy <name>: mux=true is not applied: <reason>
Hysteria2 และ MASQUE มัลติเพล็กซ์บนการเชื่อมต่อ QUIC เดียวที่ใช้ร่วมกัน ส่วนโปรโตคอลอื่นทั้งหมดส่งการเชื่อมต่อที่มัลติเพล็กซ์ในรูปแบบเฟรมเฉพาะของ Chute ซึ่งมีเพียงเซิร์ฟเวอร์ที่เข้าใจรูปแบบนี้เท่านั้นที่แยกออกได้: เซิร์ฟเวอร์ Xray, sing-box และ Shadowsocks มาตรฐานแยกไม่ได้ ดังนั้นอย่าเปิด mux กับเซิร์ฟเวอร์เหล่านั้น
cert-fingerprint-sha256: ไม่บังคับ
cert-fingerprint-sha256=<hex>
ตรึงใบรับรองเซิร์ฟเวอร์ด้วยลายนิ้วมือ SHA-256 ชื่อแฝง cert-fp ก็ยอมรับด้วย ปัจจุบันมีผลเฉพาะกับ MASQUE เท่านั้น
encrypt-method (VMess): ไม่บังคับ (ค่าเริ่มต้น: auto)
encrypt-method=aes-128-gcm
การเข้ารหัสเพย์โหลด VMess ค่าที่รองรับ: aes-128-gcm, chacha20-poly1305, aes-128-cfb (ชื่อแฝง legacy), none
alpn: ไม่บังคับ
alpn=h2|http/1.1
ค่า ALPN หลายค่าคั่นด้วย | มีเพียง TUIC, Hysteria2 และ MASQUE เท่านั้นที่อ่านค่านี้ — แต่ละตัวใช้ h3 เป็นค่าเริ่มต้นเมื่อไม่ได้ตั้งไว้ — รวมถึง XHTTP ซึ่งใช้ค่านี้เลือกเวอร์ชัน HTTP ที่การขนส่งจะพูด ส่วนโปรโตคอลอื่นทั้งหมดไม่สนใจตัวเลือกนี้ และเสนอ ALPN ตามที่การขนส่งของมันกำหนด: h2 สำหรับ gRPC เมื่อมี fingerprint จะเป็น http/1.1 สำหรับ WebSocket และ h2,http/1.1 สำหรับ TLS ธรรมดา เมื่อไม่มีจะไม่เสนออะไรเลยทั้งสองกรณี เพราะตอนนั้นสแต็ก TLS ของระบบเป็นผู้ทำการจับมือ
underlying-proxy: ไม่บังคับ
underlying-proxy=OtherProxy
การต่อพ่วงพร็อกซี: ค่านี้ระบุชื่อนโยบายหรือนโยบายกลุ่มอื่นที่รับส่งทราฟฟิกของนโยบายนี้ ระบบจะเชื่อมต่ออัปสตรีมก่อนแล้วจึงเชื่อมต่อเซิร์ฟเวอร์ของตัวเอง ดังนั้น A = ..., underlying-proxy=B จะส่ง A ผ่าน B และ B สามารถระบุอัปสตรีมต่อเพื่อสร้างหลายฮอปได้ เว้นว่างหรือเขียน DIRECT หมายถึงเชื่อมต่อโดยตรง ชื่อที่มีช่องว่างหรือจุลภาคต้องใส่เครื่องหมายคำพูด เช่น underlying-proxy="HK 01" ชื่อที่ไม่มีอยู่จะทำให้การเชื่อมต่อล้มเหลว (fail closed) และมีข้อความในบันทึก โดยไม่ย้อนกลับไป DIRECT
วงจรที่เกิดจากการอ้างอิงแบบตายตัว — รวมถึงวงจรที่ย้อนกลับมาผ่าน underlying-proxy ของสมาชิกตัวแรกในกลุ่ม Relay เอง — จะถูกปฏิเสธตั้งแต่ตอนโหลดการกำหนดค่า ส่วนวงจรที่เกิดขึ้นเพียงเพราะสิ่งที่กลุ่มนโยบายเลือกอยู่ในขณะนั้นจะไม่ถูกปฏิเสธอย่างถาวร: เมื่อกลุ่มเปลี่ยนไปเลือกอย่างอื่น นโยบายก็ใช้งานได้ แต่ตราบใดที่วงจรยังอยู่ การเชื่อมต่อทุกรายการที่ผ่านมันจะถูกปฏิเสธ ไม่ว่าสายต่อพ่วงจะมีรูปแบบใด การเชื่อมต่อที่ซ้อนอัปสตรีมลึกเกิน 16 ชั้นจะถูกปฏิเสธ แทนที่จะถูกคลี่ออกไปไม่รู้จบ
อัปสตรีมยังเป็นผู้แปลงชื่อเซิร์ฟเวอร์ของนโยบายนี้ด้วย: เซิร์ฟเวอร์ที่ต่อพ่วงจะไม่ถูกค้นหาผ่านตัวแปลงชื่อภายในเครื่อง และ Chute จะไม่ ping ไปหาโดยตรง — รวมถึงจะไม่ ping นโยบายใด ๆ ที่อยู่หลังสมาชิกตัวแรกของกลุ่ม Relay โดยตรงเช่นกัน ค่าความหน่วงของมันมาจากการตรวจสอบสถานะของกลุ่มและการทดสอบความหน่วง ซึ่งทั้งคู่เข้าถึงผ่านสายต่อพ่วง — กลุ่ม url-test, fallback และ load-balance จะวัดสมาชิกที่ต่อพ่วงผ่านเส้นทางเดียวกับการเชื่อมต่อจริง
ต่อพ่วงได้ทุกโปรโตคอล ยกเว้น Tailscale (นโยบายในตัว TAILSCALE) ซึ่งเอนจินของมันเปิดการเชื่อมต่อเอง นโยบายที่เชื่อมต่อเซิร์ฟเวอร์ด้วยสตรีม — HTTP, SOCKS5, Shadowsocks, VMess, VLESS, Trojan, AnyTLS, SSH, XHTTP บน HTTP/1.1 หรือ HTTP/2 และอื่น ๆ — จะเปิดสตรีมนั้นผ่านอัปสตรีม ส่วน Hysteria2, TUIC, MASQUE และ XHTTP บน HTTP/3 (TLS กับ alpn=h3) ใช้ QUIC และ WireGuard กับ AmneziaWG ส่งดาต้าแกรมของตัวเอง จึงผ่านรีเลย์ UDP ของอัปสตรีม: อัปสตรีม (ถ้าเป็นกลุ่ม คือตัวที่เลือกอยู่ในขณะนั้น) ต้องรับส่ง UDP ได้ อย่างที่ Shadowsocks, SOCKS5, VMess, VLESS, Trojan และ Hysteria2 ทำได้ แต่พร็อกซี HTTP หรือ HTTPS ทำไม่ได้ บนอัปสตรีมที่ไม่รับส่ง UDP การเชื่อมต่อทุกรายการที่ผ่านนโยบายเหล่านี้จะถูกปฏิเสธและมีข้อความในบันทึก ไม่มีการส่งโดยตรง เมื่อต่อพ่วงแล้ว นโยบาย QUIC จะส่งดาต้าแกรมไม่เกิน 1200 ไบต์ และทันเนล WireGuard หรือ AmneziaWG จะใช้ MTU ภายใน 1280 เว้นแต่จะระบุค่าไว้ (mtu หรือ wg-mtu ในส่วนของมัน) เพื่อให้ดาต้าแกรมที่ห่อแล้วยังพอดีกับเส้นทาง 1500 ไบต์ WireGuard, AmneziaWG และ SSH ใช้การเชื่อมต่อเดียวผ่านอัปสตรีมของตัวเองสำหรับทราฟฟิกทั้งหมด จึงไม่มีตัวใดเป็นสมาชิกลำดับถัดไปของกลุ่ม Relayได้
UDP ก็ผ่านการต่อพ่วงได้เช่นกัน VMess, VLESS, Trojan และ AnyTLS ส่ง UDP ภายในสตรีม UDP ของโปรโตคอลเหล่านี้จึงใช้ได้บนอัปสตรีมใดก็ได้ Shadowsocks (รวม ShadowsocksR และ Shadowsocks 2022) และ SOCKS5 ส่งต่อ UDP เป็นดาต้าแกรม เช่นเดียวกับโปรโตคอล QUIC และ WireGuard: UDP ของโปรโตคอลเหล่านี้ใช้ได้เฉพาะเมื่ออัปสตรีมรับส่ง UDP — เว้นแต่โหนด Shadowsocks ที่ใช้ udp-over-tcp ซึ่งส่ง UDP ภายในสตรีม จึงใช้ได้บนอัปสตรีมใดก็ได้ นโยบาย SSH, HTTP และ HTTPS ไม่รับส่ง UDP เลย UDP ที่นโยบายที่ต่อพ่วงรับส่งไม่ได้จะเป็นไปตาม udp-policy-not-supported-behaviour (ค่าเริ่มต้น REJECT)
dialer-proxy ของ mihomo และ detour ของ sing-box จะนำเข้าเป็นตัวเลือกนี้ และ override: dialer-proxy ของผู้ให้บริการพร็อกซีจะนำเข้าเป็นunderlying-proxy ของผู้ให้บริการ กลุ่ม relay ของ Clash หรือ mihomo จะคงเป็นกลุ่ม Relay โดยสมาชิกอยู่ในลำดับเดิม หากต้องการส่งสมาชิกทุกตัวของกลุ่มนโยบายผ่านอัปสตรีมเดียว ให้ตั้ง underlying-proxy ที่กลุ่ม หากต้องการส่งนโยบายพร็อกซีทุกตัวผ่านอัปสตรีมเดียว ให้ตั้ง global-underlying-proxy ใน [General]
test-url: ไม่บังคับ
test-url=http://www.gstatic.com/generate_204
URL สำหรับทดสอบความหน่วงของนโยบายนี้เมื่อเป็นสมาชิกของกลุ่ม url-test หรือ fallback โดยกลุ่มจะทดสอบสมาชิกนี้ด้วย URL นี้แทน url ของกลุ่ม หากไม่ระบุ จะใช้ URL ของกลุ่ม
interface: ไม่บังคับ
interface=en0
ส่งการเชื่อมต่อ TCP ที่นโยบายนี้สร้างไปยังเซิร์ฟเวอร์ของตัวเองออกทางอินเทอร์เฟซเครือข่ายที่ระบุ — เช่น en0 บน Mac หรือ wlan0 บน Android — แทนอินเทอร์เฟซที่เส้นทางเริ่มต้นเลือก เมื่ออินเทอร์เฟซนั้นใช้งานไม่ได้ การเชื่อมต่อจะล้มเหลวแทนที่จะออกไปทางอื่น ส่วน allow-other-interface=true จะให้การเชื่อมต่อไปตามเส้นทางเริ่มต้นแทน ตัวเลือกนี้ใช้ได้บน Chute Mac และ Chute Android ส่วน iOS และ tvOS จะละเว้นตัวเลือกนี้ การรีเลย์ UDP ไม่ถูกผูกกับอินเทอร์เฟซ และโปรโตคอลที่ใช้ QUIC (TUIC, Hysteria2, MASQUE), WireGuard และ Tailscale ก็ไม่ถูกผูกเช่นกัน
พารามิเตอร์สำหรับพร็อกซีด้วย AnyTLS
AnyTLS เป็นโปรโตคอลพร็อกซีแบบ TLS พร้อมการอำพรางด้วย padding
AnyTLS = anytls, 1.2.3.4, 443, password, sni=example.com, skip-cert-verify=false
password: จำเป็นต้องระบุ
รหัสผ่าน/วลีรหัสผ่านที่ใช้สำหรับการยืนยันตัวตน
sni (ค่าเริ่มต้น: hostname)
sni=exmaple.com
เหมือนกับ TLS
skip-cert-verify: ไม่บังคับ
skip-cert-verify=true
เหมือนกับ TLS
รูปแบบ padding: ไม่บังคับ
Padding ถูกกำหนดค่าด้วย stop=N บวกกับคีย์ตัวเลขต่อแพ็กเก็ต:
AnyTLS = anytls, 1.2.3.4, 443, password, sni=example.com, stop=2, 0=30-30, 1=100-400+c
| พารามิเตอร์ | คำอธิบาย |
|---|---|
stop |
จำนวนแพ็กเก็ตที่มีการ padding |
0, 1, 2, ... |
รูปแบบ padding สำหรับแต่ละแพ็กเก็ต (คีย์ตัวเลข) |
แต่ละรูปแบบเป็นรายการของส่วน (segment) ที่เชื่อมด้วย + โดยส่วนหนึ่งเป็นได้ทั้ง c (check) หรือช่วงไบต์ min-max (สูงสุด 16384) เช่น stop=2, 0=30-30, 1=100-400+c ใช้ , เป็นตัวคั่นก็ได้ แต่เฉพาะเมื่อครอบค่าด้วยเครื่องหมายคำพูดเท่านั้น — 1="100-400,c" — เพราะคอมมาที่ไม่ได้ครอบไว้จะจบฟิลด์และทำให้บรรทัดเสีย แนะนำให้ใช้ +
พารามิเตอร์สำหรับพร็อกซีด้วย TUIC
TUIC เป็นโปรโตคอลพร็อกซีแบบ QUIC ที่ให้การส่งต่อ TCP และ UDP แบบมัลติเพล็กซ์ ยอมรับคีย์เวิร์ด tuic-v5 (การสะกดแบบ Surge) ด้วย และจะบันทึกนโยบายเป็น tuic
TUIC = tuic, 1.2.3.4, 443, uuid=uuid, password=password, sni=example.com, skip-cert-verify=false, alpn=h3
uuid: จำเป็นต้องระบุ
UUID สำหรับการยืนยันตัวตน
password: จำเป็นต้องระบุ
รหัสผ่านสำหรับการยืนยันตัวตน
sni (ค่าเริ่มต้น: hostname)
sni=exmaple.com
เหมือนกับ TLS
skip-cert-verify: ไม่บังคับ
skip-cert-verify=true
เหมือนกับ TLS
alpn: ไม่บังคับ
alpn=h3
ระบุสตริง ALPN สำหรับการเชื่อมต่อ QUIC
พารามิเตอร์สำหรับพร็อกซีด้วย Hysteria2
Hysteria2 เป็นโปรโตคอลพร็อกซีแบบ QUIC สำหรับสถานการณ์ที่มีปริมาณงานสูง
Hysteria2 = hysteria2, 1.2.3.4, 443, auth=password, sni=example.com, skip-cert-verify=false, up=10, down=100, alpn=h3
auth: จำเป็นต้องระบุ
รหัสผ่าน/โทเค็นการยืนยันตัวตน
sni (ค่าเริ่มต้น: hostname)
sni=exmaple.com
เหมือนกับ TLS
skip-cert-verify: ไม่บังคับ
skip-cert-verify=true
เหมือนกับ TLS
up: ไม่บังคับ (Mbps)
up=10
แบนด์วิดธ์อัปโหลดเป็น Mbps ระบบรับค่าและเก็บไว้ แต่ไม่ได้ใช้: ค่านี้ป้อนให้กับตัวควบคุมความคับคั่ง Brutal ของ Hysteria2 ซึ่งเอนจินนี้ไม่ได้ใช้งาน จะมีการบันทึกข้อความแจ้งสำหรับทุกนโยบายที่ตั้งค่านี้ ส่วนค่าที่ส่งออกไปจริงคือ down= ซึ่งเป็นอัตราที่ไคลเอนต์ประกาศตอนยืนยันตัวตน
down: ไม่บังคับ (Mbps)
down=100
แบนด์วิดธ์ดาวน์โหลดเป็น Mbps
alpn: ไม่บังคับ
alpn=h3
ระบุสตริง ALPN สำหรับการเชื่อมต่อ QUIC
obfs: ไม่บังคับ
obfs=salamander
เปิดใช้งานการอำพราง Salamander สำหรับทราฟฟิก QUIC Salamander ใช้ BLAKE2b-256 XOR เพื่ออำพรางแพ็กเก็ต QUIC ทำให้ทนต่อ DPI (Deep Packet Inspection)
obfs-password: ไม่บังคับ
obfs-password=your-obfuscation-key
รหัสผ่าน/คีย์ที่ใช้สำหรับการอำพราง Salamander จำเป็นต้องระบุเมื่อตั้งค่า obfs=salamander
พารามิเตอร์สำหรับพร็อกซีด้วย WireGuard
WireGuard เป็นโปรโตคอล VPN สมัยใหม่ Chute รองรับ WireGuard เป็นเซิร์ฟเวอร์พร็อกซีขาออก ทั้งในบรรทัดหรือโดยอ้างอิงส่วน [WireGuard] ที่มีชื่อ
การกำหนดค่าในบรรทัด:
WireGuard = wireguard, private-key=base64key, peer-public-key=base64key, self-ip=10.0.0.2, server=1.2.3.4, port=51820
การอ้างอิงส่วน (แนะนำ):
WireGuard = wireguard, section-name=wg0
ดู การกำหนดค่า WireGuard สำหรับไวยากรณ์ส่วน [WireGuard]
private-key: จำเป็นต้องระบุ (เฉพาะในบรรทัด)
คีย์ส่วนตัว WireGuard ที่เข้ารหัส base64
peer-public-key: จำเป็นต้องระบุ (เฉพาะในบรรทัด)
คีย์สาธารณะของเพียร์ WireGuard ที่เข้ารหัส base64
self-ip: ไม่บังคับ (ในบรรทัด)
ที่อยู่ IP ในเครื่องที่กำหนดให้กับอินเทอร์เฟซ WireGuard (เช่น 10.0.0.2)
self-ip-v6: ไม่บังคับ (ในบรรทัด)
ที่อยู่ IPv6 ในเครื่องที่กำหนดให้กับอินเทอร์เฟซ WireGuard
server: จำเป็นต้องระบุ
ที่อยู่เซิร์ฟเวอร์ WireGuard ระยะไกล (อาจมาจากส่วน [WireGuard] ที่อ้างอิงแทนบรรทัดนโยบายก็ได้)
port: จำเป็นต้องระบุ
พอร์ตเซิร์ฟเวอร์ WireGuard ระยะไกล (อาจมาจากส่วน [WireGuard] ที่อ้างอิงแทนบรรทัดนโยบายก็ได้)
preshared-key: ไม่บังคับ
คีย์ที่แชร์ล่วงหน้าที่เข้ารหัส base64 สำหรับการต้านทานควอนตัม (post-quantum)
allowed-ips: ไม่บังคับ (ในบรรทัด)
allowed-ips="10.0.0.0/8, 192.168.0.0/16"
ปลายทางที่เพียร์รับส่งให้ เขียนเป็น CIDR คั่นด้วยจุลภาค ให้ใส่เครื่องหมายคำพูดครอบค่าเพราะค่ามีจุลภาค ปลายทางที่อยู่นอกช่วงเหล่านี้จะถูกปฏิเสธหรือถูกทิ้ง เพราะเพียร์ไม่สามารถส่งเส้นทางกลับมาได้ หากไม่ระบุ ทุกปลายทางจะถูกรับส่ง ดู การกำหนดค่า WireGuard สำหรับรูปแบบที่เขียนเป็นส่วน
keepalive: ไม่บังคับ (วินาที)
keepalive=25
ช่วง keepalive ถาวรสำหรับการข้าม NAT หากไม่ระบุ จะไม่มีการส่ง keepalive เลย
mtu: ไม่บังคับ
mtu=1420
MTU สำหรับอินเทอร์เฟซ WireGuard
reserved: ไม่บังคับ
reserved=0,1,2
ไบต์สงวนสำหรับส่วนหัวแพ็กเก็ต WireGuard ถูกแยกวิเคราะห์แต่ยังไม่มีผลในเอนจินปัจจุบัน — ค่านี้ไม่รองรับโดย BoringTun FFI และจะถูกเพิกเฉยพร้อมบันทึกคำเตือนในบันทึก
พารามิเตอร์สำหรับพร็อกซีด้วย ShadowTLS
ShadowTLS เป็นโปรโตคอลพร็อกซีแบบ TLS ที่ห่อหุ้มทราฟฟิกภายในเซสชัน TLS 1.3 มาตรฐาน Chute พูด ShadowTLS v3: รหัสผ่านถูกส่งไปเป็น HMAC ใน session_id ของ ClientHello การยืนยันตัวตนจึงเกิดขึ้นภายในการจับมือ ไม่ใช่หลังจากนั้น
ภายในทันเนลที่สร้างขึ้นแล้ว Chute จะส่งคำทักทาย SOCKS5 แบบไม่ต้องยืนยันตัวตนและคำสั่ง SOCKS5 CONNECT ดังนั้นเซิร์ฟเวอร์ที่อยู่หลัง ShadowTLS ต้องเป็นพร็อกซี SOCKS5 ที่ไม่ต้องยืนยันตัวตน การติดตั้ง shadow-tls ที่ส่งต่อไปยังพอร์ต Shadowsocks แทนพอร์ต SOCKS5 จะจับมือ TLS สำเร็จแล้วล้มเหลวในภายหลัง
ShadowTLS = shadowtls, 1.2.3.4, 443, password=password, sni=example.com, skip-cert-verify=false, fingerprint=chrome
password: จำเป็นต้องระบุ
รหัสผ่านที่ใช้สำหรับการยืนยันตัวตนการจับมือ ShadowTLS
sni (ค่าเริ่มต้น: hostname)
sni=example.com
เหมือนกับ TLS และการเขียนค่านี้ยังเป็นสิ่งที่เปิดการตรวจสอบใบรับรองของเว็บกำบังด้วย — ดูด้านล่าง
skip-cert-verify: ไม่บังคับ
skip-cert-verify=true
สิ่งที่เปิดการตรวจสอบคือ sni= เมื่อเขียน sni= ไว้และไม่ได้ระบุ skip-cert-verify หรือระบุเป็น false เชนและชื่อโฮสต์ของใบรับรองที่เว็บซึ่งถูกใช้บังหน้าแสดงออกมาจะถูกตรวจสอบกับชื่อนั้น และเมื่อการตรวจสอบล้มเหลว การเชื่อมต่อก็ล้มเหลวด้วย ส่วนเมื่อไม่มี sni= ใบรับรองจะไม่ถูกตรวจสอบ และจะมีคำเตือนถูกบันทึกหนึ่งครั้งต่อหนึ่งนโยบายเมื่อใช้งานครั้งแรก เพราะชื่อเดียวที่มีอยู่คือชื่อของรีเลย์ ซึ่งไม่ใช่ชื่อของเว็บกำบัง ส่วน skip-cert-verify=true จะข้ามการตรวจสอบในทั้งสองกรณี
fingerprint: ไม่บังคับ
fingerprint=chrome
ลายนิ้วมือไคลเอนต์ TLS ที่จะเลียนแบบ ค่าที่รองรับรวมถึง chrome, firefox, safari, ios, edge, 360, qq, android, random และชื่ออื่นที่ระบุไว้ใน fingerprint การใช้ลายนิ้วมือเบราว์เซอร์ทั่วไปช่วยหลีกเลี่ยงการตรวจจับ โปรดทราบว่า android และ random ไม่ได้แตกต่างกันในที่นี้ — ทั้งสองค่าจะถูกถือว่าเป็น chrome ส่วน none และค่าที่ Chute ไม่รู้จักจะทำให้การเชื่อมต่อถูกปฏิเสธ เพราะสแต็ก TLS ของระบบทำการจับมือแบบนี้ไม่ได้
พารามิเตอร์สำหรับพร็อกซีด้วย MASQUE
MASQUE เป็นโปรโตคอลพร็อกซีที่ใช้ HTTP/3 ซึ่งส่งทราฟฟิกผ่าน QUIC นโยบาย MASQUE ต้องมี type, host และ port ส่วน token สำหรับการยืนยันตัวตนเป็นตัวเลือก
ProxyMASQUE = masque, 1.2.3.4, 443, token=auth-token, mode=connect-udp, sni=example.com, alpn=h3, skip-cert-verify=false, mux=true
token: ไม่บังคับ
token=auth-token
โทเคน Bearer แบบไม่บังคับสำหรับการยืนยันตัวตนกับเซิร์ฟเวอร์ MASQUE และยอมรับชื่อแฝง masque-token= ด้วยเช่นกัน
mode: ไม่บังคับ
mode=connect-udp
ยอมรับเพื่อความเข้ากันได้ แต่ไม่เปลี่ยนพฤติกรรมการทำทันเนล: โฟลว์ TCP จะใช้ทันเนล CONNECT ธรรมดาเสมอ และโฟลว์ UDP จะใช้ connect-udp เสมอ และยอมรับชื่อแฝง masque-mode= ด้วยเช่นกัน
mux: ไม่บังคับ
mux=true
เปิดใช้งานมัลติเพล็กซ์บนการเชื่อมต่อ QUIC ที่ใช้ร่วมกัน
sni / alpn / skip-cert-verify: ไม่บังคับ
เช่นเดียวกับ TLS เนื่องจาก MASQUE ทำงานบน QUIC จึงมักใช้ alpn=h3
พารามิเตอร์สำหรับพร็อกซีด้วย SSH
ดู SSH Proxy สำหรับเอกสารฉบับเต็ม
หน้านี้เป็นฉบับแปลจากเวอร์ชันภาษาอังกฤษ หากเนื้อหาไม่ตรงกัน ให้ยึดเวอร์ชันภาษาอังกฤษเป็นหลัก