คู่มือผู้ใช้ mudfish-exclude
โปรแกรมนี้ใช้ได้เฉพาะ Mudfish Cloud VPN 6.5.4 หรือใหม่กว่า
mudfish-exclude เป็นเครื่องมือบรรทัดคำสั่งสำหรับ Mudfish บน Linux เพื่อเรียกบางโปรแกรมโดยไม่ผ่านเส้นทาง Mudfish เหมาะเมื่อใช้โหมด Full VPN แต่ต้องการให้เบราว์เซอร์ โปรแกรมส่งข้อความ เครื่องเล่นวิดีโอ หรือเครื่องมือดาวน์โหลดใช้การเชื่อมต่ออินเทอร์เน็ตเดิมโดยตรง
일반 프로그램 -> 미꾸라지 경로 -> 중계 서버
mudfish-exclude 앱 -> 기존 기본 경로 -> 인터넷
เครื่องมือนี้ไม่ได้เพิ่มการตั้งค่าในแดชบอร์ด Mudfish ให้เริ่มโปรแกรมที่ต้องการยกเว้นผ่าน mudfish-exclude แทนคำสั่งเรียกใช้ตามปกติ
ขอบเขตการรองรับ: ปัจจุบันรองรับเฉพาะ Linux และ IPv4 ใช้บน Windows, macOS หรือ Android ไม่ได้ และไม่กำหนดนโยบายแยกสำหรับทราฟฟิก IPv6
สภาพแวดล้อมที่ต้องมี
ต้องตรงตามเงื่อนไขทั้งหมดต่อไปนี้
- ติดตั้ง Mudfish สำหรับ Linux แล้ว
- เมานต์ cgroup v2 ไว้ที่
/sys/fs/cgroup - ใช้คำสั่ง
ipและiptablesรวมถึงฟังก์ชัน cgroup match ของ iptables ได้ - มีสิทธิ์
sudoเพื่อกำหนด policy routing และกฎไฟร์วอลล์ - ตารางเส้นทาง main ของ Linux ต้องมีเส้นทางเริ่มต้น IPv4 ที่ใช้งานได้
ไฟล์เรียกใช้ที่ติดตั้งมักอยู่ที่ตำแหน่งต่อไปนี้
/opt/mudfish/<미꾸라지 버전>/bin/mudfish-exclude
ค้นหาพาธติดตั้งปัจจุบันได้ด้วยคำสั่งต่อไปนี้
ls /opt/mudfish/*/bin/mudfish-exclude
หากไฟล์เรียกใช้ไม่ได้อยู่ใน PATH ให้แทน mudfish-exclude ในตัวอย่างด้วยพาธเต็มที่ตรวจพบ เช่น พาธติดตั้งเริ่มต้นของรุ่น 6.5.4 คือ /opt/mudfish/6.5.4/bin/mudfish-exclude
การใช้งานพื้นฐาน
- เรียก Mudfish แล้วเชื่อมต่อไอเท็มที่ต้องการหรือโหมด Full VPN ให้เรียบร้อย
- หากโปรแกรมที่ต้องการยกเว้นทำงานอยู่ ให้ปิดทั้งหมด รวมถึงไอคอนในถาดระบบและโปรเซสเบื้องหลัง
- เรียกโปรแกรมใหม่จากเทอร์มินัลด้วยรูปแบบต่อไปนี้
sudo mudfish-exclude <프로그램> [프로그램 옵션...]
เช่น หากต้องการยกเว้น Discord จาก Mudfish ให้เรียกดังนี้
sudo mudfish-exclude discord
หากต้องการยกเว้น Firefox และเปิดหน้าต่างส่วนตัว ให้เรียกดังนี้
sudo mudfish-exclude firefox --private-window
หากพาธไฟล์เรียกใช้มีช่องว่าง ให้ครอบด้วยเครื่องหมายอัญประกาศ
sudo mudfish-exclude "/path/to/My Program" --option
sudo ใช้กำหนดนโยบายเครือข่าย ส่วนโปรแกรมที่เรียกผ่าน sudo mudfish-exclude ... จะทำงานด้วย UID, GID, โฮมไดเรกทอรี และสภาพแวดล้อมเซสชันเดสก์ท็อปของผู้ใช้เดิมที่เรียก sudo หากทำได้
สิ่งที่ควรทราบ
- นโยบายยกเว้นมีผลกับโปรเซสที่เริ่มใหม่ผ่าน
mudfish-excludeและโปรเซสลูกของมัน - ไม่สามารถเพิ่มนโยบายให้โปรแกรมที่ทำงานอยู่แล้วได้ ต้องปิดโปรแกรมให้หมดก่อน เพื่อไม่ให้โปรแกรมแบบอินสแตนซ์เดียวกลับไปใช้โปรเซสเดิม
- ในวิธีเรียกใช้ปกติครั้งต่อครั้ง ระบบจะล้างนโยบายอัตโนมัติเมื่อโปรแกรมและโปรเซสลูกทั้งหมดจบการทำงาน
- เรียกคำสั่ง
mudfish-excludeหลายคำสั่งพร้อมกันได้ นโยบายที่ใช้ร่วมกันจะถูกล้างเมื่อโปรแกรมที่ยกเว้นตัวสุดท้ายจบการทำงาน - ทราฟฟิก IPv4 ของโปรแกรมที่ยกเว้นจะไม่ใช้เซิร์ฟเวอร์รีเลย์ ฟังก์ชันเร่งการเชื่อมต่อ หรือ IP สาธารณะของเส้นทาง Mudfish
ตรวจสอบการทำงาน
ตรวจสอบได้ง่ายที่สุดเมื่อ IP สาธารณะ IPv4 ก่อนเชื่อมต่อ Full VPN ต่างจาก IP ของเซิร์ฟเวอร์รีเลย์ Full VPN
ขณะเชื่อมต่อ Full VPN ให้ตรวจสอบที่อยู่จากเทอร์มินัลปกติก่อน
curl -4 https://myip.mudfish.net
เรียกคำสั่งเดียวกันผ่าน mudfish-exclude
sudo mudfish-exclude curl -4 https://myip.mudfish.net
ผลแรกควรเป็นที่อยู่ของเซิร์ฟเวอร์รีเลย์ Mudfish ส่วนผลที่สองควรเป็นที่อยู่ของการเชื่อมต่ออินเทอร์เน็ตเดิม ตัวเลือก -4 ใช้ตรวจเฉพาะ IPv4 ให้ตรงกับขอบเขตที่เครื่องมือรองรับ
หากตรวจสอบด้วยเบราว์เซอร์ ให้ปิดเบราว์เซอร์ทั้งหมดก่อน แล้วเรียกดังนี้และเปิด https://myip.mudfish.net
sudo mudfish-exclude firefox
ปิดโปรแกรมและล้างนโยบาย
เมื่อปิดตามปกติ ไม่ต้องใช้คำสั่งล้างเพิ่มเติม แต่หากบังคับปิดโปรเซส mudfish-exclude เทอร์มินัลปิดผิดปกติ หรือระบบหยุดทำงาน นโยบายอาจค้างอยู่
ปิดโปรแกรมทั้งหมดที่เรียกด้วยเครื่องมือนี้ก่อน แล้วใช้คำสั่งต่อไปนี้
sudo mudfish-exclude --cleanup
หากใช้
--cleanupขณะที่โปรแกรมที่ยกเว้นยังทำงานอยู่ การไม่ผ่าน Mudfish ของโปรแกรมนั้นอาจหยุดทันที
ตัวเลือกคำสั่ง
사용법: mudfish-exclude [옵션] 프로그램 [프로그램 옵션...]
| ตัวเลือก | คำอธิบาย |
|---|---|
-h, --help | แสดงวิธีใช้ |
--setup | ตั้งเฉพาะนโยบายเครือข่ายสำหรับการยกเว้นแล้วจบการทำงาน ระบุโปรแกรมร่วมด้วยไม่ได้ |
--cleanup | ลบนโยบายเครือข่ายสำหรับการยกเว้นแล้วจบการทำงาน ระบุโปรแกรมร่วมด้วยไม่ได้ |
--no-setup | เข้าสู่ cgroup ที่ระบุแล้วเรียกโปรแกรม โดยไม่ตั้งนโยบายเดิมใหม่ |
--cgroup NAME | ระบุชื่อ cgroup v2 ที่ใช้ ค่าเริ่มต้นคือ mudfish-exclude |
--mark VALUE | ระบุ firewall mark สำหรับแพ็กเก็ต ค่าเริ่มต้นคือ 0x6d660001 |
--priority VALUE | ระบุลำดับความสำคัญของกฎนโยบาย IPv4 ค่าเริ่มต้นคือ 8252 |
--table VALUE | ระบุหมายเลขตารางเส้นทางสำหรับเก็บเส้นทางเริ่มต้นเดิม ค่าเริ่มต้นคือ 8252 |
เพื่อระบุจุดสิ้นสุดของตัวเลือกอย่างชัดเจน ให้ใส่โปรแกรมหลัง --
sudo mudfish-exclude -- firefox --private-window
ใช้นโยบายเดิมกับหลายโปรแกรม
สำหรับผู้ใช้ทั่วไป แนะนำให้เรียกแยกครั้งต่อครั้งตามแต่ละโปรแกรม หากต้องตั้งนโยบายด้วยตนเองหนึ่งครั้งแล้วใช้ซ้ำหลายคำสั่ง ให้ทำตามลำดับต่อไปนี้
sudo mudfish-exclude --setup
sudo mudfish-exclude --no-setup discord
sudo mudfish-exclude --no-setup firefox
หลังปิดโปรแกรมทั้งหมด ต้องล้างนโยบายด้วย
sudo mudfish-exclude --cleanup
วิธีตั้งด้วยตนเองไม่ล้างนโยบายอัตโนมัติ นอกจากนี้โปรแกรมเดสก์ท็อปบางตัวอาจย้ายไป cgroup อื่นของ systemd ระหว่างทำงาน วิธีเรียกใช้ปกติครั้งต่อครั้งจึงเหมาะกว่า เพราะติดตามการย้าย cgroup และล้างนโยบายให้อัตโนมัติ
หากเปลี่ยนค่า --cgroup, --mark, --priority หรือ --table ต้องใช้ค่าเดียวกันใน --setup, --no-setup และ --cleanup ทั้งหมด ค่าที่กำหนดเองต้องไม่ชนกับ firewall mark หรือกฎ policy routing เดิมของระบบ
แก้ไขปัญหา
mudfish-exclude: command not found
ไฟล์เรียกใช้ไม่ได้อยู่ใน PATH ใช้คำสั่งต่อไปนี้เพื่อหาตำแหน่งติดตั้ง แล้วเรียกด้วยพาธเต็ม
ls /opt/mudfish/*/bin/mudfish-exclude
sudo /opt/mudfish/6.5.4/bin/mudfish-exclude discord
เปลี่ยนหมายเลขเวอร์ชันในคำสั่งที่สองให้ตรงกับรุ่นที่ติดตั้ง
network policy setup requires root
ไม่มีสิทธิ์ตั้งนโยบายเครือข่าย ให้เพิ่ม sudo หน้าคำสั่งแล้วเรียกใหม่
sudo mudfish-exclude discord
cgroup v2 is required at /sys/fs/cgroup
ระบบปัจจุบันไม่ได้ใช้ cgroup v2 หรือไม่ได้เมานต์ไว้ที่ตำแหน่งนั้น ตรวจสอบได้ด้วยคำสั่งต่อไปนี้
test -f /sys/fs/cgroup/cgroup.controllers && echo "cgroup v2 사용 가능"
หากไม่มีผลลัพธ์ ให้ตรวจสอบวิธีเปิด cgroup v2 ของดิสทริบิวชันที่ใช้
ข้อผิดพลาด iptables rule add failed หรือ cgroup match
ตรวจสอบว่าติดตั้ง iptables แล้ว และเคอร์เนลกับ iptables รองรับ cgroup match แม้บนดิสทริบิวชันที่ใช้ nftables เครื่องมือนี้ก็เรียกคำสั่งที่เข้ากันได้กับ iptables โดยตรง จึงต้องมีชั้นความเข้ากันได้ของ iptables ที่ทำงานถูกต้อง
failed to find the IPv4 default route
ไม่พบเส้นทางเริ่มต้น IPv4 ของการเชื่อมต่ออินเทอร์เน็ตเดิมในตาราง main ตรวจสอบว่าผลคำสั่งต่อไปนี้มีเส้นทาง default หรือไม่
ip -4 route show default table main
หากไม่มีเส้นทางเริ่มต้นหรือชี้ไปยังอินเทอร์เฟซ VPN อื่นอยู่แล้ว mudfish-exclude จะสร้างเส้นทางอินเทอร์เน็ตเดิมไม่ได้
ยกเว้นแล้วแต่ IP สาธารณะไม่เปลี่ยน
ตรวจสอบตามลำดับต่อไปนี้
- ตรวจสอบว่าโหมด Full VPN เชื่อมต่อจริง และการเรียกแบบปกติแสดง IP ของเซิร์ฟเวอร์รีเลย์
- ปิดโปรเซสเดิมและโปรเซสเบื้องหลังทั้งหมดของโปรแกรมเป้าหมาย แล้วเรียกใหม่
- ใช้
curl -4หรือวิธีตรวจ IPv4 เพื่อไม่ให้สับสนกับผล IPv6 - ตรวจสอบว่าโปรแกรมเป้าหมายส่งคำสั่งต่อให้บริการแยกหรือ Launcher ที่ทำงานอยู่แล้วหรือไม่ นโยบายยกเว้นมีผลเฉพาะสายโปรเซสที่
mudfish-excludeสร้างขึ้นใหม่ - ตรวจสอบว่าเส้นทางเริ่มต้นของ
ip -4 route show default table mainชี้ไปยังอินเทอร์เฟซอินเทอร์เน็ตจริง
ปิดโปรแกรมแล้วแต่คำสั่งในเทอร์มินัลยังไม่จบ
โปรเซสลูกหรือโปรเซสเบื้องหลังอาจยังทำงานใน cgroup ที่ยกเว้น ให้ปิดทั้งหมดรวมถึงไอคอนถาดระบบ Launcher และโปรเซสอัปเดต วิธีเรียกใช้ปกติจะรอให้โปรเซสลูกทั้งหมดจบก่อนจึงล้างนโยบาย
เครือข่ายผิดปกติหลังโปรแกรมหยุดทำงานผิดปกติ
ปิดโปรแกรมทั้งหมดที่เรียกด้วยเครื่องมือนี้ แล้วล้างนโยบายที่ค้างอยู่
sudo mudfish-exclude --cleanup
หากยังมีปัญหา ให้ปิด Mudfish ตรวจสอบเส้นทางเริ่มต้นและกฎ iptables ของระบบ แล้วเชื่อมต่อใหม่
หลักการทำงาน
mudfish-exclude นำโปรแกรมที่จะเรียกไปไว้ใน cgroup v2 แยก แล้วกำหนด iptables mark ให้แพ็กเก็ต IPv4 จาก cgroup นั้น แพ็กเก็ตที่มี mark นี้จะผ่านตาราง policy routing แยกไปยังเส้นทางเริ่มต้นที่พบในตาราง main ของ Linux และใช้ NAT MASQUERADE ตามที่จำเป็น
กระบวนการนี้ไม่แก้ไขการตั้งค่าหรือสถานะหน่วยความจำร่วมของ mudrun, mudflow, mudfish หรือ mudwfp_proxy นโยบายยกเว้นทำงานเฉพาะในชั้น cgroup, iptables และ IPv4 policy routing ของระบบปฏิบัติการ