Chuyển đến nội dung chính

Hướng dẫn sử dụng mudfish-exclude

Thông tin

Chương trình này chỉ có trong Mudfish Cloud VPN 6.5.4 trở lên.

mudfish-exclude là công cụ dòng lệnh cho Mudfish trên Linux, dùng để chạy chương trình cụ thể ngoài tuyến Mudfish. Công cụ đặc biệt hữu ích khi dùng Full VPN nhưng muốn trình duyệt, ứng dụng nhắn tin, trình phát video hoặc công cụ tải xuống sử dụng trực tiếp đường Internet ban đầu.

일반 프로그램       -> 미꾸라지 경로 -> 중계 서버
mudfish-exclude 앱 -> 기존 기본 경로 -> 인터넷

Công cụ này không thêm thiết lập vào bảng điều khiển Mudfish. Chỉ cần khởi chạy chương trình cần loại trừ bằng mudfish-exclude thay cho lệnh thông thường.

Phạm vi hỗ trợ: hiện chỉ hỗ trợ Linux và IPv4. Không dùng được trên Windows, macOS hoặc Android, và không áp dụng chính sách bỏ qua VPN riêng cho lưu lượng IPv6.

Môi trường cần thiết​

Cần đáp ứng tất cả điều kiện sau.

  • Đã cài Mudfish cho Linux.
  • cgroup v2 được gắn tại /sys/fs/cgroup.
  • Có thể dùng các lệnh ip, iptables và tính năng cgroup match của iptables.
  • Có quyền sudo để thiết lập định tuyến theo chính sách và quy tắc tường lửa.
  • Bảng định tuyến main của Linux có tuyến IPv4 mặc định hoạt động bình thường.

Tệp thực thi đã cài thường nằm ở vị trí sau.

/opt/mudfish/<미꾸라지 버전>/bin/mudfish-exclude

Có thể tìm đường dẫn cài đặt hiện tại bằng lệnh sau.

