คอนโซลเว็บ

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

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

การเปิดใช้และการเข้า

คอนโซลต้องมี external-http-controller ในส่วน [General] โดยค่าเริ่มต้นจะปิดอยู่:

[General]
external-http-controller = 127.0.0.1:9090
external-http-ui = true

คำขอที่คอนโซลเก็บค้างไว้ระหว่างให้บริการถูกจำกัดที่ 4 MB บน macOS และ 1 MB บน iOS, tvOS และ Android

การเข้าถึงต้องยืนยันตัวตน หากคุณไม่ตั้ง external-http-secret Chute จะสร้างโทเคนและเก็บไว้ในไฟล์ control-token ทำให้โทเคนเดิมถูกใช้ต่อหลังรีสตาร์ต วิธีเข้าที่ใช้ได้จริงจึงเป็นการให้แอปส่งที่อยู่ที่พ่วงโทเคนมาแล้วให้คุณ หน้าเว็บจะดึงโทเคนจากที่อยู่นั้นตอนโหลดและเก็บไว้ใน localStorage ของเบราว์เซอร์ เบราว์เซอร์หนึ่งจึงลงชื่อเข้าใช้ครั้งเดียวพอ ทุกแพลตฟอร์มมีทางเข้าสำหรับเรื่องนี้ ดูการเปิดคอนโซลเว็บ

Overview (ภาพรวม)

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

Traffic (ทราฟฟิก)

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

Connections (การเชื่อมต่อ)

หน้าที่คุณจะใช้เวลามากที่สุด มีสองแท็บ:

  • Current (ปัจจุบัน) — การเชื่อมต่อที่เปิดอยู่ตอนนี้
  • History (ประวัติ) — การเชื่อมต่อที่ปิดแล้ว ใหม่สุดก่อน อ่านกลับจากบันทึกของรอบนี้

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

ฟิลด์ บอกอะไรคุณ
กฎที่ตรงกัน / ที่มาของกฎ บรรทัดกฎที่ตัดสินการเชื่อมต่อนี้ และมาจากส่วนใด
นโยบายที่เลือก / อะแดปเตอร์ นโยบายที่กฎเลือก และทางออกที่แบกมันจริง
เชนพร็อกซี สำหรับการเชื่อมต่อที่ผ่านการต่อพ่วง คือเส้นทางจากอุปกรณ์นี้ถึงทางออก เช่น Airport/HK-01 → Landing: แต่ละฮอปตามลำดับ โดยกลุ่มจะตามด้วยตัวที่เลือกอยู่หลังเครื่องหมายทับ แสดง - เมื่อการเชื่อมต่อใช้นโยบายเดียว
ที่มาของ DNS รีโซลเวอร์ใดตอบ และคำตอบมาจากแคชหรือไม่
การเขียนใหม่ที่ใช้ กฎเขียนใหม่หรือกฎการตอบกลับจำลองที่เปลี่ยนข้อความนี้ — ด้วยข้อความของกฎเอง เก็บไว้สูงสุด 16 รายการต่อการเชื่อมต่อ เกินจากนั้นแถวจะบอกว่าอีกกี่รายการไม่ได้แสดง
เหตุผลการปิด / หมายเหตุ ทำไมจึงจบ และเอนจินอยากบอกอะไรเกี่ยวกับมัน

ใต้ตาราง แถวที่กางออกจะแสดงคำขอและการตอบกลับที่จับไว้ — ส่วนหัวและเนื้อหา ตามที่วิ่งผ่านสายจริง (ถอดรหัสแล้วสำหรับโฮสต์ที่อยู่ในขอบเขตการถอดรหัส HTTPS)

เนื้อหาต้องอาศัยการบันทึกทราฟฟิก

เนื้อหาจะมีก็ต่อเมื่อ Chute จับไว้ เปิดการบันทึกก่อนที่จะทำให้ปัญหาเกิดซ้ำ:

  • replica = true ใน [General] หรือ
  • Chute Mac: แถบเมนู → การดักจับทราฟฟิก หรือ
  • ผ่าน API: PUT /api/features/record-traffic ด้วย {"enabled": true}

ถ้าไม่เปิด การเชื่อมต่อก็ยังปรากฏพร้อมการระบุที่มาของเส้นทางและเวลาครบถ้วน — ที่ขาดคือเพย์โหลดเท่านั้น บน iOS, tvOS และ Android การบันทึกยังต้องมีใบอนุญาตที่ใช้งานอยู่ด้วย: หากไม่มี จะไม่มีอะไรถูกจับเลย ไม่ว่าจะเปิดสวิตช์ตัวใดก็ตาม ส่วน [Replica] ยังจำกัดสิ่งที่จับได้อีกชั้น — ตัวกรองทุกตัวในนั้น รวมถึง hide-crashlytics-request มีผลจริง — คำขอที่ถูกกรองออกตรงนั้นจึงไม่มีเนื้อหาเช่นกัน

