ข้ามไปยังเนื้อหาหลัก

คู่มือผู้ใช้ 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

การใช้งานพื้นฐาน​

  1. เรียก Mudfish แล้วเชื่อมต่อไอเท็มที่ต้องการหรือโหมด Full VPN ให้เรียบร้อย
  2. หากโปรแกรมที่ต้องการยกเว้นทำงานอยู่ ให้ปิดทั้งหมด รวมถึงไอคอนในถาดระบบและโปรเซสเบื้องหลัง
  3. เรียกโปรแกรมใหม่จากเทอร์มินัลด้วยรูปแบบต่อไปนี้
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 สาธารณะไม่เปลี่ยน​

ตรวจสอบตามลำดับต่อไปนี้

  1. ตรวจสอบว่าโหมด Full VPN เชื่อมต่อจริง และการเรียกแบบปกติแสดง IP ของเซิร์ฟเวอร์รีเลย์
  2. ปิดโปรเซสเดิมและโปรเซสเบื้องหลังทั้งหมดของโปรแกรมเป้าหมาย แล้วเรียกใหม่
  3. ใช้ curl -4 หรือวิธีตรวจ IPv4 เพื่อไม่ให้สับสนกับผล IPv6
  4. ตรวจสอบว่าโปรแกรมเป้าหมายส่งคำสั่งต่อให้บริการแยกหรือ Launcher ที่ทำงานอยู่แล้วหรือไม่ นโยบายยกเว้นมีผลเฉพาะสายโปรเซสที่ mudfish-exclude สร้างขึ้นใหม่
  5. ตรวจสอบว่าเส้นทางเริ่มต้นของ 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 ของระบบปฏิบัติการ