ls /opt/mudfish/*/bin/mudfish-exclude

Nếu tệp thực thi chưa có trong PATH, hãy thay mudfish-exclude ở các ví dụ dưới bằng đường dẫn đầy đủ vừa tìm được. Ví dụ, đường dẫn cài mặc định của phiên bản 6.5.4 là /opt/mudfish/6.5.4/bin/mudfish-exclude.

Cách dùng cơ bản​

  1. Chạy Mudfish và kết nối thành công các mục mong muốn hoặc chế độ Full VPN.
  2. Nếu chương trình cần loại trừ đang chạy, hãy thoát hoàn toàn, kể cả biểu tượng khay hệ thống và tiến trình nền.
  3. Chạy lại chương trình từ terminal theo dạng sau.
sudo mudfish-exclude <프로그램> [프로그램 옵션...]

Ví dụ, để loại trừ Discord khỏi Mudfish, chạy như sau.

sudo mudfish-exclude discord

Để loại trừ Firefox và mở cửa sổ riêng tư, chạy như sau.

sudo mudfish-exclude firefox --private-window

Nếu đường dẫn tệp thực thi có khoảng trắng, đặt trong dấu ngoặc kép.

sudo mudfish-exclude "/path/to/My Program" --option

sudo được dùng để thiết lập chính sách mạng. Bản thân chương trình chạy qua sudo mudfish-exclude ... sẽ, nếu có thể, sử dụng UID, GID, thư mục nhà và môi trường phiên desktop của người dùng ban đầu đã gọi sudo.

Điều cần biết​

  • Chính sách loại trừ áp dụng cho tiến trình mới được khởi chạy bằng mudfish-exclude và các tiến trình con của nó.
  • Không thể gắn chính sách vào chương trình đã chạy. Phải thoát hoàn toàn trước để chương trình chỉ cho phép một phiên bản không tái sử dụng tiến trình cũ.
  • Ở cách chạy thông thường trong một lần gọi lệnh, chính sách tự được dọn dẹp khi chương trình và tất cả tiến trình con kết thúc.
  • Có thể chạy nhiều lệnh mudfish-exclude đồng thời. Chính sách chung được dọn dẹp sau khi chương trình được loại trừ cuối cùng kết thúc.
  • Lưu lượng IPv4 của chương trình được loại trừ không sử dụng máy chủ trung chuyển Mudfish, tính năng tăng tốc hoặc IP công cộng của tuyến đó.

Kiểm tra hoạt động​

Dễ kiểm tra nhất khi IP IPv4 công cộng trước khi kết nối Full VPN khác với IP công cộng của máy chủ trung chuyển Full VPN.

Trước tiên, kiểm tra địa chỉ trong terminal thông thường khi Full VPN đang kết nối.

curl -4 https://myip.mudfish.net

Chạy cùng lệnh bằng mudfish-exclude.

sudo mudfish-exclude curl -4 https://myip.mudfish.net

Kết quả đầu phải là địa chỉ phía máy chủ trung chuyển Mudfish; kết quả thứ hai phải là địa chỉ của đường Internet ban đầu. Tùy chọn -4 chỉ kiểm tra IPv4 để phù hợp với phạm vi hỗ trợ của công cụ.

Nếu kiểm tra bằng trình duyệt, hãy thoát hoàn toàn trình duyệt, chạy lại như dưới đây rồi truy cập https://myip.mudfish.net.

sudo mudfish-exclude firefox

Thoát và dọn dẹp chính sách​

Khi thoát bình thường, không cần lệnh dọn dẹp riêng. Tuy nhiên, chính sách có thể còn sót nếu tiến trình mudfish-exclude bị buộc dừng, terminal đóng bất thường hoặc hệ thống bị gián đoạn.

Trước tiên, thoát tất cả chương trình đã chạy bằng công cụ này rồi thực hiện lệnh sau.

sudo mudfish-exclude --cleanup

Dùng --cleanup khi chương trình được loại trừ vẫn đang chạy có thể khiến chương trình đó lập tức ngừng bỏ qua tuyến Mudfish.

Tùy chọn dòng lệnh​

사용법: mudfish-exclude [옵션] 프로그램 [프로그램 옵션...]
Tùy chọnMô tả
-h, --helpHiển thị trợ giúp.
--setupChỉ thiết lập chính sách mạng để loại trừ rồi thoát. Không được chỉ định chương trình cùng tùy chọn này.
--cleanupXóa chính sách mạng để loại trừ rồi thoát. Không được chỉ định chương trình cùng tùy chọn này.
--no-setupVào cgroup đã chỉ định và chạy chương trình mà không thiết lập lại chính sách hiện có.
--cgroup NAMEChỉ định tên cgroup v2. Mặc định là mudfish-exclude.
--mark VALUEChỉ định mark tường lửa dùng cho gói tin. Mặc định là 0x6d660001.
--priority VALUEChỉ định độ ưu tiên quy tắc chính sách IPv4. Mặc định là 8252.
--table VALUEChỉ định số bảng định tuyến lưu tuyến mặc định ban đầu. Mặc định là 8252.

Để đánh dấu rõ điểm kết thúc tùy chọn, có thể đặt chương trình sau --.

sudo mudfish-exclude -- firefox --private-window

Tái sử dụng chính sách cho nhiều chương trình​

Người dùng thông thường nên dùng một lần gọi lệnh cho mỗi chương trình. Nếu cần thiết lập chính sách thủ công một lần rồi dùng lại trong nhiều lệnh, thực hiện theo thứ tự sau.

sudo mudfish-exclude --setup
sudo mudfish-exclude --no-setup discord
sudo mudfish-exclude --no-setup firefox

Sau khi thoát tất cả chương trình, phải dọn dẹp chính sách.

sudo mudfish-exclude --cleanup

Cách thủ công không tự dọn dẹp. Một số chương trình desktop có thể chuyển sang cgroup khác của systemd khi chạy, nên cách chạy mặc định phù hợp hơn vì theo dõi việc chuyển cgroup và tự dọn dẹp.

Nếu thay các giá trị --cgroup, --mark, --priority và --table, bạn phải dùng cùng giá trị trong --setup, --no-setup và --cleanup. Giá trị tùy chỉnh không được xung đột với mark tường lửa hoặc quy tắc định tuyến theo chính sách hiện có.

Khắc phục sự cố​

mudfish-exclude: command not found​

Tệp thực thi chưa có trong PATH. Tìm vị trí cài bằng lệnh sau rồi chạy bằng đường dẫn đầy đủ.

ls /opt/mudfish/*/bin/mudfish-exclude
sudo /opt/mudfish/6.5.4/bin/mudfish-exclude discord