ส่งออกเป็น HAR

ปุ่ม Export HAR (ส่งออก HAR) บนหน้า Connections จะดาวน์โหลดแท็บปัจจุบันเป็นไฟล์ HAR 1.2 — จำกัดที่ 100 รายการซึ่งเป็นค่าเริ่มต้นของจุดปลายทาง (limit บนจุดปลายทางเพิ่มได้สูงสุด 300) ขณะที่แท็บ History เองแสดงได้ถึง 200 รายการ HAR เป็นรูปแบบมาตรฐาน เปิดได้ในเครื่องมือนักพัฒนาของเบราว์เซอร์ (แผง Network → นำเข้า) หรือในเครื่องมืออย่าง Charles และ Proxyman

ไฟล์ที่ส่งออกมีสิ่งที่เครื่องมือเหล่านั้นคาดหวัง — ส่วนหัวของคำขอและการตอบกลับ ไทม์มิ่ง และเนื้อหาเมื่อเปิดการบันทึกไว้ — บวกกับอ็อบเจกต์ _kl ต่อรายการ ซึ่งบรรจุสิ่งที่ HAR ไม่มีฟิลด์รองรับ ได้แก่ นโยบายที่เลือก กฎที่ตรง และการเขียนใหม่ที่ทำงาน ส่วนเวลาส่งและรับมาจากไทม์สแตมป์ของการจับเอง ไม่ใช่การอนุมาน จึงมีความหมายจริง แอปเองก็มีทางออกของตัวเอง: Dashboard ของ Chute iOS มี ส่งออกเป็น HAR และ ส่งออกทั้งหมดเป็น HAR (เอนจินสร้างให้ในรูปแบบเดียวกัน) และหน้าต่างรายละเอียดการเชื่อมต่อของ Chute Mac มีปุ่ม คำขอและประวัติ ที่เปิดคอนโซล — เปิดหน้าแรกของคอนโซล ไม่ใช่การเชื่อมต่อนั้นโดยเฉพาะ หนึ่งรายการคือหนึ่งการเชื่อมต่อ: บนการเชื่อมต่อ keep-alive ที่ส่งหลายคำขอ การส่งออกจะบรรยายข้อความแรกและระบุว่าละไว้กี่ไบต์ของข้อความถัดไป

DNS

แคชของรีโซลเวอร์พร้อมเซิร์ฟเวอร์ที่ตอบในแต่ละระเบียน ระเบียนที่มาจาก [Host] และไฟล์ hosts ของระบบ ปุ่ม Clear Cache (ล้างแคช) ล้างระเบียนไดนามิก ตรงนี้ไม่มีการลบทีละระเบียน — สิ่งนั้นมีเฉพาะใน API ผ่าน DELETE /api/dns/records/:domain

Policies (นโยบาย)

โหมดขาออก (Rule / Global / Direct — กฎ / สากล / ตรง) และทุกกลุ่มนโยบายพร้อมตัวเลือกปัจจุบัน ยกเว้นกลุ่มที่ตั้ง hidden=true ไว้ การเปลี่ยนตรงนี้มีผลกับเอนจินที่กำลังทำงานทันที — เป็นการกระทำเดียวกับการสลับกลุ่มในแอป

Rules (กฎ)

หน้านี้มีของสองอย่างอยู่ร่วมกัน และทั้งสองทำงานไม่เหมือนกัน

กฎการกำหนดเส้นทาง — ทุกกฎที่ตัวจับคู่ไล่ตรวจ เรียงตามลำดับการประเมิน: กฎอัตโนมัติของ Tailscale ตามด้วยกฎจากโมดูล แล้วจึงเป็นส่วน [Rule] ของไฟล์การกำหนดค่า และปิดท้ายด้วย FINAL อ่านอย่างเดียว เพราะมาจากไฟล์การกำหนดค่าและโมดูล

