การกำหนดค่า WireGuard
Chute รองรับ WireGuard เป็นโปรโตคอลพร็อกซีขาออก คุณสามารถกำหนดค่า WireGuard แบบฝังในส่วน [Proxy] หรือกำหนดส่วน [WireGuard] ที่มีชื่อและอ้างอิง
ส่วน WireGuard
ส่วน [WireGuard] กำหนดการกำหนดค่าทันเนล WireGuard ที่สมบูรณ์ซึ่งสามารถอ้างอิงตามชื่อจากเซิร์ฟเวอร์พร็อกซี WireGuard
[WireGuard wg0]
private-key = base64_private_key
peer-public-key = base64_peer_public_key
self-ip = 10.0.0.2
self-ip-v6 = fd00::2
preshared-key = base64_preshared_key
server = example.com
port = 51820
wg-mtu = 1420
keepalive = 25
พารามิเตอร์
| คีย์ | จำเป็น | คำอธิบาย |
|---|---|---|
private-key |
ใช่ | คีย์ส่วนตัว WireGuard เข้ารหัส base64 |
peer-public-key |
ใช่ | คีย์สาธารณะของเพียร์ เข้ารหัส base64 |
self-ip |
ไม่ | ที่อยู่ IPv4 ในเครื่องสำหรับอินเทอร์เฟซ WireGuard (ค่าเริ่มต้น: 10.0.0.2 ทั้งสำหรับ WireGuard และ AmneziaWG) |
self-ip-v6 |
ไม่ | ที่อยู่ IPv6 ในเครื่องสำหรับอินเทอร์เฟซ WireGuard |
preshared-key |
ไม่ | คีย์ที่แชร์ล่วงหน้าสำหรับการต้านทานควอนตัม (post-quantum) |
server |
ใช่* | ที่อยู่เซิร์ฟเวอร์ระยะไกล (ใช้เมื่อบรรทัดพร็อกซีไม่ได้ระบุ; บรรทัดพร็อกซีมีความสำคัญกว่า) |
port |
ใช่* | พอร์ตเซิร์ฟเวอร์ระยะไกล (ลำดับความสำคัญเดียวกับ server) |
wg-mtu |
ไม่ | MTU สำหรับอินเทอร์เฟซ WireGuard (ค่าเริ่มต้น: 1420) mtu ภายในส่วนจะถูกอ่านเป็น wg-mtu โดย wg-mtu ที่เขียนไว้ชัดเจนจะมีผลก่อน |
keepalive |
ไม่ | ช่วง keepalive ถาวรเป็นวินาที หากไม่ระบุจะไม่ส่ง keepalive |
allowed-ips |
ไม่ | ปลายทางที่เพียร์รับส่งให้ เป็นรายการ CIDR คั่นด้วยจุลภาค (เช่น allowed-ips = 10.0.0.0/8, 192.168.1.0/24) การเชื่อมต่อไปยังที่อยู่นอกช่วงเหล่านั้นจะถูกปฏิเสธ (TCP) หรือถูกทิ้ง (UDP) หากไม่ระบุ หรือระบุทั้ง 0.0.0.0/0 และ ::/0 หมายถึงทุกปลายทาง รายการที่ไม่ใช่ CIDR จะถูกละเว้นพร้อมคำเตือน |
reserved |
ไม่ | ไบต์สงวนสำหรับส่วนหัวการจับมือ WireGuard (เช่น reserved=0,1,2) — ถูกแยกวิเคราะห์ แต่เอนจินปัจจุบันไม่ได้นำไปใช้และจะบันทึกคำเตือน |
* server และ port ต้องมีอยู่ในส่วนนี้หรือบนบรรทัด [Proxy] ที่อ้างอิง มิฉะนั้นนโยบายจะถูกปฏิเสธเนื่องจากไม่สมบูรณ์
ไวยากรณ์ peer ของ Surge
ส่วนนี้สามารถอธิบายเพียร์แบบเดียวกับที่ Surge ทำได้:
[WireGuard wg0]
private-key = base64_private_key
self-ip = 10.0.0.2
mtu = 1280
peer = (public-key = base64_peer_public_key, endpoint = example.com:51820, preshared-key = base64_preshared_key, keepalive = 25, client-id = 1/2/3, allowed-ips = "0.0.0.0/0, ::/0")
public-keyจะกลายเป็นpeer-public-key,endpoint(host:portหรือ[v6]:port) จะกลายเป็นserverและport,client-id = a/b/cจะกลายเป็นreservedส่วนpreshared-keyและkeepaliveใช้ชื่อเดิม คีย์ที่เขียนไว้ในส่วนโดยตรงจะมีผลเหนือค่าเดียวกันในpeerเอนจินปัจจุบันแยกวิเคราะห์reservedแต่ไม่ได้นำไปใช้- ใช้เพียร์ได้เพียงหนึ่งตัว เพียร์ที่สองจะถูกรายงานเป็นคำเตือนเชิงแนะนำและถูกละเว้น
allowed-ipsจะถูกคอมไพล์และบังคับใช้กับ WireGuard TCP และ UDP: ปลายทางนอก CIDR ของเพียร์จะถูกปฏิเสธหรือทิ้ง เพราะเพียร์นั้นไม่สามารถกำหนดเส้นทางกลับได้ ส่วนคีย์ส่วนของ Surge อย่างdns-serverและprefer-ipv6จะถูกเก็บไว้แต่ไม่มีผล และจะปรากฏในข้อความแจ้งเรื่องตัวเลือกที่ถูกละเว้น- เมื่อบันทึกการกำหนดค่า ส่วนนี้จะถูกเขียนกลับด้วยคีย์ข้างต้นแทนบรรทัด
peer = (…)
การใช้งาน
อ้างอิงส่วนจากเซิร์ฟเวอร์พร็อกซี:
[Proxy]
WG = wireguard, section-name=wg0
[Proxy Group]
WGGroup = select, WG
[Rule]
IP-CIDR,10.0.0.0/8,WGGroup
FINAL,DIRECT
สามารถกำหนดส่วน [WireGuard] หลายส่วนสำหรับทันเนลที่แตกต่างกัน:
[WireGuard us]
private-key = ...
peer-public-key = ...
self-ip = 10.0.1.2
[WireGuard eu]
private-key = ...
peer-public-key = ...
self-ip = 10.0.2.2
หมายเหตุ: WireGuard ทำงานผ่านทันเนล UDP ของตัวเองพร้อมสแตก TCP/IP แบบ userspace ชื่อ (เช่น
wg0) คำนึงถึงตัวพิมพ์เล็กใหญ่
ส่วน AmneziaWG
Chute ยังรองรับ AmneziaWG ซึ่งเป็น WireGuard รูปแบบหนึ่งที่มีการอำพรางทราฟฟิก ส่วน [AmneziaWG <name>] รับคีย์เดียวกันกับส่วน [WireGuard] พร้อมด้วยพารามิเตอร์การอำพรางต่อไปนี้:
jc,jmin,jmax— จำนวนแพ็กเก็ตขยะและช่วงขนาดของแพ็กเก็ต เมื่อjcมากกว่าศูนย์ ต้องตั้งทั้งjminและjmaxและjmaxต้องไม่น้อยกว่าjminมิฉะนั้นทันเนลจะถูกปฏิเสธs1,s2,s3,s4— ข้อมูลขยะที่เติมไว้ด้านหน้าแพ็กเก็ต init/response/cookie/transport โดยs1–s3ต้องไม่เกิน 64 ไบต์ (s4คือ 32) และs1 + 148ต้องไม่เท่ากับs2 + 92มิฉะนั้นทันเนลจะถูกปฏิเสธh1,h2,h3,h4— ค่าส่วนหัวชนิดข้อความที่กำหนดเอง แต่ละค่าเป็นเลขฐานสิบหรือช่วงstart-endภายใน 32 บิต และต้องมากกว่า 4 เพราะ 1–4 เป็นชนิดข้อความของ WireGuard เอง ทั้งสี่ค่าต้องไม่ทับซ้อนกัน มิฉะนั้นทันเนลจะถูกปฏิเสธi1,i2,i3,i4,i5— นิยามแพ็กเก็ตขยะแบบพิเศษ นิยามที่แยกวิเคราะห์ไม่ได้จะทำให้ทันเนลถูกปฏิเสธ
ชุดพารามิเตอร์ที่ถูกปฏิเสธจะถูกบันทึกเป็น WireGuard: AmneziaWG parameters rejected: <เหตุผล> จากนั้นทันเนลจะล้มเหลวด้วย Failed to create BoringTun tunnel
นโยบายอ้างอิงส่วนนี้ด้วยประเภท amneziawg (ชื่อแฝง awg):
[AmneziaWG awg0]
private-key = base64_private_key
peer-public-key = base64_peer_public_key
self-ip = 10.0.0.2
server = example.com
port = 51820
jc = 4
jmin = 40
jmax = 70
s1 = 15
s2 = 60
h1 = 123456
h2 = 67543
h3 = 32345
h4 = 123123
[Proxy]
AWG = amneziawg, section-name=awg0
กฎการตรวจสอบความสอดคล้องระหว่างส่วน:
- การใส่พารามิเตอร์ AmneziaWG ในส่วน
[WireGuard]ธรรมดาถือเป็นข้อผิดพลาดของการกำหนดค่า — ให้ใช้ส่วน[AmneziaWG]แทน - ไม่สามารถใช้
reservedในส่วน[AmneziaWG]ได้ เนื่องจากมันเขียนไบต์ส่วนหัวชุดเดียวกันกับที่h4แทนที่ ดังนั้นการใช้ร่วมกันจึงถูกปฏิเสธเป็นข้อผิดพลาด - ส่วน
[AmneziaWG]ที่ไม่มีพารามิเตอร์การอำพรางเลยจะได้รับคำเตือนเชิงแนะนำ — เพราะมันจะทำงานเหมือน WireGuard ธรรมดา
หน้านี้เป็นฉบับแปลจากเวอร์ชันภาษาอังกฤษ หากเนื้อหาไม่ตรงกัน ให้ยึดเวอร์ชันภาษาอังกฤษเป็นหลัก