ตัวเลือกเบ็ดเตล็ด

[General]
ipv6 = true
loglevel = notify

skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local

tun-excluded-routes = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
tun-included-routes = 192.168.1.12/32

ตัวเลือกทั่วไป

เปิดใช้งานการรองรับ IPv6 เต็มรูปแบบ (ค่าเริ่มต้น: true)

ipv6 = true

loglevel (ค่าเริ่มต้น: warning)

loglevel = notify

หนึ่งใน none, fatal, warning, notify, info หรือ verbose ไม่แนะนำให้เปิดใช้งาน verbose ในการใช้งานประจำวันเพราะจะทำให้ประสิทธิภาพลดลงอย่างมาก

skip-proxy

skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local

ในเวอร์ชัน iOS ตัวเลือกนี้บังคับให้การเชื่อมต่อไปยังช่วงโดเมน/IP เหล่านี้ถูกจัดการโดย Chute TUN แทนพร็อกซี Chute ในเวอร์ชัน macOS การตั้งค่าเหล่านี้จะถูกนำไปใช้กับระบบเมื่อเปิดใช้งาน "Set as System Proxy" ตัวเลือกนี้ใช้เพื่อแก้ไขปัญหาความเข้ากันได้กับบางแอป

  • เพื่อระบุโดเมนเดียว ให้ป้อนชื่อโดเมน - ตัวอย่างเช่น apple.com
  • เพื่อระบุเว็บไซต์ทั้งหมดบนโดเมน ใช้เครื่องหมายดอกจันก่อนชื่อโดเมน - ตัวอย่างเช่น *apple.com
  • เพื่อระบุส่วนเฉพาะของโดเมน ระบุแต่ละส่วน - ตัวอย่างเช่น store.apple.com
  • เพื่อระบุโฮสต์หรือเครือข่ายตามที่อยู่ IP ให้ป้อนที่อยู่ IP เฉพาะ เช่น 192.168.2.11 หรือช่วงที่อยู่ เช่น 192.168.2.* หรือ 192.168.2.0/24

หมายเหตุ: หากคุณป้อนที่อยู่ IP หรือช่วงที่อยู่ คุณจะสามารถข้ามพร็อกซีได้เฉพาะเมื่อคุณเชื่อมต่อกับโฮสต์นั้นโดยใช้ที่อยู่นั้น ไม่ใช่เมื่อคุณเชื่อมต่อกับโฮสต์โดยชื่อโดเมนที่แก้ไขเป็นที่อยู่นั้น


การรับฟังของเซิร์ฟเวอร์พร็อกซี

interface = 127.0.0.1
port = 8118
socks-interface = 127.0.0.1
socks-port = 8119

interface / port ควบคุมที่อยู่และพอร์ตการรับฟังของเซิร์ฟเวอร์พร็อกซี HTTP (ค่าเริ่มต้น 127.0.0.1:8118) ส่วน socks-interface / socks-port ควบคุมเซิร์ฟเวอร์พร็อกซี SOCKS5 (ค่าเริ่มต้น 127.0.0.1:8119)

ชื่อพ้องเพื่อความเข้ากันได้: doh-server ถูกยอมรับให้เป็นชื่อพ้องของ doh ส่วน http-listen / socks5-listen (เช่น 0.0.0.0:6152, [::]:6153 หรือระบุเพียงหมายเลขพอร์ต) จะถูกจับคู่เข้ากับการตั้งค่า interface/port ข้างต้น หากโฮสต์ที่รับฟังเป็น wildcard (0.0.0.0, :: หรือ *) จะเป็นการตั้งค่า allow-wifi-access = true ไปด้วย


การตรวจสอบสิทธิ์พร็อกซีขาเข้า

http-auth = username:password

กำหนดให้ไคลเอนต์ต้องตรวจสอบสิทธิ์ก่อนใช้เซิร์ฟเวอร์พร็อกซี HTTP และ SOCKS5 ของ Chute บรรทัดนี้สามารถระบุซ้ำได้เพื่ออนุญาตข้อมูลรับรองหลายชุด


บายพาสคำขอของระบบ

bypass-system = true

เมื่อเปิดใช้งาน คำขอที่ส่งโดยกระบวนการของระบบจะบายพาสการประมวลผลของ Chute

ค่าเริ่มต้น: true


Always Real IP

always-real-ip = *.example.com, tracker.example.org

เมื่อ Chute ให้บริการที่อยู่ IP ปลอมสำหรับคำถาม DNS ที่ถูกไฮแจ็ก (ดู hijack-dns) ชื่อโฮสต์ที่ตรงกับรายการที่คั่นด้วยคอมมานี้จะถูกตอบด้วยที่อยู่ IP จริงที่แก้ไขแล้วเสมอแทน รองรับ wildcard


ขัดจังหวะการเชื่อมต่อที่มีอยู่

interrupt-exist-connections = true

เมื่อเปิดใช้งาน การเปลี่ยนนโยบายที่เลือกในกลุ่มนโยบายใดๆ (ผ่าน URL Test, Fallback, Load Balance, SSID หรือการเลือกด้วยตนเอง) จะปิดการเชื่อมต่อที่มีอยู่ที่ใช้นโยบายเก่าอย่างนุ่มนวล สิ่งนี้รับประกันว่าการเชื่อมต่อใช้พร็อกซีที่เลือกใหม่ทันทีแทนที่จะค้างอยู่กับพร็อกซีเก่า