กฎเขียนใหม่และการตอบกลับจำลอง — URL Rewrite, Header Rewrite, Body Rewrite และการตอบกลับจำลอง รวมถึงรายการโฮสต์ MitM ทั้งหมดนี้เพิ่มและลบได้จากที่นี่:

  • วางกฎให้เหมือนกับที่คุณจะเขียนในไฟล์การกำหนดค่าทุกประการ แล้วกด Add (เพิ่ม) บรรทัดที่แยกวิเคราะห์ไม่ได้จะถูกปฏิเสธพร้อมข้อความจากตัวแยกวิเคราะห์ แทนที่จะถูกเก็บไว้ — กฎที่ไม่มีวันตรงนั้นไม่มีอาการใด ๆ รู้ตอนนี้ย่อมดีกว่า
  • Remove (ลบ) ลบกฎหนึ่งข้อ ส่วน Clear (ล้าง) ล้างทั้งตระกูล
  • การเปลี่ยนแปลงอยู่ในเอนจินที่กำลังทำงานเท่านั้น จะไม่ถูกเขียนกลับลงไฟล์การกำหนดค่า และการโหลดซ้ำหรือเริ่มใหม่จะได้ตามที่ไฟล์เขียนไว้ ใช้ที่นี่ทดลองกฎ แล้วค่อยเขียนบรรทัดที่ได้ผลลงไฟล์

การตรงกันของกฎเขียนใหม่และการตอบกลับจำลอง — ทุกกฎเขียนใหม่หรือกฎการตอบกลับจำลองที่ทำงานในรอบนี้ พร้อมจำนวนครั้งและเวลาที่ตรงล่าสุด ตารางนี้ติดตามกฎที่ต่างกันได้สูงสุด 512 กฎ และจะบอกว่ามีอีกกี่กฎที่ทำงานเกินจากนั้นโดยไม่ได้ติดตาม ตารางนี้คือคำตอบของ «การเขียนใหม่ของฉันไม่ทำอะไรเลย»: กฎที่ไม่เคยปรากฏตรงนี้คือกฎที่ไม่เคยตรงเลย ซึ่งเป็นคนละปัญหากับกฎที่ตรงแล้วแต่ไม่เห็นผล วิธีแยกแยะดูที่ ทำไมการเขียนใหม่ของฉันไม่ทำอะไรเลย?

ชุดกฎ — ผู้ให้บริการกฎและชุดกฎทุกตัวที่การกำหนดค่าอ้างถึง พร้อมสถานะของแต่ละรายการ: จำนวนกฎที่เพิ่มเข้ามาเมื่อโหลดแล้ว หรือเหตุผลที่โหลดไม่สำเร็จ เพย์โหลดที่เกินเพดานของแพลตฟอร์ม URL ที่ไม่ตอบสนอง และเนื้อหาที่แยกวิเคราะห์ไม่ได้ จะมาอยู่ที่นี่แทนที่จะเงียบ ๆ ไม่ตรงกับอะไรเลย รายการเดียวกันนี้ให้บริการผ่าน GET /api/rules/providers ด้วย

Diagnostics (การวินิจฉัย)

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

  • Footprint / CPU / Uptime / Live flows / Superseded flows / Engine generation (หน่วยความจำที่ใช้ / CPU / เวลาทำงาน / โฟลว์ที่ใช้งานอยู่ / โฟลว์จากรุ่นก่อน / รุ่นของเอนจิน) — รูปร่างปัจจุบันของรอบนี้ หน่วยความจำที่ไต่ขึ้นขณะจำนวนโฟลว์คงที่คุ้มที่จะตามดู และบน iOS กับ tvOS นี่ก็คือค่าที่ระบบจับตาก่อนจะเรียกคืนส่วนขยาย
  • Previous exit (การออกครั้งก่อน) — Clean (ปกติ), Terminated unexpectedly (หยุดทำงานโดยไม่คาดคิด) หรือ Killed for memory (ถูกปิดเพราะหน่วยความจำ) พร้อม id ระยะเวลาทำงาน และหน่วยความจำสูงสุดของรอบก่อน อ่านบรรทัดนี้ก่อนเมื่อ Chute «แครช»: Killed for memory (ถูกปิดเพราะหน่วยความจำ) หมายถึงระบบเรียกคืน Chute ไม่ใช่ Chute ทำงานผิดพลาด และนั่นเปลี่ยนสิ่งที่ต้องตามหา
  • Refusals (การปฏิเสธ) — ตารางว่าเอนจินปฏิเสธอะไรและเพราะอะไร นับตามทรัพยากรและเหตุผล เมื่อการเชื่อมต่อถูกตัดทิ้งและไม่มีอะไรอื่นอธิบายได้ เหตุผลมักอยู่ตรงนี้
  • Run a probe (รันการตรวจสอบ) — การเข้าถึงได้ (ICMP หรือ TCP เมื่อระบุพอร์ต) การสอบถาม DNS ผ่านรีโซลเวอร์ที่กำลังทำงาน การทดสอบอินเทอร์เน็ตโดยตรงโดยไม่ผ่านพร็อกซี การตรวจที่อยู่ (บนเอนจินของ Apple เรียกว่า ที่อยู่เครือข่าย ซึ่งรายงานที่อยู่ของอุปกรณ์เอง ส่วนบนเอนจินของ Android เรียกว่า IP ขาออก ซึ่งรายงานที่อยู่สาธารณะที่ทราฟฟิกออกไป) และการทดสอบความหน่วงของนโยบาย แต่ละอย่างมีขีดจำกัดและตอบเพียงครั้งเดียว ชื่อนโยบายที่ไม่มีอยู่จะถูกปฏิเสธแทนที่จะถูกวัด พิมพ์ผิดจึงกลับมาเป็นพิมพ์ผิด
  • Events (เหตุการณ์) — ช่วงเวลาสำคัญของรอบนี้ เช่น ความล้มเหลวเป็นกลุ่ม การเปลี่ยนที่อยู่ และอื่น ๆ
  • Tailscale — สถานะปัจจุบันของเอนจินเมื่อมีการกำหนดส่วน [Tailscale] และแสดงยังไม่ได้กำหนดส่วน [Tailscale] เมื่อไม่มี ซึ่งเป็นคำตอบปกติ
  • Download diagnostic bundle (ดาวน์โหลดชุดข้อมูลวินิจฉัย) — ไฟล์เก็บถาวรที่ลบข้อมูลอ่อนไหวแล้วหนึ่งไฟล์ สำหรับแนบไปกับข้อความถึงฝ่ายสนับสนุน เนื้อหาข้างในดูที่การส่งชุดข้อมูลวินิจฉัย

