กฎ
Chute สามารถส่งต่อคำขอไปยังเซิร์ฟเวอร์พร็อกซีอื่นหรือเชื่อมต่อกับโฮสต์โดยตรง ขึ้นอยู่กับกฎที่กำหนดเอง
ลำดับความสำคัญ
กฎจะถูกจับคู่จากกฎแรกไปยังกฎสุดท้าย ตามลำดับที่ปรากฏในไฟล์การกำหนดค่า กล่าวอีกนัยหนึ่งคือ กฎที่อยู่ด้านบนของรายการมีลำดับความสำคัญสูงกว่ากฎที่อยู่ถัดลงมา กฎที่เพิ่มโดยโมดูลจะถูกวางไว้ก่อนกฎของไฟล์การกำหนดค่าเอง ตามลำดับการโหลดโมดูล และกฎที่ Chute แทรกขณะทำงานสำหรับ Tailscale จะมาก่อนทั้งสองส่วน
องค์ประกอบ
แต่ละกฎประกอบด้วย 3 ส่วน: ประเภทกฎ, ตัวจับคู่ทราฟฟิก (ยกเว้นกฎ FINAL) และนโยบาย: TYPE, VALUE, POLICY ตัวอย่าง: DOMAIN-SUFFIX,apple.com,DIRECT IP-CIDR,192.168.0.0/16,ProxyA
นโยบายต้องเป็นชื่อของเซิร์ฟเวอร์พร็อกซี, กลุ่มนโยบาย หรือนโยบายในตัว อย่าง DIRECT, REJECT (หรือรูปแบบย่อยของมัน) หรือ PROXY กฎควรลงท้ายด้วยกฎ FINAL เพื่อกำหนดพฤติกรรมเริ่มต้น หากการกำหนดค่าไม่มีกฎ FINAL Chute จะทำงานเสมือนมีการเพิ่ม FINAL,DIRECT ต่อท้าย
ตัวอย่าง:
[Rule]
DOMAIN-SUFFIX,company.com,ProxyA
DOMAIN-KEYWORD,google,DIRECT
GEOIP,US,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT
FINAL,ProxyB
ประเภทกฎ
กฎตามโดเมน
| ประเภท | ไวยากรณ์ | การจับคู่ |
|---|---|---|
| DOMAIN | DOMAIN,www.apple.com,Proxy |
จับคู่โดเมนแบบตรงทั้งหมด |
| DOMAIN-SUFFIX | DOMAIN-SUFFIX,apple.com,Proxy |
จับคู่ส่วนต่อท้ายโดเมน |
| DOMAIN-KEYWORD | DOMAIN-KEYWORD,google,Proxy |
โดเมนมีคำสำคัญ |
| DOMAIN-WILDCARD | DOMAIN-WILDCARD,*.apple.com,Proxy |
จับคู่โดเมนแบบ wildcard |
| DOMAIN-REGEX | DOMAIN-REGEX,^mail\..+\.com$,Proxy |
จับคู่โดเมนด้วย regex |
| DOMAIN-SET | DOMAIN-SET,https://example.com/domains.txt,DIRECT |
ชุดโดเมนที่ดาวน์โหลดจาก URL |
กฎตาม IP
| ประเภท | ไวยากรณ์ | การจับคู่ |
|---|---|---|
| IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT |
ที่อยู่ IP อยู่ในช่วง CIDR |
| IP-CIDR6 | IP-CIDR6,2001:db8::/32,DIRECT |
ที่อยู่ IPv6 อยู่ในช่วง CIDR |
| GEOIP | GEOIP,US,DIRECT |
รหัสประเทศจากฐานข้อมูล GeoIP |
| IP-ASN | IP-ASN,13335,DIRECT |
ที่อยู่ IP เป็นของ ASN |
กฎระดับ HTTP
| ประเภท | ไวยากรณ์ | การจับคู่ |
|---|---|---|
| USER-AGENT | USER-AGENT,Instagram*,DIRECT |
ส่วนหัว User-Agent |
| URL-REGEX | URL-REGEX,^http://google\.com.*,DIRECT |
URL แบบเต็มของคำขอ HTTP ธรรมดาตรงกับ regex |
| PROTOCOL | PROTOCOL,TLS,Proxy |
โปรโตคอลที่ตรวจพบ (HTTP/TLS/QUIC/ฯลฯ) |
กฎกระบวนการ (macOS และ Android)
| ประเภท | ไวยากรณ์ | การจับคู่ |
|---|---|---|
| PROCESS-NAME | PROCESS-NAME,Telegram,Proxy |
ชื่อกระบวนการ (จับคู่แบบ wildcard) |
| PROCESS-PATH | PROCESS-PATH,/Applications/Safari.app,Proxy |
เส้นทางแบบเต็มของกระบวนการ (จับคู่แบบ wildcard) |
| PROCESS-NAME-REGEX | PROCESS-NAME-REGEX,^Safari$,DIRECT |
ชื่อกระบวนการ (จับคู่ด้วย regex) |
กฎพอร์ตและต้นทาง
| ประเภท | ไวยากรณ์ | การจับคู่ |
|---|---|---|
| DEST-PORT | DEST-PORT,80,DIRECT |
พอร์ตปลายทาง |
| SRC-IP | SRC-IP,192.168.20.100,DIRECT |
ที่อยู่ IP ต้นทาง (IP เดี่ยวหรือ CIDR) |
| SRC-PORT | SRC-PORT,52345,DIRECT |
พอร์ตต้นทาง |
| IN-PORT | IN-PORT,6152,DIRECT |
พอร์ตพร็อกซีขาเข้าบน Chute |
กฎการจับคู่ขั้นสูง
| ประเภท | ไวยากรณ์ | การจับคู่ |
|---|---|---|
| SUBNET | SUBNET,TYPE:WIFI,Proxy |
คุณลักษณะเครือข่ายย่อย (TYPE, BSSID, SSID, ROUTER) |
| HOSTNAME-TYPE | HOSTNAME-TYPE,AAAA,Proxy |
ประเภทระเบียน DNS (A/AAAA/ฯลฯ) |
| IN-TYPE | IN-TYPE,SOCKS5,Proxy |
ประเภทการเชื่อมต่อขาเข้า (HTTP/SOCKS5/TUN) |
| IN-USER | IN-USER,user1,Proxy |
ชื่อผู้ใช้การยืนยันตัวตนขาเข้า |
| IN-NAME | IN-NAME,my-proxy,Proxy |
ชื่อเซิร์ฟเวอร์พร็อกซีขาเข้า |
หมายเหตุ: SUBNET และ HOSTNAME-TYPE จับคู่กับทราฟฟิกจริง — SUBNET จับคู่กับเครือข่ายที่อุปกรณ์เชื่อมต่ออยู่ในขณะนั้น (Apple TV ไม่มีข้อมูลระบุเครือข่าย จึงไม่มีวันจับคู่ SUBNET ได้) IN-TYPE และ IN-USER ก็จับคู่กับทราฟฟิกจริงเช่นกัน: IN-TYPE ระบุขาเข้าที่การเชื่อมต่อเข้ามา (
HTTP,SOCKS5หรือTUN) ส่วน IN-USER ระบุชื่อผู้ใช้ที่ขาเข้านั้นตรวจสอบแล้วกับhttp-auth— หากไม่ได้ตั้งข้อมูลรับรองไว้ก็ไม่มีอะไรให้ตรวจสอบ IN-USER จึงไม่จับคู่กับสิ่งใด ส่วน IN-NAME รับไว้เพื่อให้โปรไฟล์ Surge โหลดได้ แต่ Chute รันตัวรับฟัง HTTP หนึ่งตัวและตัวรับฟัง SOCKS5 หนึ่งตัวซึ่งไม่มีชื่อ จึงไม่มีชื่อขาเข้าให้จับคู่และกฎนี้ไม่มีวันทำงาน ให้ใช้ IN-TYPE หรือ IN-PORT แทน
กฎผสมทางตรรกะ
| ประเภท | ไวยากรณ์ | การจับคู่ |
|---|---|---|
| AND | AND,((DOMAIN,example.com),(DEST-PORT,443)),Proxy |
กฎย่อยทั้งหมดตรงกัน |
| OR | OR,((DOMAIN,example.com),(DOMAIN,test.com)),Proxy |
กฎย่อยใด ๆ ตรงกัน |
| NOT | NOT,((DOMAIN,example.com)),Proxy |
กฎย่อยไม่ตรงกัน |
กฎพิเศษ
| ประเภท | ไวยากรณ์ | การจับคู่ |
|---|---|---|
| RULE-SET | RULE-SET,SYSTEM,DIRECT |
ชุดกฎจาก URL, ผู้ให้บริการกฎ (rule provider) หรือชุดในตัว |
| SCRIPT | SCRIPT,MyRuleScript,PROXY |
การจับคู่กฎที่กำหนดเองด้วย JavaScript |
| FINAL | FINAL,ProxyB |
ค่าเริ่มต้นเมื่อไม่มีกฎอื่นตรงกัน (ต้องเป็นกฎสุดท้าย) |
ตัวเลือก
no-resolve
สำหรับคำขอที่ชื่อโฮสต์เป็นโดเมน Chute จะประเมินรายการกฎเป็นสองรอบ ในรอบแรก กฎตาม IP (GEOIP, IP-CIDR, IP-ASN) จะถูกข้าม หากไม่มีกฎอื่นตรงกัน Chute จะแปลงชื่อโดเมนด้วย DNS แล้วประเมินกฎอีกครั้งด้วยที่อยู่ IP ที่ได้ เพิ่มตัวเลือก no-resolve เพื่อให้กฎตาม IP ยังคงถูกข้ามในรอบที่สองด้วย ดังนั้นกฎจะจับคู่เฉพาะคำขอที่มีที่อยู่ IP อยู่แล้วเท่านั้น
GEOIP,US,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
บนบรรทัด RULE-SET ตัวเลือก no-resolve จะครอบคลุมกฎตาม IP ทุกข้อในชุดนั้น เหมือนกับว่าแต่ละข้อมีตัวเลือกนี้เอง: RULE-SET,https://example.com/cn-ip.list,DIRECT,no-resolve ส่วนชุดในตัว SYSTEM และ LAN จะถูกแตกออกเป็นกฎแยกกันและไม่รับตัวเลือกนี้
หมายเหตุ: เนื่องจากการประเมินแบบสองรอบ สำหรับคำขอที่ชื่อโฮสต์เป็นโดเมน กฎที่ไม่ใช่ IP ที่อยู่ถัดลงมาอาจจับคู่ได้ก่อนกฎตาม IP ที่อยู่ก่อนหน้า หากการแปลงชื่อ DNS ล้มเหลว กฎตาม IP จะไม่จับคู่เลยและกฎ FINAL จะถูกนำมาใช้ การประเมินกฎจะไม่ถูกยกเลิก
force-remote-dns
บังคับให้แปลงชื่อ DNS ผ่านเซิร์ฟเวอร์พร็อกซีระยะไกลแทน DNS ในเครื่อง
DOMAIN-SUFFIX,google.com,Proxy,force-remote-dns
หมายเหตุ: ตัวเลือกนี้ปัจจุบันถูกแยกวิเคราะห์เพื่อความเข้ากันได้เท่านั้นและไม่มีผลในรุ่นปัจจุบัน
extended-matching
ขยายการจับคู่กฎตามโดเมนเพื่อตรวจสอบส่วนหัว HTTP Host เพิ่มเติมจากชื่อโฮสต์การเชื่อมต่อ ส่วนหัวนี้มาจากคำขอแรกของการเชื่อมต่อของไคลเอนต์ที่เข้ามายังตัวรับฟังพร็อกซี HTTP — สำหรับ HTTPS คือส่วนหัว Host ของคำขอ CONNECT เอง — ดังนั้นตัวเลือกนี้จะช่วยได้เมื่อไคลเอนต์ส่งคำขอไปยังที่อยู่ IP หรือไปยังชื่ออื่นที่ไม่ใช่ชื่อในส่วนหัว Host ของคำขอนั้น การเชื่อมต่อที่ผ่าน TUN หรือ SOCKS5 ไม่มีส่วนหัว Host และตัวเลือกนี้จะไม่เปลี่ยนแปลงอะไรสำหรับการเชื่อมต่อเหล่านั้น
DOMAIN-SUFFIX,example.com,Proxy,extended-matching
requires-resolve
สำหรับกฎ SCRIPT ตัวเลือกนี้ได้รับการยอมรับโดยตัวแยกวิเคราะห์ แต่ไม่ได้ทำให้การประเมินสคริปต์ล่าช้า $request.dnsResult จะพร้อมใช้งานในสคริปต์เฉพาะเมื่อเซสชันแปลงชื่อ DNS แล้วเท่านั้น (เช่น คำขอที่ส่งไปยังที่อยู่ IP โดยตรง หรือรอบการจับคู่ที่สองหลังการแปลงชื่อ DNS)
SCRIPT,MyRuleScript,PROXY,requires-resolve
pre-matching
ใช้ได้เฉพาะกับกฎที่มีนโยบายเป็น REJECT หรือรูปแบบย่อยของมัน (REJECT-DROP, REJECT-TINYGIF ฯลฯ) เท่านั้น กฎ pre-matching จะถูกประเมินในรอบแยกต่างหากก่อนแคชผลลัพธ์ของกฎและก่อนตารางกฎปกติ ดังนั้น REJECT ที่ตรงกันจะมีผลตั้งแต่รอบแรก ก่อนการแปลงชื่อ DNS ใด ๆ ที่ตารางกฎจะกระตุ้นให้เกิดขึ้น บรรทัด RULE-SET หรือ DOMAIN-SET จะรับ pre-matching และเก็บไว้ แต่ชุดนั้นจะไม่ถูกจับคู่ในรอบแรกดังกล่าว: ชุดยังคงถูกประเมินที่ตำแหน่งของตัวเองในรายการกฎ
DOMAIN-SUFFIX,tracker.example.com,REJECT,pre-matching
dns-failed
ใช้ได้เฉพาะกับกฎ FINAL เมื่อการตัดสินคำขอต้องใช้การค้นหา DNS ภายในเครื่องและการค้นหานั้นล้มเหลว คำขอจะถูกส่งต่อให้นโยบายของ FINAL แทนที่จะล้มเหลว — ดูกฎสุดท้าย
FINAL,Proxy,dns-failed
notification-text
ส่งการแจ้งเตือนของระบบเมื่อกฎตรงกัน หัวเรื่องคือข้อความนี้ ส่วนเนื้อหาระบุปลายทางและนโยบาย (host:port → policy ส่วนบน Android คือ host:port · policy · process) notification-interval กำหนดจำนวนวินาทีที่ต้องผ่านไปก่อนที่กฎเดิมจะแจ้งเตือนอีกครั้ง (ค่าเริ่มต้น 300) กฎใดก็ใส่ตัวเลือกเหล่านี้ได้ รวมถึง FINAL บรรทัด RULE-SET หรือ DOMAIN-SET จะรับตัวเลือกเหล่านี้และเก็บไว้ แต่การตรงกันภายในชุดจะไม่ส่งการแจ้งเตือนเลย
DOMAIN-SUFFIX,bank.example,DIRECT,notification-text="Bank site opened",notification-interval=60
FINAL,Proxy,notification-text=Fell%20to%20FINAL
ข้อความที่มีช่องว่างให้ใส่เครื่องหมายคำพูด หรือเขียนช่องว่างแต่ละตัวเป็น %20 และเขียนเครื่องหมายจุลภาคเป็น %2C Chute ส่งการแจ้งเตือนเองและทำตามสวิตช์ของแอปสำหรับเรื่องนี้ — อนุญาตการแจ้งเตือน บน iPhone, แสดงการแจ้งเตือนรายงานเหตุการณ์ บน Mac และสิทธิ์การแจ้งเตือนของระบบที่ให้แก่ Chute บน Android — ดังนั้นเมื่อปิดสวิตช์นั้น จะไม่มีอะไรแสดง และ Apple TV จะไม่แสดงเลย ทุกครั้งที่ตรงกันจะถูกบันทึกเป็นเหตุการณ์การแจ้งเตือนของกฎด้วย — ดูการรายงานการแจ้งเตือน
ชื่อแฝง (Aliases)
DOMAIN-MATCHได้รับการยอมรับเป็นชื่อแฝงของDOMAIN-KEYWORDNETWORKได้รับการยอมรับเป็นชื่อแฝงของPROTOCOLDST-PORTได้รับการยอมรับเป็นชื่อแฝงของDEST-PORT
ชุดโดเมน
Chute รองรับการโหลดชุดโดเมนจาก URL ภายนอกด้วยประเภทกฎ DOMAIN-SET ฟิลด์แรกหลังประเภทต้องเป็น URL แบบ http(s) พารามิเตอร์เสริม update-interval คืออายุสูงสุดเป็นวินาทีที่สำเนาที่ดาวน์โหลดไว้จะมีได้ก่อนที่จะถูกดึงใหม่ โดยไม่มีตัวจับเวลา — ดูชุดกฎภายนอก
DOMAIN-SET,https://example.com/domains.txt,DIRECT
DOMAIN-SET,https://example.com/domains.txt,DIRECT,update-interval=86400
ไฟล์ชุดโดเมนประกอบด้วยโดเมนเปล่า หนึ่งโดเมนต่อบรรทัด: example.com จับคู่โดเมนแบบตรงทั้งหมด; .example.com หรือ +.example.com จับคู่โดเมนและโดเมนย่อยทั้งหมด บรรทัดที่ขึ้นต้นด้วย # หรือ // เป็นหมายเหตุ
หน้านี้เป็นฉบับแปลจากเวอร์ชันภาษาอังกฤษ หากเนื้อหาไม่ตรงกัน ให้ยึดเวอร์ชันภาษาอังกฤษเป็นหลัก