การเชื่อมต่อที่ได้รับผลกระทบแต่ละรายการถูกปิดอย่างนุ่มนวลด้วยเวลาหมด 3 วินาทีก่อนที่จะถูกบังคับปิด

ค่าเริ่มต้น: false นี่คือการตั้งค่าส่วนกลาง — มันส่งผลต่อกลุ่มนโยบายทั้งหมด


Network Framework (macOS / tvOS)

network-framework = true

เปิดใช้งาน Apple Network.framework สำหรับการเชื่อมต่อขาออก การใช้ Network.framework สามารถให้ประสิทธิภาพที่ดีขึ้นและการรวมสแตก TLS สมัยใหม่บนแพลตฟอร์มที่รองรับ

ค่าเริ่มต้น: true บน macOS, false บน iOS และ tvOS


ยกเว้นชื่อโฮสต์อย่างง่าย

exclude-simple-hostnames = true

เมื่อเปิดใช้งาน คำขอไปยังชื่อโฮสต์อย่างง่าย (ชื่อป้ายเดียวที่ไม่มีจุด เช่น localhost) ข้ามกฎพร็อกซีและถูกแก้ไขในเครื่อง สิ่งนี้ช่วยหลีกเลี่ยงการค้นหา DNS ที่ไม่จำเป็นสำหรับชื่อเครือข่ายท้องถิ่น

บน Chute Mac มีการย้ายข้อมูลแบบครั้งเดียวที่เปิดใช้งานตัวเลือกนี้เป็นค่าเริ่มต้นในการรันครั้งแรก แต่หากผู้ใช้ตั้งค่าปิดไว้อย่างชัดเจน ระบบจะเคารพการตั้งค่านั้น

ค่าเริ่มต้น: false


ปิดใช้งานการบันทึกฐานข้อมูล

disable-db-record = true

เมื่อเปิดใช้งาน Chute หยุดเขียนระเบียนทราฟฟิกไปยังฐานข้อมูลในเครื่อง สิ่งนี้สามารถปรับปรุงประสิทธิภาพและลดการใช้พื้นที่เก็บข้อมูล แต่ประวัติทราฟฟิกจะไม่พร้อมใช้งานใน Chute Dashboard

ค่าเริ่มต้น: false


menu-bar-show-speed = true

เมื่อเปิดใช้งาน Chute Mac แสดงความเร็วอัปโหลดและดาวน์โหลดปัจจุบันในแถบเมนู

ค่าเริ่มต้น: false


ไฮแจ็กเซิร์ฟเวอร์ DNS อื่น

hijack-dns = 8.8.8.8:53

โดยค่าเริ่มต้น Chute จะส่งคืนที่อยู่ IP ปลอมเฉพาะสำหรับคำถาม DNS ที่ส่งไปยังที่อยู่ DNS ของ Chute (198.18.0.2) คำถามที่ส่งไปยัง DNS มาตรฐานจะถูกส่งต่อเพียงอย่างเดียว

บางอุปกรณ์หรือซอฟต์แวร์ใช้เซิร์ฟเวอร์ DNS แบบ hardcode เสมอ (ตัวอย่างเช่น Google Speakers ใช้ 8.8.8.8 เสมอ) คุณอาจใช้ตัวเลือกนี้เพื่อไฮแจ็กคำถามเพื่อรับที่อยู่ปลอม

คุณอาจใช้ hijack-dns = *:53 เพื่อไฮแจ็กคำถาม DNS ทั้งหมด


เส้นทางที่ยกเว้น

tun-excluded-routes = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12

Chute VIF สามารถประมวลผลเฉพาะโปรโตคอล TCP และ UDP ใช้ตัวเลือกนี้เพื่อข้ามช่วง IP ที่ระบุเพื่ออนุญาตให้ทราฟฟิกทั้งหมดผ่านได้

หมายเหตุ: ตัวเลือกนี้ทำงานเฉพาะกับประเภท Enhanced Mode แบบ VIF (utun) — มันไม่มีผลเมื่อใช้ประเภท PacketTunnel VPN คำขอที่จัดการโดย Chute Proxy Server จะไม่ได้รับผลกระทบ รวม 'skip-proxy' และ 'tun-excluded-routes' เพื่อให้แน่ใจว่าทราฟฟิก HTTP บางอย่างข้าม Chute

ตัวเลือกนี้อาจทำให้เกิดข้อผิดพลาดของระบบ ENOMEM (Cannot allocate memory) ดูเหมือนเป็นข้อบกพร่องในระบบ iOS โปรดอย่าใช้ตัวเลือกนี้หากเป็นไปได้


เส้นทางที่รวม

tun-included-routes = 192.168.1.12/32

โดยค่าเริ่มต้น อินเทอร์เฟซ Chute VIF จะประกาศตัวเองเป็นเส้นทางเริ่มต้น แต่เนื่องจากอินเทอร์เฟซ Wi-Fi มีเส้นทางที่เล็กกว่า ทราฟฟิกบางอย่างอาจไม่ผ่านอินเทอร์เฟซ Chute VIF ใช้ตัวเลือกนี้เพื่อเพิ่มเส้นทางที่เล็กกว่า

หมายเหตุ: ตัวเลือกนี้ทำงานเฉพาะกับประเภท Enhanced Mode แบบ VIF (utun) — มันไม่มีผลเมื่อใช้ประเภท PacketTunnel VPN


การดมกลิ่นโปรโตคอล

sniffing-enabled = true
sniffing-timeout = 100