Config (การกำหนดค่า)

การกำหนดค่าที่กำลังทำงาน แสดงในกล่องที่แก้ไขได้ พร้อมปุ่ม Reload (โหลดใหม่) เพื่อนำสิ่งที่อยู่ในกล่องไปใช้

การกำหนดค่าที่แสดงตรงนี้ถูกลบความลับออกแล้ว รหัสผ่าน ซีเคร็ตของส่วนควบคุม วลีรหัสผ่านของ CA คีย์ WireGuard และอื่น ๆ จะปรากฏเป็น <redacted> แต่ Reload (โหลดใหม่) จะนำสิ่งที่อยู่ในกล่องไปใช้ตามตัวอักษร การโหลดซ้ำข้อความตามที่เห็นจึงเท่ากับเขียนคำว่า <redacted> ทับความลับเหล่านั้นลงในเอนจินที่กำลังทำงาน และนโยบายที่ต้องใช้มันจะเริ่มล้มเหลว ส่วนไฟล์กำหนดค่าไม่ถูกแตะต้อง เลือกการกำหนดค่านั้นใหม่ก็กลับมาเหมือนเดิม

ใช้หน้านี้เพื่ออ่านการกำหนดค่า และเพื่อนำการแก้ไขที่คุณพิมพ์เองครบถ้วนไปใช้ หากต้องการแก้ไฟล์จริง ให้ใช้ตัวแก้ไขในแอป

Logs (บันทึก)

การตามบันทึกของเอนจินแบบสด ใส่สีตามระดับ พร้อมปุ่ม Pause (หยุดชั่วคราว) ระหว่างที่คุณอ่าน ระดับความละเอียดกำหนดโดย loglevel ไม่ใช่หน้านี้ — ถ้าบรรทัดที่คุณต้องการไม่อยู่ตรงนี้ ให้เพิ่มระดับแล้วทำซ้ำ หากต้องการเปลี่ยนโดยไม่ต้องเริ่มการทำงานใหม่ ให้ใช้ PUT /api/loglevel ของ HTTP control API

คอนโซลส่งมอบอะไรได้บ้าง

ให้ถือว่าการเข้าถึงคอนโซลคือการเข้าถึงทุกอย่างที่รอบการทำงานนี้เห็น คอนโซลสามารถให้บันทึกการเชื่อมต่อที่มี URL ส่วนหัว และชื่อกระบวนการ เนื้อหาคำขอและการตอบกลับที่จับไว้ การกำหนดค่า และบันทึก นี่คือเหตุผลที่ส่วนควบคุมแบบไม่ยืนยันตัวตนไม่ใช่ค่าเริ่มต้น และเหตุผลที่การผูกไว้นอกลูปแบ็กต้องมีซีเคร็ตที่คุณตั้งเอง — ดู external-http-secret

S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-30 15:11:19

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

results matching ""

    No results matching ""