Thay số phiên bản trong lệnh thứ hai bằng phiên bản đã cài.

network policy setup requires root​

Bạn không có quyền thiết lập chính sách mạng. Thêm sudo trước lệnh rồi chạy lại.

sudo mudfish-exclude discord

cgroup v2 is required at /sys/fs/cgroup​

Hệ thống hiện không dùng cgroup v2 hoặc chưa gắn nó tại vị trí đó. Kiểm tra bằng lệnh sau.

test -f /sys/fs/cgroup/cgroup.controllers && echo "cgroup v2 사용 가능"

Nếu không có kết quả, hãy tìm cách bật cgroup v2 cho bản phân phối đang dùng.

Lỗi iptables rule add failed hoặc cgroup match​

Kiểm tra đã cài iptables và kernel cùng iptables có hỗ trợ cgroup match hay chưa. Ngay cả trên bản phân phối dùng nftables, công cụ này trực tiếp gọi lệnh tương thích iptables, nên cần lớp tương thích iptables hoạt động đúng.

failed to find the IPv4 default route​

Không tìm thấy tuyến IPv4 mặc định của đường Internet ban đầu trong bảng main. Kiểm tra kết quả lệnh sau có tuyến default hay không.

ip -4 route show default table main

Nếu không có tuyến mặc định hoặc tuyến đó đã trỏ đến giao diện VPN khác, mudfish-exclude không thể thiết lập đường Internet ban đầu.

IP công cộng không đổi dù đã loại trừ​

Kiểm tra lần lượt các mục sau.

  1. Xác nhận Full VPN thực sự đang kết nối và khi chạy bình thường hiển thị IP máy chủ trung chuyển.
  2. Thoát tất cả tiến trình hiện có và tiến trình nền của chương trình đích rồi chạy lại.
  3. Dùng curl -4 hoặc cách kiểm tra IPv4 khác để tránh nhầm với kết quả IPv6.
  4. Kiểm tra xem chương trình đích có chuyển lệnh cho dịch vụ riêng hoặc launcher đã chạy hay không. Chính sách chỉ áp dụng cho cây tiến trình mới do mudfish-exclude tạo ra.
  5. Kiểm tra tuyến mặc định của ip -4 route show default table main có trỏ đến giao diện Internet thực tế hay không.

Đã đóng chương trình nhưng lệnh trong terminal chưa kết thúc​

Tiến trình con hoặc tiến trình nền có thể vẫn chạy trong cgroup loại trừ. Hãy thoát cả biểu tượng khay hệ thống, launcher và tiến trình cập nhật liên quan. Cách chạy mặc định chờ tất cả tiến trình con kết thúc rồi mới dọn dẹp chính sách.

Mạng hoạt động bất thường sau sự cố​

Thoát tất cả chương trình đã chạy bằng công cụ này rồi dọn dẹp chính sách còn sót.

sudo mudfish-exclude --cleanup

Nếu vẫn gặp vấn đề, thoát Mudfish, kiểm tra tuyến mặc định của hệ thống và quy tắc iptables, rồi kết nối lại.

Nguyên lý hoạt động​

mudfish-exclude đưa chương trình vào một cgroup v2 riêng và gắn mark iptables cho các gói IPv4 phát sinh từ cgroup đó. Gói tin có mark này đi qua bảng định tuyến chính sách riêng đến tuyến mặc định tìm được trong bảng main của Linux, đồng thời áp dụng NAT MASQUERADE cần thiết.

Quy trình này không sửa cấu hình hoặc trạng thái bộ nhớ dùng chung của mudrun, mudflow, mudfish và mudwfp_proxy. Chính sách loại trừ chỉ hoạt động ở các lớp cgroup, iptables và định tuyến chính sách IPv4 của hệ điều hành.