Chute สามารถตรวจจับโปรโตคอลที่แท้จริงของการเชื่อมต่อโดยการตรวจสอบไบต์เริ่มต้น สิ่งนี้ทำให้กฎเช่น PROTOCOL,TLS,Proxy ทำงานได้อย่างถูกต้องแม้สำหรับการเชื่อมต่อขาเข้าที่ไม่ใช่ HTTP

sniffing-enabled (ค่าเริ่มต้น: false)

sniffing-enabled = true

เปิดใช้งานการตรวจจับโปรโตคอลสำหรับการเชื่อมต่อ TCP

sniffing-timeout (ค่าเริ่มต้น: 100ms)

sniffing-timeout = 200

เวลาสูงสุดเป็นมิลลิวินาทีในการรอข้อมูลเริ่มต้นเพื่อกำหนดโปรโตคอล เพิ่มค่านี้หากการตรวจจับโปรโตคอลล้มเหลวบนการเชื่อมต่อที่ช้า


การบล็อก QUIC

block-quic = auto

ควบคุมว่า Chute จะปฏิเสธทราฟฟิก QUIC ที่ตรวจพบ รวมถึง HTTP/3 หรือไม่ QUIC ทำงานผ่าน UDP และไม่สามารถถอดรหัสด้วย HTTP MitM ของ Chute ได้ การปฏิเสธ QUIC อาจทำให้ไคลเอนต์ที่รองรับลองเชื่อมต่อใหม่ผ่าน TCP จึงสามารถใช้การประมวลผลพร็อกซีบน TCP และการถอดรหัส HTTPS เมื่อกำหนดค่าไว้ได้

ค่า พฤติกรรม
off ไม่ใช้การบล็อก QUIC แบบส่วนกลาง (ค่าเริ่มต้น) ทราฟฟิก QUIC ที่ตรวจพบจะเป็นไปตามกฎการกำหนดเส้นทางปกติ
on ปฏิเสธโฟลว์ QUIC ที่ตรวจพบทั้งหมด รวมถึงทราฟฟิกที่กำหนดเส้นทางไปยัง DIRECT
auto ปฏิเสธ QUIC ที่ตรวจพบเฉพาะเมื่อนโยบายขาออกสุดท้ายเป็นพร็อกซี ทราฟฟิกที่กำหนดเส้นทางไปยัง DIRECT จะได้รับอนุญาต ส่วนทราฟฟิกที่กำหนดเส้นทางไปยัง REJECT จะยังคงถูกปฏิเสธตามกฎนั้น

สำหรับทราฟฟิกที่เข้ามาทาง TUN Chute จะตอบกลับโฟลว์ QUIC ที่ถูกปฏิเสธด้วยข้อความ ICMP/ICMPv6 Port Unreachable ทำให้ไคลเอนต์ที่รองรับสามารถถอยกลับไปใช้ TCP ได้โดยไม่ต้องรอ QUIC หมดเวลา

การตรวจจับ QUIC สำหรับ block-quic ทำงานโดยอัตโนมัติและไม่ต้องใช้ sniffing-enabled โดย sniffing-enabled ใช้ควบคุมการตรวจจับโปรโตคอล TCP หากต้องการจัดการแต่ละโฟลว์ QUIC ด้วยกฎ ให้ใช้กฎ PROTOCOL,QUIC,...


บายพาส TUN

bypass-tun = 192.168.0.0/16, 10.0.0.0/8

คล้ายกับ skip-proxy แต่ทำงานในระดับการจัดเส้นทาง TUN/VIF การเชื่อมต่อไปยังช่วง IP เหล่านี้จะบายพาสอินเทอร์เฟซ TUN ทั้งหมดและผ่านสแตกเครือข่ายของระบบโดยตรง

หมายเหตุ: ตัวเลือกนี้ทำงานเฉพาะกับประเภท Enhanced Mode แบบ VIF (utun) มันไม่มีผลเมื่อใช้ประเภท PacketTunnel VPN


แสดงหน้าข้อผิดพลาดสำหรับ Reject

show-error-page-for-reject = true

เมื่อเปิดใช้งาน Chute ส่งคืนหน้าข้อผิดพลาดที่เป็นมิตรกับผู้ใช้สำหรับคำขอที่ถูกปฏิเสธแทนที่จะเพียงแค่ทิ้งการเชื่อมต่อ


Optimistic DNS

optimistic-dns = false

เมื่อเปิดใช้งาน Chute ส่งคืนผลลัพธ์ DNS ที่แคชไว้ทันทีในขณะที่รีเฟรชระเบียนในพื้นหลัง สิ่งนี้ลดเวลาแฝงในการเชื่อมต่อโดยมีค่าใช้จ่ายคืออาจส่งคืนระเบียน DNS ที่เก่า

ค่าเริ่มต้น: true ตั้งค่า optimistic-dns = false เพื่อปิดใช้งาน


อนุญาตการเข้าถึง Wi-Fi

allow-wifi-access = true

ให้อุปกรณ์อื่นในเครือข่ายเดียวกันเข้าถึงพอร์ตพร็อกซี HTTP และ SOCKS5 ของ Chute ได้ โดยขยายที่อยู่ผูกของตัวรับฟังทั้งสองเป็น 0.0.0.0 การกำหนดค่าแบบ Surge — รวมถึงการแม็ป allow-lan ของตัวนำเข้า sing-box — มีเพียงแฟล็กนี้และปล่อย interface ไว้ที่ค่าเริ่มต้น 127.0.0.1 แฟล็กจึงต้องขยายที่อยู่ผูกด้วยตัวเอง

แฟล็กนี้กับการเขียน interface เป็นไวลด์การ์ดอย่างชัดเจนคือสองวิธีเขียนของเจตนาเดียวกัน และ Chute ใช้ยูเนียนของทั้งสอง การกำหนดค่าที่เขียน 0.0.0.0 อยู่แล้วจะทำงานเหมือนเดิมทุกประการ การเปลี่ยนแฟล็กจะผูกตัวรับฟังทั้งสองใหม่ การถอนสิทธิ์เข้าถึงจึงมีผลตอนโหลดซ้ำ ไม่ต้องรอเริ่มระบบครั้งถัดไป

พอร์ตเหล่านี้คือพอร์ตพร็อกซี และไม่มีการยืนยันตัวตนเว้นแต่ตั้ง http-auth บนเครือข่ายที่คุณไม่ได้ควบคุม ให้ตั้งข้อมูลรับรองด้วย


การกำหนดค่าแบบจัดการ

#!MANAGED-CONFIG https://example.com/config.conf interval=86400 strict=false

การกำหนดค่าที่บรรทัดแรกเป็นส่วนหัว #!MANAGED-CONFIG จะถูกดึงจาก URL นั้นใหม่โดยอัตโนมัติ พารามิเตอร์ของส่วนหัวและพฤติกรรมการอัปเดตมีบันทึกไว้ในการกำหนดค่าแบบจัดการ


Replica / การบันทึกทราฟฟิก

replica = true

คีย์ replica ใน [General] (replica = true) เปิดใช้การบันทึกทราฟฟิก ส่วน [Replica] ทำหน้าที่กรองสิ่งที่แสดงใน Chute Dashboard โดยคีย์ต่าง ๆ มีบันทึกไว้ใน Replica


การเข้าถึง External Controller (Chute Dashboard)

external-controller-access = password@0.0.0.0:6155

เริ่มเซิร์ฟเวอร์ควบคุมระยะไกลที่ใช้โดย Chute Dashboard ค่าคือ password@host:port; อาจมีชื่อผู้ใช้นำหน้ารหัสผ่านก็ได้ (user:password@host:port) บน iOS ช่องทาง USB ที่มาคู่กันจะถูกเปิดบน port + 1 (ไม่มีบน macOS) วิธีเชื่อมต่ออยู่ในหน้า Chute Dashboard


HTTP Control API และ Web UI

[General]
external-http-controller = 127.0.0.1:9090
external-http-secret = your-secret-token
external-http-ui = true
external-http-cors = false

Chute มี HTTP control API ในตัวและ UI การจัดการบนเว็บ คล้ายกับแดชบอร์ด Clash และ Surge API เปิดเผยสถานะเคอร์เนล ทราฟฟิก การเชื่อมต่อ DNS การควบคุมนโยบาย และการจัดการการกำหนดค่าผ่านปลายทาง REST

external-http-controller (ค่าเริ่มต้น: ปิดใช้งาน)

external-http-controller = 127.0.0.1:9090

ที่อยู่และพอร์ตของเซิร์ฟเวอร์ควบคุม HTTP ใช้ 127.0.0.1 สำหรับการเข้าถึงเฉพาะเครื่อง การผูกกับที่อยู่ที่ไม่ใช่ลูปแบ็ก (เช่น 192.168.1.5:9090) ต้องตั้ง external-http-secret อย่างชัดเจน มิฉะนั้นเซิร์ฟเวอร์จะปฏิเสธการเริ่มทำงานและบันทึกว่าขาดอะไร

ที่อยู่ไวลด์การ์ด (0.0.0.0, ::, *) นับเป็นไม่ใช่ลูปแบ็กในการตรวจนี้ เพราะมันรับฟังบนทุกอินเทอร์เฟซ ซึ่งตรงข้ามกับเฉพาะเครื่อง รูปแบบที่รับได้คือ 0.0.0.0:9090, *:9090 (ความหมายเดียวกัน) และสำหรับ IPv6 คือ [::]:9090 — เขียน :::9090 เปล่า ๆ ก็จะใส่วงเล็บเหลี่ยมให้เอง ส่วนที่อยู่ที่แจงไม่ได้จะถูกรายงานเป็นข้อผิดพลาดของการกำหนดค่า แทนที่จะปล่อยให้ตัวควบคุมปิดอยู่เงียบ ๆ และช่วง 127.0.0.0/8 ทั้งหมดนับเป็นลูปแบ็ก ไม่ใช่แค่ 127.0.0.1

external-http-secret (ค่าเริ่มต้น: โทเคนที่สร้างให้)

external-http-secret = your-secret-token

โทเคน Bearer ที่ใช้ยืนยันตัวตนกับ API คำขอต้องมีส่วนหัว Authorization: Bearer <secret> โทเคนรับเฉพาะในส่วนหัวนี้เท่านั้น ไม่รับผ่านพารามิเตอร์คิวรี และเปรียบเทียบด้วยเวลาคงที่ การยืนยันตัวตนล้มเหลวคืนค่า 401 พร้อม {"ok": false, "error": {"code": "unauthorized", "message": "missing or invalid token"}} สิ่งที่ถูกป้องกันคือเส้นทาง /api/* และชื่อพ้องที่เข้ากันได้กับ Clash เท่านั้น ส่วนไฟล์สแตติกของ Web UI ไม่ต้องใช้โทเคน (เมื่อ external-http-ui = false จะหายไปทั้งหมด — หน้าเว็บตอบ 404)

เมื่อไม่ได้ระบุคีย์นี้ Chute จะสร้างโทเคนให้ แทนที่จะให้บริการโดยไม่ยืนยันตัวตน โทเคนที่สร้างขึ้นจะถูกเขียนลงไฟล์ control-token ในโฟลเดอร์แชร์ของ Chute — ไม่ใช่ข้างไฟล์กำหนดค่า: บน iOS และ tvOS คือคอนเทนเนอร์ของ App Group ส่วนบน Android คือไดเรกทอรีข้อมูลส่วนตัวของแอป — ด้วยสิทธิ์ที่เจ้าของอ่านได้เท่านั้น ถูกใช้ต่อหลังรีสตาร์ต และแอปจะแสดงให้คุณเห็น — ดูการเปิดคอนโซลเว็บ API ควบคุมสามารถส่งมอบฐานข้อมูลการเชื่อมต่อ ซึ่งบันทึกไว้ทุก URL ทุกส่วนหัว และทุกชื่อโปรเซสที่เห็นในรอบการทำงานนี้ การเปิดทิ้งไว้จึงไม่ใช่ค่าเริ่มต้นที่สมเหตุสมผล

หากยังต้องการให้บริการโดยไม่ยืนยันตัวตน ให้ระบุอย่างชัดเจนในไฟล์กำหนดค่า:

external-http-secret = none

ค่านี้ได้รับการยอมรับเฉพาะเมื่อผูกกับลูปแบ็กเท่านั้น นอกลูปแบ็ก ทั้ง none และการไม่ระบุคีย์ล้วนไม่พอ เซิร์ฟเวอร์ควบคุมจะปฏิเสธการเริ่มทำงานและบอกว่าต้องการอะไร

หมายเหตุการอัปเกรด: หากคุณเคยอาศัยว่า «ไม่มี external-http-secret เท่ากับไม่ยืนยันตัวตน» สคริปต์ในเครื่องจะเริ่มได้รับ 401 ให้อ่านโทเคนที่สร้างขึ้นจากแอป หรือเขียน external-http-secret = none เพื่อคงพฤติกรรมเดิมไว้อย่างตั้งใจ

external-http-ui (ค่าเริ่มต้น: true)

external-http-ui = true

เมื่อเปิดใช้งาน Chute ให้บริการ Web UI ในตัวที่ที่อยู่คอนโทรลเลอร์ Web UI มีแดชบอร์ดภาพรวม การจัดการการเชื่อมต่อ การตรวจสอบ DNS การตรวจสอบทราฟฟิก การควบคุมนโยบาย และการแก้ไขการกำหนดค่า ตั้งค่าเป็น false เพื่อให้ API เปิดใช้งานในขณะที่ปิดใช้งาน UI

การเปิดคอนโซลเว็บ

คอนโซลให้บริการที่ที่อยู่ของเซิร์ฟเวอร์ควบคุม และแต่ละแอปสามารถส่งที่อยู่กับโทเคนให้คุณได้ — รวมถึงโทเคนที่ระบบสร้างให้ ซึ่งมิฉะนั้นคุณจะไม่มีทางอ่านได้เลย:

  • Chute Mac: แถบเมนู → เปิดคอนโซลเว็บ และ คัดลอกโทเคนคอนโซลเว็บ หน้าต่างรายละเอียดการเชื่อมต่อยังมี คำขอและประวัติ ซึ่งเปิดคอนโซลเช่นกัน — เปิดหน้าแรก ไม่ใช่การเชื่อมต่อนั้น
  • Chute iOS: แผงควบคุม → แถว Web UI → เปิด, คัดลอกที่อยู่ หรือ คัดลอกโทเคนการเข้าถึง
  • Chute tvOS: แผงควบคุมมีแถว ที่อยู่ Web UI แยกต่างหากใต้สวิตช์ Web UI แสดงโฮสต์และพอร์ต เมื่อเลือก ถ้าตัวรับฟังเข้าถึงได้จากอุปกรณ์อื่นจะแสดงคิวอาร์โค้ด — โทเคนลงชื่อเข้าใช้อยู่ในโค้ด ไม่แสดงบนหน้าจอ — แต่ถ้าตัวควบคุมผูกกับลูปแบ็ก จะแสดงคำอธิบายแทน เพราะคอนโซลบนลูปแบ็กเปิดจากโทรศัพท์ไม่ได้
  • Chute Android: แผงควบคุมแสดงที่อยู่เป็นคำบรรยายใต้สวิตช์ HTTP API และมีแถว โทเค็นการเข้าถึงที่สร้างขึ้น แยกต่างหาก แตะเพื่อคัดลอก — แถวนี้ปรากฏเฉพาะเมื่อเคอร์เนลเป็นผู้สร้างโทเคน ซีเคร็ตที่คุณกำหนดเองจะไม่ถูกแสดงเลย

ที่อยู่ที่ได้จะพ่วงโทเคนมาในพารามิเตอร์คิวรี หน้าเว็บจะใช้มันตอนโหลดแล้วลบออกจากแถบที่อยู่ ดังนั้นการเปิดลิงก์คือการลงชื่อเข้าใช้ที่สมบูรณ์ ไม่มีใครต้องคัดเลข 16 ฐาน 32 ตัวด้วยมือ


external-http-cors (ค่าเริ่มต้น: false)

external-http-cors = true

เปิดใช้งานส่วนหัว CORS (Cross-Origin Resource Sharing) ในการตอบกลับ API มีประโยชน์เมื่อ Web UI หรือเครื่องมือบุคคลที่สามต้องการเข้าถึง API จากต้นทางที่แตกต่างกัน

ปลายทาง API:

เมธอด ปลายทาง คำอธิบาย
GET /api/status สถานะรันไทม์ พอร์ต เวลาทำงาน
GET /api/traffic ตัวนับทราฟฟิกส่วนกลางและต่อนโยบาย
GET /api/connections การเชื่อมต่อที่ใช้งานปัจจุบัน
DELETE /api/connections/:id ปิดการเชื่อมต่อ
GET /api/connections/history ระเบียนการเชื่อมต่อในอดีต
GET /api/connections/processes สถิติการเชื่อมต่อแยกตามกระบวนการ
GET /api/connections/:id/request ข้อมูลคำขอที่บันทึกไว้ของการเชื่อมต่อ
GET /api/connections/:id/response ข้อมูลการตอบกลับที่บันทึกไว้ของการเชื่อมต่อ
GET /api/dns ระเบียนแคช DNS
DELETE /api/dns/cache ล้างแคช DNS
DELETE /api/dns/records/:domain ลบระเบียน DNS รายการเดียว
GET /api/config การกำหนดค่าปัจจุบัน
PUT /api/config โหลดการกำหนดค่าใหม่
POST /api/config/validate แจงการกำหนดค่าและรายงานข้อผิดพลาด โดยไม่โหลดมัน
GET /api/policies กลุ่มนโยบายและการเลือกปัจจุบัน
PUT /api/policies/:group เปลี่ยนการเลือกกลุ่มนโยบาย
PUT /api/mode ตั้งค่าโหมดขาออก
GET /api/features สถานะสวิตช์คุณสมบัติ
PUT /api/features/mitm สลับ MitM
PUT /api/features/record-traffic สลับการบันทึกทราฟฟิก
GET /api/rules กฎที่โหลดไว้ และกฎเขียนใหม่ที่ทำงานจริง
POST /api/rules/match คำขอจะถูกกำหนดเส้นทางไปที่ใด โดยไม่ต้องส่งจริง
GET /api/logs รายการบันทึกล่าสุด
GET /api/loglevel ระดับบันทึกปัจจุบัน และส่วนที่กำลังเขียน
PUT /api/loglevel เปลี่ยนระดับบันทึกหรือส่วนโดยไม่ต้องรีสตาร์ต
GET /api/health สุขภาพของเอนจิน: จำนวนการปฏิเสธ รุ่น หน่วยความจำ และการออกครั้งก่อน
GET /api/events เหตุการณ์สำคัญของรอบการทำงานนี้
GET /api/tailscale สถานะปัจจุบันของเอนจิน Tailscale
POST /api/diagnostics/ping ตรวจการเข้าถึงด้วย ICMP หรือ TCP
POST /api/diagnostics/dns-query แปลงชื่อโดเมนผ่านรีโซลเวอร์ที่กำลังทำงาน
POST /api/diagnostics/egress-probe ตรวจหา IP ขาออกปัจจุบัน
POST /api/diagnostics/url-test/:policy รันการทดสอบความหน่วงของนโยบาย
POST /api/diagnostics/bundle สร้างไฟล์เก็บถาวรวินิจฉัยที่ลบข้อมูลอ่อนไหวแล้ว
GET /api/connections/export ส่งออกการเชื่อมต่อเป็น HAR 1.2
GET /api/rewrites ทุกตระกูลการเขียนใหม่/Mock และรายการโฮสต์ MitM
GET /api/rewrites/:family กฎของตระกูลหนึ่ง
POST /api/rewrites/:family เพิ่มกฎ
DELETE /api/rewrites/:family/:id ลบกฎ
DELETE /api/rewrites/:family ล้างตระกูล
GET /api/mitm/hosts โฮสต์ที่กำลังถอดรหัสอยู่
POST /api/mitm/hosts เพิ่มโฮสต์
DELETE /api/mitm/hosts/:host ลบโฮสต์
DELETE /api/mitm/hosts ล้างรายการ

หมายเหตุปลายทาง:

  • GET /api/connections รับ limit (จำนวนเต็มบวก ค่าเริ่มต้นและสูงสุด 1000) และ cursor (ส่งคืนเฉพาะการเชื่อมต่อที่มี id มากกว่าเคอร์เซอร์) data ในการตอบกลับประกอบด้วย connections, total, page_size, has_more และ — เมื่อมีหน้าเพิ่มเติม — next_cursor
  • GET /api/connections/history รับ limit (ค่าเริ่มต้น 100 สูงสุด 1000) และ cursor/before (ชื่อพ้องกัน; การส่งทั้งสองพร้อมกันจะถูกปฏิเสธ)
  • GET /api/connections/:id/request และ .../response ส่งคืน {"connection_id": <id>, "data": "<base64>"} ข้อมูลที่บันทึกไว้ที่ใหญ่กว่า 2 MiB ส่งคืน 413
  • GET /api/config ส่งคืนการกำหนดค่าโดยค่าที่ละเอียดอ่อน (http-auth, external-http-secret, ca-p12, ca-passphrase, คีย์ WireGuard และค่าทำนองเดียวกัน) ถูกแทนที่ด้วย <redacted>อย่าป้อนผลลัพธ์กลับเข้า PUT /api/config โดยตรง มิฉะนั้นตัวยึดตำแหน่งเหล่านี้จะถูกเขียนลงในการกำหนดค่าตามตัวอักษร
  • PUT /api/config รับได้ทั้ง JSON {"configuration": "<full text>"} หรือข้อความการกำหนดค่าดิบเป็นเนื้อหาคำขอ (จำกัด 1 MB) เมื่อสำเร็จ เคอร์เนลจะโหลดใหม่ — หรือเริ่มทำงานหากยังไม่ได้รัน
  • PUT /api/policies/:group นำการเลือกจากคีย์แรกที่พบในเนื้อหาคำขอตามลำดับ policy, name, selected, select; ค่าอาจเป็นชื่อนโยบายหรือดัชนีตัวเลขในรูปสตริง ชื่อกลุ่มพิเศษ GLOBAL ตั้งค่านโยบายที่เลือกแบบสากล
  • PUT /api/mode ต้องการตัวเลข JSON: {"mode": 0}0 ตามกฎ, 1 ตรง, 2 พร็อกซี
  • PUT /api/features/mitm และ PUT /api/features/record-traffic รับ {"enabled": true}
  • GET /api/logs รับ since (วินาที Unix); บัฟเฟอร์ในหน่วยความจำเก็บรายการล่าสุด 1000 รายการ แต่ละรายการเป็น {timestamp, level, section, message}
  • GET /api/health รายงานว่าเอนจินกำลังถืออะไรอยู่ ปฏิเสธอะไรครั้งล่าสุดเพราะอะไร และรอบก่อนหน้าจบลงอย่างไร (clean, unclean หรือ suspected_memory — ดูการแก้ปัญหา)
  • GET /api/events ให้ริงในหน่วยความจำ ส่วน ?persisted=1 อ่านประวัติที่บันทึกไว้ของรอบนี้แทน และตอบ available: false เมื่อปิดการบันทึก
  • เมื่อไม่ได้กำหนดส่วน [Tailscale] GET /api/tailscale จะตอบ state: "idle" ซึ่งเป็นคำตอบปกติ ไม่ใช่ข้อผิดพลาด
  • การตรวจ POST /api/diagnostics/* รับอาร์กิวเมนต์จากคิวรีสตริงหรือ JSON body มีขีดจำกัดสิบวินาที และตอบเพียงครั้งเดียว url-test/:policy จะปฏิเสธชื่อนโยบายที่ไม่มีอยู่ แทนที่จะไปวัด REJECT
  • POST /api/rules/match ตอบว่าคำขอจะไปที่ใด โดยไม่เปิดการเชื่อมต่อ มันรับ host (หรือ url เพื่อดึงโฮสต์และพอร์ตมา), port (ค่าเริ่มต้น 443) และตัวเลือกเสริม ip, protocol, process, process_path, src_ip, src_port, in_port, in_type, in_user, in_name, network, ssid, bssid, from_tun, user_agent — ฟิลด์ที่ไม่รู้จักจะถูกปฏิเสธพร้อมรายการที่ยอมรับ ไม่ใช่ถูกเพิกเฉย คำตอบมีกฎ matched (บรรทัดกฎ ชนิด นโยบายที่มันระบุ และ resolved_policy ที่กลุ่มกำลังชี้อยู่), policy, need_resolve และ rule_count กับ match_generation ที่ใช้คำนวณ เนื่องจากโดเมนถูกจับคู่สองครั้ง — ครั้งหนึ่งด้วยชื่อ และอีกครั้งเมื่อรู้ที่อยู่แล้ว — passes จึงมีหนึ่งรายการต่อหนึ่งรอบ ถ้าไม่ส่ง ip มาจะมีเฉพาะรอบก่อนการแปลง และคำตอบจะบอกไว้ใน note เพิ่ม explain=true เพื่อดูกฎที่อาจตรงได้เช่นกันสูงสุด 50 ข้อ พร้อมจำนวนชุดกฎที่ไม่ได้กางออก
  • POST /api/config/validate แจงการกำหนดค่าแล้วทิ้ง: เคอร์เนลที่กำลังทำงานไม่รับอะไรไปเลย ส่งเป็น {"configuration": "<full text>"} หรือส่งข้อความดิบก็ได้ คำตอบคือ valid, error_count, advisory_count, rule_count, policy_count และรายการ errors ที่มี {line, severity, content, error}severity แยกบรรทัดที่ถูกปฏิเสธออกจากบรรทัดที่ยอมรับพร้อมข้อสังเกต และ content คือบรรทัดที่มีปัญหาในรูปแบบที่ปิดบังแล้ว เพราะบรรทัด [Proxy] ที่ผิดมักพารหัสผ่านที่ทำให้มันผิดมาด้วย ใช้มันก่อน PUT /api/config ซึ่งจะรีสตาร์ตรอบการทำงานที่คุณกำลังดีบักอยู่
  • GET /api/loglevel รายงาน level ปัจจุบัน, nslog_level, sections ที่กำลังเขียนลงไฟล์ และ available_levels / available_sections ที่คุณตั้งได้ ส่วน PUT (หรือ PATCH) รับ level, sections หรือทั้งคู่: sections เป็นอาร์เรย์ของชื่อส่วนหรือสตริง "all" และอาร์เรย์ว่างจะถูกปฏิเสธ — ถ้าจะหยุดบันทึกให้ใช้ level เป็น none การเปลี่ยนระดับด้วยวิธีนี้ไม่รีสตาร์ตรอบการทำงาน ซึ่งเป็นประเด็นสำคัญ: loglevel = verbose ในไฟล์ต้องโหลดใหม่ และการโหลดใหม่จะทำให้สิ่งที่คุณพยายามจะดูหายไป
  • GET /api/rules ยังรายงาน rewrite_hits ด้วย — ทุกกฎเขียนใหม่หรือ Mock ที่ทำงานในรอบนี้พร้อมจำนวนครั้ง กฎที่ไม่ปรากฏตรงนั้นคือกฎที่ไม่เคยตรงเลย ซึ่งเป็นคำอธิบายที่พบบ่อยที่สุดของการเขียนใหม่ที่ดูเหมือนไม่ทำอะไร ตารางนี้ติดตามกฎที่ต่างกันได้สูงสุด 512 กฎ และรายงานส่วนที่เกินใน rewrite_hit_dropped_rules
  • POST /api/rewrites/:family รับ {"rule": "<configuration line>"} — ข้อความเดียวกับที่คุณจะเขียนในไฟล์ บรรทัดที่แจงไม่ได้จะถูกปฏิเสธด้วย 400 แทนที่จะถูกเก็บเป็นกฎที่ไม่มีวันตรง :family เป็นหนึ่งใน url-rewrite, header-rewrite, body-rewrite, mock กฎที่เพิ่มด้วยวิธีนี้อยู่ในเคอร์เนลที่กำลังทำงานเท่านั้น และจะไม่ถูกเขียนกลับลงไฟล์กำหนดค่า
  • GET /api/connections/export?format=har คืน เอกสาร HAR 1.2 และ POST /api/diagnostics/bundle คืนไฟล์ zip — ทั้งคู่เป็นไฟล์ จึงไม่ถูกห่อด้วย {"ok": ..., "data": ...} ต่างจากทุกเอนด์พอยต์อื่น export รับ source (current เป็นค่าเริ่มต้น หรือ history), limit (ค่าเริ่มต้น 100 สูงสุด 300), ids และ bodies=1 เพื่อรวมเพย์โหลดที่จับไว้ แต่ละรายการมีอ็อบเจกต์ _kl บรรจุสิ่งที่ HAR ไม่มีฟิลด์รองรับ ได้แก่ นโยบายที่เลือก กฎที่ตรง และการเขียนใหม่ที่ทำงาน

ตัวอย่าง — อ่านสถานะ จากนั้นสลับกลุ่มนโยบาย:

curl -H "Authorization: Bearer your-secret-token" http://127.0.0.1:9090/api/status
{"ok":true,"data":{"running":true,"outbound_mode":0,"mitm":false, ...}}

curl -X PUT -H "Authorization: Bearer your-secret-token" \
     -d '{"policy": "ProxyB"}' http://127.0.0.1:9090/api/policies/MainGroup
{"ok":true,"data":{"outbound_mode":0,"selectable_groups":[...], ...}}

ตัวอย่าง — ถามว่าคำขอจะไปที่ใดก่อนจะส่งจริง:

curl -X POST -H "Authorization: Bearer your-secret-token" \
     -d '{"url": "https://api.example.com/v1/orders", "explain": true}' \
     http://127.0.0.1:9090/api/rules/match
{"ok":true,"data":{"policy":"MainGroup","matched":{"rule":"DOMAIN-SUFFIX,example.com,MainGroup", ...}, ...}}

จำกัดบันทึกให้เหลือระบบย่อยเดียวขณะทำซ้ำปัญหา โดยไม่ต้องรีสตาร์ตรอบการทำงาน:

curl -X PUT -H "Authorization: Bearer your-secret-token" \
     -d '{"level": "verbose", "sections": ["MitM", "DNS"]}' \
     http://127.0.0.1:9090/api/loglevel

หมายเหตุ: คุณสมบัตินี้ถูกปิดใช้งานโดยค่าเริ่มต้น ทุกการตอบกลับใช้รูปแบบครอบ (envelope) {"ok": true, "data": {...}} เมื่อสำเร็จและ {"ok": false, "error": {"code": "...", "message": "..."}} เมื่อเกิดข้อผิดพลาด; เนื้อหาคำขอถูกจำกัดที่ 1 MB

ปลายทาง PUT ยังรับ PATCH ด้วย มีพาธชื่อพ้องที่เข้ากันได้กับ Clash สำหรับแดชบอร์ดจากบุคคลที่สาม: /version, /traffic, /connections, /configs, /proxies, /rules — พาธเหล่านี้เข้าถึงได้ แต่การตอบกลับใช้รูปแบบครอบและชื่อฟิลด์ของ Chute แทน schema ของ Clash (/version ส่งคืนเพียง {"name", "run_id"}) ดังนั้นแดชบอร์ด Clash จะไม่สามารถใช้ได้ทันที


ลายนิ้วมือไคลเอนต์

global-client-fingerprint = chrome

กำหนดลายนิ้วมือไคลเอนต์ TLS ให้ทุกนโยบายที่ไม่ได้ระบุ fingerprint ของตนเอง ค่าของนโยบาย จะมาก่อนเสมอ ดังนั้นค่านี้เป็นค่าเริ่มต้นไม่ใช่การเขียนทับ

ค่าที่รองรับคือ chrome, firefox, safari และ ios รวมถึง edge, 360, qq, android และ random ซึ่งทั้งหมดถูกจัดการเป็น Chrome ค่าที่ไม่รู้จักจะถูก ละเว้นและใช้ TLS ของแพลตฟอร์มแทน

ค่าเริ่มต้น: ว่าง หมายถึงใช้ TLS ของแพลตฟอร์ม เฉพาะนโยบาย Trojan, VMess, VLESS และ ShadowTLS เท่านั้นที่อ่านค่านี้

S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-05 00:58:16

หน้านี้เป็นฉบับแปลจากเวอร์ชันภาษาอังกฤษ หากเนื้อหาไม่ตรงกัน ให้ยึดเวอร์ชันภาษาอังกฤษเป็นหลัก

results matching ""

    No results matching ""