Ngiêm cấm sử đụng PROXY và VPS vào mục đích trái pháp luật bạn sẽ phải chịu toàn bộ trách nhiệm trước pháp luật khi sử dụng dịch vụ của chúng tôi tks!
sing-box proxy: outbound HTTP, SOCKS5 và rule theo tên miền

sing-box proxy: outbound HTTP, SOCKS5 và rule theo tên miền

Chuyên viên Kỹ thuật ProxyVN 08-30-2026 Đang tính... phút đọc

sing-box proxy là cách dùng sing-box làm bộ định tuyến cục bộ: nhận kết nối ở inbound, rồi chọn outbound HTTP hoặc SOCKS5 theo tên miền đích. ProxyVN đọc tài liệu cấu hình ngày 27/10/2026, ghi rõ trường nào thuộc phiên bản nào và chạy script soát cấu hình. Bài theo hướng kỹ thuật và thu thập dữ liệu, chưa chạy thử sing-box gốc.

sing-box proxy là gì và ranh giới với bài V2Ray upstream

sing-box là nền tảng proxy mã nguồn mở viết bằng Go, dùng một file JSON để mô tả toàn bộ cách nhận và gửi lưu lượng. Trang giới thiệu cấu hình liệt kê các khối cấp trên cùng: log, dns, ntp, certificate, endpoints, inbounds, outbounds, route, services và experimental. Bài này chỉ dùng ba khối đầu việc: inbounds, outbounds và route.

Mục tiêu của bài rất cụ thể. Anh em có một hoặc hai proxy HTTP hoặc SOCKS5 mua ngoài, có tài khoản. Anh em muốn một cổng cục bộ duy nhất cho công cụ thu thập dữ liệu, để sing-box quyết định tên miền nào đi proxy nào, tên miền nào đi thẳng.

Khác gì bài V2Ray upstream proxy

ProxyVN đã có bài V2Ray upstream proxy, viết về lõi V2Ray chạy thật. Hai công cụ có họ hàng nhưng cấu hình không dùng chung được. Bảng dưới liệt kê điểm khác mà anh em dễ chép nhầm.

Bảng: Khác gì bài V2Ray upstream proxy

Việc cần làm

V2Ray (bài đã đăng)

sing-box (bài này)

Lệnh kiểm cú pháp

v2ray test -c

sing-box check

Chọn đường ra theo quy tắc

outboundTag trong rule

action route kèm outbound

Nối chuỗi hai proxy

proxySettings

trường detour trong Dial Fields

Chặn kết nối

outbound blackhole

rule action reject

Phiên bản làm mốc

5.53.0

tài liệu hiện hành ghi thay đổi từ 1.8 đến 1.15

Cột V2Ray lấy từ chính bài đã đăng. Cột sing-box lấy từ các trang cấu hình đã đọc. Anh em đừng chép khóa từ cột này sang cột kia.

Phạm vi và những gì bài không bàn

sing-box có nhiều tính năng khác như TUN, DNS có luật riêng, rule-set tải từ xa, các giao thức mã hóa riêng. Bài này bỏ qua tất cả. Một số tùy chọn trong route-options được tài liệu mô tả là để vượt qua tường lửa dò chuỗi SNI. Bài không hướng dẫn và không khuyến khích dùng chúng để vượt bảo vệ hay kiểm duyệt.

Hướng của bài là kỹ thuật: gom nhiều proxy mua ngoài vào một cổng, chia luồng theo tên miền, và kiểm chứng tuyến đi. Đây là việc hợp pháp mà người làm thu thập dữ liệu hay đo kiểm website của chính mình cần.

Mình đã chạy gì, chưa chạy gì

Mình không tải hay chạy tệp thực thi từ bên ngoài trong lần viết này, nên chưa chạy sing-box. Phần đã chạy là script singbox_check.py do mình viết bằng Python. Script đọc file JSON, soát các trường theo mốc phiên bản trong tài liệu, và mô phỏng thứ tự rule trên vài tên miền mẫu. Kết quả script in ra được ghi nguyên văn ở các phần sau.

Schema sing-box proxy theo phiên bản: từ 1.10 đến 1.15

Schema sing-box đổi theo phiên bản

Schema sing-box đổi theo phiên bản

Vấn đề lớn nhất của sing-box là cấu hình đổi nhanh. Một file viết cho bản cũ có thể bị bản mới từ chối khởi động. Anh em cần biết trường nào đổi ở bản nào trước khi chép bất kỳ đoạn nào.

Bản đang phát hành khi mình đọc

Trang Change Log ngày 27/10/2026 liệt kê bản 1.14.4 và bản thử 1.15.0-alpha.13 ở đầu danh sách. Tài liệu cấu hình mình đọc là bản hiện hành, nên có cả trường mới của 1.15.0. Ví dụ trang outbound HTTP có trường version, ghi "Since sing-box 1.15.0".

Hệ quả thực tế: nếu máy anh em cài 1.14.x, đừng dùng trường version của outbound HTTP. Chạy sing-box version để biết bản thật, rồi đối chiếu từng trường với ghi chú "Since" hoặc "Deprecated" bên cạnh.

Mốc thay đổi liên quan đến bài này

Trang Deprecated Feature List và trang Migration ghi các mốc sau, mình chỉ lấy những mốc chạm vào cấu hình proxy HTTP và SOCKS.

Bảng: Mốc thay đổi liên quan đến bài này

Bản

Thay đổi

Trạng thái được ghi

1.8.0

Có rule-set, thay geoip và geosite

geoip, geosite bị gỡ ở 1.12

1.11.0

Outbound block và dns, các trường sniff trong inbound

Gỡ ở 1.13

1.11.0

Rule thêm action, trường outbound của rule chuyển vào action

outbound trong rule ghi Deprecated

1.12.0

Định dạng máy chủ DNS mới, thêm domain_resolver

Định dạng cũ gỡ ở 1.14

1.13.0

Action reject mở rộng cho ICMP

Mới

1.14.0

domain_resolver bắt buộc khi outbound dùng tên miền

Xem phần chuẩn bị

1.15.0

Outbound HTTP có trường version

Mới

Bảng này chép lại ghi chú trên trang tài liệu, không suy ra từ kinh nghiệm cá nhân. Một dòng quan trọng: trang Deprecated ghi rằng các outbound đặc biệt block và dns, cùng các trường sniff, domain_strategy trong inbound, đã bị gỡ ở 1.13.0.

Vì sao rule action thay outbound trong rule

Trước 1.11, một rule định tuyến chỉ có trường outbound. Từ 1.11, rule có trường action, và trường outbound chuyển sang là tham số của action route. Trang Rule ghi trường outbound là "Deprecated in sing-box 1.11.0, moved to Rule Action".

Lợi ích của kiểu mới là cùng một rule có thể chặn, định tuyến, nghe lén tên miền (sniff) hoặc phân giải. Trang Rule Action chia action thành nhóm cuối, như route, reject, hijack-dns, và nhóm không cuối, như sniff, resolve, route-options. Nhóm không cuối làm xong việc rồi rule tiếp theo vẫn được xét.

Script soát phiên bản

Script singbox_check.py giữ một danh sách các trường cũ theo bảng trên, rồi in mức CU cho mỗi trường tìm thấy. Mình tạo file cu.json cố tình nhồi các trường cũ để xem script bắt được gì.

== cu.json
  [CU] inbound 'in' con truong sniff: deprecated tu 1.11, go bo o 1.13 -> dung rule action sniff/resolve
  [CU] inbound 'in' con truong domain_strategy: deprecated tu 1.11, go bo o 1.13 -> dung rule action sniff/resolve
  [LOI] inbound 'in' nghe 0.0.0.0 ma khong co users
  [CU] outbound 'block' kieu block: deprecated tu 1.11, go bo o 1.13 -> rule action reject/hijack-dns
  [CU] route.geoip: da go bo o 1.12 -> rule_set
  [CU] rule #0 dung geosite: da go bo o 1.12 -> rule_set
  [CU] rule #0 viet outbound khong co action: kieu truoc 1.11, tai lieu ghi outbound da chuyen vao rule action
  [LOI] rule #0 tro toi outbound khong ton tai: direct
  [CU] dns server 'a' dung address: dinh dang cu, go bo o 1.14
  KET QUA: KHONG DAT | so muc cu: 10

Đây là kết quả rút gọn, mình bỏ vài dòng lặp, các dòng còn lại giữ nguyên văn. Tổng cộng script đếm 10 mục thuộc kiểu cũ và 2 lỗi cấu hình. Lỗi nghe 0.0.0.0 mà không có users là lỗi bảo mật, không phải lỗi phiên bản.

Chuẩn bị phiên bản, credential và môi trường kiểm thử cho sing-box proxy

Trước khi sửa một dòng cấu hình, anh em cần bốn thứ: số phiên bản, thông tin proxy, một trang đích để thử và một chỗ ghi log. Thiếu một trong bốn, kết quả thử khó đọc.

Thông tin proxy cần có

Mỗi proxy upstream cần năm thông tin: loại (HTTP hay SOCKS5), địa chỉ, cổng, tên đăng nhập và mật khẩu. Proxy thường được cấp dạng ip:port:user:pass, trong khi sing-box đòi từng trường riêng trong JSON. Bài định dạng proxy giải thích cách tách chuỗi này.

Nếu nhà cung cấp xác thực bằng IP, bỏ hai trường username, password và thêm IP máy chạy sing-box vào danh sách cho phép. Bài xác thực proxy bằng IP whitelist hay user password so sánh hai cách này.

Tên miền hay IP trong trường server

Trường server của outbound nhận cả IP lẫn tên miền. Trang Dial Fields ghi rằng từ 1.14.0, outbound hoặc endpoint dùng tên miền ở địa chỉ máy chủ thì cần domain_resolver. Trường này có thể bỏ khi chỉ có một máy chủ DNS được cấu hình, và có thể thay bằng route.default_domain_resolver.

Mình khuyên dùng IP trong lab, như 127.0.0.1, để tránh phải cấu hình DNS. Khi dùng proxy thật có tên miền, thêm domain_resolver ngay, kẻo bản mới từ chối khởi động. Script của mình báo cảnh báo khi gặp tên miền mà thiếu trường này.

Môi trường lab

Mình dùng bốn thành phần. Thứ nhất là sing-box với inbound mixed nghe 127.0.0.1:2080. Thứ hai là một proxy HTTP giả ở cổng 8902 và một proxy SOCKS5 giả ở cổng 8903, đều có tài khoản. Thứ ba là trang đích ở cổng 8901 trả về đường dẫn và người gọi. Thứ tư là file log JSON của hai proxy giả.

Hai proxy giả và trang đích là script Python dùng chung với các bài proxy trước trong chuỗi, không phải sản phẩm thương mại. Các tên miền đuôi .test chỉ proxy giả phân giải được, nên nếu kết nối thành công thì tên miền đã đi qua proxy.

Tài khoản cho cổng vào

Inbound mixed có trường users, là danh sách username và password. Trang Mixed ghi: nếu danh sách trống thì không cần xác thực. Cổng không xác thực chỉ nên nghe 127.0.0.1. Script của mình báo LOI khi inbound nghe địa chỉ khác loopback mà không có users.

Trường listen là bắt buộc theo trang Listen Fields. Đừng bỏ trống rồi đoán giá trị mặc định, hãy ghi rõ 127.0.0.1.

Ghi lại điều kiện thử

Mỗi lần thử, anh em ghi bốn dòng: số phiên bản, tên file cấu hình, ngày giờ và kết quả lệnh check. Sau vài tuần, khi một tuyến bỗng hỏng, bản ghi này cho biết cấu hình nào từng chạy. Việc này tốn một phút nhưng cứu được nhiều giờ dò lỗi, nhất là khi cập nhật sing-box sang bản mới và schema đã đổi.

Cấu hình sing-box proxy tối thiểu: inbound mixed, outbound HTTP và SOCKS

Phần này đưa file cấu hình đầy đủ cho lab rồi giải thích từng khối. Các khóa đã kiểm theo trang tài liệu tương ứng và theo script.

File cấu hình đầy đủ

{
  "log": {"level": "info", "timestamp": true},
  "inbounds": [
    {"type": "mixed", "tag": "mixed-in", "listen": "127.0.0.1", "listen_port": 2080,
     "users": [{"username": "lab", "password": "doi-mat-khau-lab"}]}
  ],
  "outbounds": [
    {"type": "socks", "tag": "up-socks", "server": "127.0.0.1", "server_port": 8903, "version": "5",
     "username": "user1", "password": "doi-mat-khau-lab"},
    {"type": "http", "tag": "up-http", "server": "127.0.0.1", "server_port": 8902,
     "username": "user1", "password": "doi-mat-khau-lab"},
    {"type": "direct", "tag": "direct"}
  ],
  "route": {
    "rules": [
      {"action": "sniff"},
      {"domain": ["shop-a.test"], "action": "route", "outbound": "up-http"},
      {"domain_suffix": [".noi-bo.test"], "action": "route", "outbound": "direct"},
      {"domain_keyword": ["chan"], "action": "reject"}
    ],
    "final": "up-socks"
  }
}

Khi dùng proxy thật, thay 127.0.0.1 và cổng bằng thông tin nhà cung cấp. Mật khẩu trong file là chữ thường, nên đặt quyền đọc file chỉ cho tài khoản chạy sing-box.

Giải thích inbound mixed

Inbound mixed nhận cả SOCKS4, SOCKS4a, SOCKS5 và HTTP trên cùng một cổng. Công cụ thu thập dữ liệu có thể trỏ HTTP hoặc SOCKS vào 127.0.0.1:2080 tùy thư viện, không cần mở hai cổng. Trường tag đặt tên cho inbound để rule gọi lại bằng trường inbound khi cần.

Trường set_system_proxy tự đặt proxy hệ thống khi khởi động và dọn khi dừng. Bài này để mặc định false. Bật nó sẽ đổi cấu hình proxy của cả máy, không phù hợp với thử nghiệm.

Giải thích hai outbound

Outbound http được tài liệu mô tả là máy khách HTTP CONNECT. Hai trường server và server_port là bắt buộc. Username và password dùng cho xác thực Basic. Trường path và headers chỉ dùng được ở HTTP phiên bản 1, và trường version của HTTP chỉ có từ 1.15.0.

Outbound socks là máy khách SOCKS4, 4a và 5. Phiên bản mặc định là 5. Trang outbound SOCKS cũng có trường network nhận tcp hoặc udp, mặc định bật cả hai, và trường udp_over_tcp. Mình để mặc định.

Outbound đầu tiên và trường final

Trường route.final là tag outbound mặc định. Trang Route ghi nếu để trống thì dùng outbound đầu tiên trong danh sách. Trong file trên mình ghi final là up-socks cho rõ, đồng thời xếp up-socks đầu tiên.

Hai cách làm cùng kết quả, nhưng ghi final tường minh tránh lỗi khi ai đó chèn thêm một outbound lên đầu danh sách. Script cảnh báo khi final để trống.

Nối chuỗi hai proxy bằng detour

Muốn đi qua hai proxy liên tiếp, dùng trường detour của Dial Fields. Trang Dial Fields định nghĩa detour là tag của outbound upstream, và nếu bật thì các trường dial khác bị bỏ qua. Ví dụ dưới nối một proxy SOCKS qua một proxy HTTP phía trước.

"outbounds": [
  {"type": "http", "tag": "buoc-1-http", "server": "127.0.0.1", "server_port": 8902,
   "username": "user1", "password": "doi-mat-khau-lab"},
  {"type": "socks", "tag": "buoc-2-socks", "server": "127.0.0.1", "server_port": 8903,
   "username": "user1", "password": "doi-mat-khau-lab", "detour": "buoc-1-http"}
]

Script xác nhận tag detour tồn tại và file đạt. Mình chưa kiểm tuyến thật, vì chưa chạy sing-box. Theo cách đọc tài liệu, kết nối tới máy chủ buoc-2-socks sẽ đi qua buoc-1-http, nên proxy đầu chỉ thấy địa chỉ của proxy thứ hai, không thấy trang đích.

Nối chuỗi làm tăng độ trễ và tăng điểm hỏng. Chỉ làm khi có lý do rõ ràng, ví dụ proxy thứ hai chỉ cho kết nối từ dải IP của proxy thứ nhất.

Kiểm IP thoát cho từng outbound

Với mỗi outbound, anh em gọi một trang trả về IP người gọi qua cổng 2080 và ghi lại giá trị. Hai outbound mua từ hai nhà cung cấp phải cho hai IP khác nhau, và khác IP nhà mạng của máy. Nếu hai giá trị trùng nhau, rule đang gửi nhầm cả hai tên miền vào một outbound.

Lặp lại phép thử sau mỗi lần sửa rule. Một thay đổi nhỏ về thứ tự có thể đẩy tên miền sang đường khác mà không có lỗi nào hiện ra.

Rule chọn đích cho sing-box proxy theo tên miền

Rule chọn đích theo thứ tự trên xuống

Rule chọn đích theo thứ tự trên xuống

Rule là nơi sing-box quyết định đường ra. Phần này giải thích cách đọc rule, các kiểu khớp tên miền, và thứ tự xét.

Các kiểu khớp tên miền

Trang Route Rule có bốn kiểu khớp tên miền cơ bản. Trường domain khớp tên miền đầy đủ. Trường domain_suffix khớp phần đuôi. Trường domain_keyword khớp theo từ khóa nằm trong tên. Trường domain_regex khớp theo biểu thức chính quy.

Tài liệu chỉ mô tả ngắn từng kiểu, không cho ví dụ về dấu chấm đầu trong domain_suffix. Vì vậy mình không khẳng định ".noi-bo.test" có khớp "noi-bo.test" hay không. Cách an toàn: ghi cả hai giá trị, hoặc kiểm bằng log trên bản đang chạy.

Cách các trường kết hợp

Trang Rule viết logic của rule mặc định: nhóm tên miền và IP, nhóm cổng, nhóm nguồn, nhóm cổng nguồn và các trường khác. Các nhóm nối nhau bằng "và", các giá trị trong một nhóm nối nhau bằng "hoặc". Tức một rule vừa có domain_suffix vừa có port thì kết nối phải thỏa cả hai nhóm.

Trường invert đảo kết quả khớp. Rule loại logical cho phép ghép nhiều rule con bằng chế độ and hoặc or. Mình không dùng rule logical trong lab.

Sniff: khi nào cần biết tên miền

Nếu ứng dụng gửi tên miền cho proxy, như curl với socks5h hoặc HTTP CONNECT, sing-box biết tên miền ngay. Nếu ứng dụng tự phân giải và gửi IP, rule theo tên miền không có gì để khớp. Khi đó action sniff giúp. Trang Protocol Sniff liệt kê giao thức nghe lén được: http lấy Host, tls lấy Server Name, quic lấy Server Name.

Action sniff mặc định bật mọi sniffer và chờ 300ms. Nó là action không cuối, nên đặt ở đầu danh sách rule để các rule sau có tên miền. Từ 1.11, cách này thay trường sniff trong inbound.

Thứ tự xét rule và mô phỏng

Theo cách đọc của mình, sing-box xét rule từ trên xuống, action cuối đầu tiên khớp sẽ quyết định, nếu không rule nào khớp thì dùng final. Trang tài liệu mình đọc không viết câu này nguyên văn, nên mình đánh dấu đây là suy luận cần xác nhận bằng log. Script mô phỏng làm đúng như vậy với ba kiểu khớp domain, domain_suffix, domain_keyword và trường port.

== moi.json
  [OK] inbound 'mixed-in' chi nghe 127.0.0.1:2080
  KET QUA: DAT | so muc cu: 0
  mo phong shop-a.test:80               rule #1 -> route up-http
  mo phong api.noi-bo.test:443          rule #2 -> route direct
  mo phong noi-bo.test:443              khong rule nao khop -> final 'up-socks'
  mo phong trang-chan.test:443          rule #3 -> reject
  mo phong shop-b.test:443              khong rule nao khop -> final 'up-socks'

Dòng thứ ba cho thấy bẫy: giá trị ".noi-bo.test" trong script không khớp tên miền trần noi-bo.test, vì script so sánh đuôi chuỗi thuần túy. Với sing-box thật, anh em phải kiểm riêng. Mô phỏng này là mô hình đọc tài liệu của mình, không thay được bước chạy thật.

Action reject và hijack-dns

Action reject thay cho outbound block cũ. Trường method nhận default hoặc drop. Với kết nối TUN, default trả TCP RST cho TCP và ICMP port unreachable cho UDP. Với kết nối không qua TUN, như cổng mixed của lab, tài liệu ghi kết nối chỉ bị đóng. Tùy chọn no_drop ghi rằng nếu không bật thì method tạm đổi thành drop sau 50 lần kích hoạt trong 30 giây.

Action hijack-dns thay outbound dns cũ, chuyển các truy vấn DNS vào mô-đun DNS của sing-box. Bài không đụng DNS, nên không dùng action này.

Một kịch bản thu thập dữ liệu cụ thể

Giả sử anh em đo giá trên hai website mà mình được phép thu thập, gọi là shop-a và shop-b. Website đầu hiển thị giá theo vùng nên cần IP Việt Nam. Website sau không phân biệt vùng, dùng proxy datacenter rẻ hơn. Mạng nội bộ của công ty cần đi thẳng.

Với sing-box, anh em khai hai outbound, viết ba rule theo tên miền và đặt final cho phần còn lại. Công cụ thu thập dữ liệu chỉ trỏ vào một cổng duy nhất. Khi đổi nhà cung cấp cho một website, anh em sửa một outbound, không đụng tới mã của công cụ.

Đặt tag có nghĩa và liên hệ với no_proxy

Tag là khóa nối rule với outbound, nên nên đặt tag mô tả được việc: up-vn-tinh, up-dc-share, direct. Log của sing-box in tag, nên tag tốt giúp đọc log nhanh. Tag trùng sẽ làm lỗi, script của mình bắt trường hợp này.

Nhiều công cụ còn đọc biến môi trường no_proxy để bỏ qua proxy với một số tên miền. Hai lớp này bổ sung cho nhau: no_proxy chặn từ phía ứng dụng trước khi kết nối tới cổng 2080, còn rule direct chặn ở phía sing-box. Bài no_proxy là gì giải thích cách đặt biến này.

Chạy đối chứng, đọc log và kiểm tuyến sing-box proxy

Phần này nói cách kiểm trên máy thật. Mình chưa chạy sing-box, nên các bước là kế hoạch kèm kết quả cần thấy, dựa trên tài liệu.

Bước một: kiểm cú pháp

Trang giới thiệu cấu hình liệt kê ba lệnh tiện ích: sing-box check, sing-box format và sing-box merge. Lệnh check đọc file mà không mở cổng, giống v2ray test. Anh em chạy sing-box check -c config.json và đọc thông báo lỗi nếu có.

Lệnh format có tùy chọn -w để ghi đè file theo định dạng chuẩn, và -D trỏ tới thư mục chứa nhiều file. Lệnh merge gộp nhiều file thành một. Chia cấu hình thành nhiều file giúp tách phần bí mật ra khỏi phần chung.

Bước hai: kiểm bằng curl

Kiểm tuyến bằng curl và log hai đầu

Kiểm tuyến bằng curl và log hai đầu

Chạy sing-box run -c config.json, rồi gọi curl qua cổng 2080 cho từng tên miền. Tên miền đuôi .test chỉ proxy giả phân giải được, nên dùng curl với socks5h hoặc HTTP để tên miền đi tới proxy.

curl -x socks5h://lab:doi-mat-khau-lab@127.0.0.1:2080 http://shop-a.test:8901/ping
curl -x http://lab:doi-mat-khau-lab@127.0.0.1:2080 http://shop-b.test:8901/ping
curl -x socks5h://lab:doi-mat-khau-lab@127.0.0.1:2080 http://trang-chan.test:8901/ping

Dòng đầu cần đi qua outbound up-http theo rule thứ hai. Proxy HTTP giả sẽ ghi một lệnh CONNECT với địa chỉ shop-a.test:8901. Dòng hai không khớp rule nào nên đi final, tức proxy SOCKS5 giả. Dòng ba bị reject, curl nhận lỗi kết nối.

Bước ba: đọc log

Khối log nhận bốn trường: disabled, level, output và timestamp. Mức level nhận trace, debug, info, warn, error, fatal, panic. Trường output là tệp, và tài liệu ghi rõ khi bật output thì log không còn in ra console.

Mức info đủ để thấy mỗi kết nối đi qua outbound nào. Khi nghi rule sai, nâng lên debug trong vài phút rồi hạ xuống. Nếu bật find_process trong route, log còn ghi tiến trình gọi, nhưng tính năng đó chỉ hỗ trợ Linux, Windows và macOS.

Kế hoạch tám ca đối chứng

Bảng: Kế hoạch tám ca đối chứng

Ca

Việc làm

Kết quả cần thấy

1

curl socks5h tới shop-a.test

Proxy HTTP giả ghi CONNECT shop-a.test

2

curl socks5h tới shop-b.test

Proxy SOCKS5 giả ghi tên miền, không phải IP

3

curl socks5 (không h) tới shop-b.test

Lỗi phân giải tên ở phía curl, proxy không ghi gì

4

curl tới api.noi-bo.test

Đi thẳng, không proxy nào ghi

5

curl tới trang-chan.test

Bị reject

6

Sai mật khẩu ở cổng 2080

Bị từ chối trước rule

7

Sai mật khẩu ở outbound up-socks

Proxy giả ghi sai xác thực

8

Tắt proxy giả HTTP rồi gọi shop-a.test

Lỗi kết nối, không tự chuyển sang final

Mình chưa chạy tám ca này với sing-box. Ca 3 dựa vào một phép đo mình đã chạy với proxy giả: curl --socks5 không có chữ h tự phân giải tên và báo lỗi mã 97 trước khi gửi gì cho proxy. Bài cách dùng SOCKS5 proxy giải thích thêm về socks5 và socks5h. Ca 8 là suy luận, vì tài liệu không nói rule có thử outbound khác khi một outbound lỗi.

Khi kết quả không như dự đoán

Kiểm theo thứ tự cố định. Đầu tiên là phiên bản và lệnh check. Sau đó là tag có khớp không, vì một lỗi chính tả trong outbound làm rule trỏ tới nơi không tồn tại. Tiếp theo là sniff, nếu client gửi IP. Cuối cùng là proxy upstream, bằng log của chính nó.

Nguyên tắc bài V2Ray upstream proxy vẫn đúng ở đây: đọc log ở cả hai đầu. Nếu proxy upstream không ghi nhận gì, kết nối chưa tới đó.

Gỡ cấu hình thử, quản lý bí mật và dùng sing-box proxy thật

Sau lab, dọn sạch là bắt buộc. Trước khi đưa sang việc thật, quản lý bí mật cần làm kỹ hơn lab nhiều.

Gỡ cấu hình thử

Dừng tiến trình sing-box, xóa file cấu hình lab và file log. Nếu từng bật set_system_proxy, kiểm lại cài đặt proxy của hệ điều hành để chắc rằng nó đã được dọn. Nếu dùng TUN ở bài khác, kiểm bảng định tuyến và card mạng ảo.

Xóa tệp thực thi đã tải nếu không dùng lại. Việc này giữ máy gọn và tránh chạy nhầm một bản cũ có trường cấu hình khác.

Quản lý bí mật

Mật khẩu proxy nằm chữ thường trong JSON. Vài thói quen nên có: đặt quyền đọc chỉ cho tài khoản chạy dịch vụ, không đưa file lên kho mã, thay mật khẩu bằng chuỗi giả trước khi gửi nhờ người khác xem lỗi. Nếu nghi lộ, đổi mật khẩu ở trang quản lý proxy và cập nhật file.

Dùng tính năng merge để tách file bí mật khỏi file cấu trúc. File chứa users và mật khẩu outbound đặt riêng, quyền chặt hơn. File route đặt riêng, có thể chia sẻ khi cần xem rule.

Clash API và cổng quản lý

Khối experimental có Clash API với trường external_controller. Trang tài liệu ghi API này bị tắt khi trường để trống. Ví dụ cấu trúc đặt 127.0.0.1:9090, và có một ví dụ khác đặt 0.0.0.0:9090 cùng thư mục giao diện. Nếu mở ra ngoài loopback, đặt secret và hạn chế địa chỉ truy cập.

Với bài này không cần Clash API. Để trống là cách tốt nhất.

Kiểm tra trước khi chạy dài

Checklist trước khi chạy dài

Checklist trước khi chạy dài

  • Bản sing-box đã ghi lại và khớp với trường dùng trong file.
  • sing-box check không báo lỗi, và script soát không còn mục CU.
  • Inbound chỉ nghe 127.0.0.1, hoặc có users nếu nghe mạng nội bộ.
  • Mỗi outbound dùng tên miền đã có domain_resolver.
  • Đã kiểm IP thoát cho từng outbound bằng một yêu cầu thật.
  • Log ở mức info, tệp log có giới hạn dung lượng ở tầng hệ điều hành.
  • Có bản sao file cấu hình đã che mật khẩu.

Nếu cần proxy cho sing-box, anh em có thể mua proxy uy tín tại ProxyVN, gồm proxy dân cư tĩnh Viettel, VNPT, FPT, datacenter Việt Nam và proxy xoay. Các gói hỗ trợ HTTP và SOCKS5 với tài khoản user và mật khẩu.

sing-box chỉ chọn đường ra theo rule. IP thoát và độ ổn định vẫn do proxy upstream quyết định.

sing-box proxy: checklist và câu hỏi thường gặp

Phần cuối trả lời các câu hỏi mà người mới dùng sing-box hay gặp khi nối proxy mua ngoài.

Câu hỏi thường gặp

Chép cấu hình sing-box từ mạng về chạy được không. Phụ thuộc phiên bản. Một file từ bản cũ có thể có trường sniff trong inbound, outbound block hay geosite, những thứ tài liệu ghi đã bị gỡ ở các bản 1.12 và 1.13. Chạy sing-box check và script soát trước khi tin.

Chọn outbound http hay socks cho proxy mua ngoài. Nếu nhà cung cấp cấp cả hai, socks mang được UDP và giữ nguyên tên miền. Outbound http là CONNECT, chỉ mang TCP. Nếu cần UDP, hỏi nhà cung cấp xem lệnh UDP ASSOCIATE có bật không. Bài HTTP và SOCKS5 so sánh hai loại.

Có dùng được xoay vòng nhiều proxy không. Tài liệu mình đọc ở các trang outbound HTTP và SOCKS không mô tả xoay vòng. sing-box có loại outbound selector, tài liệu ghi chỉ điều khiển được qua Clash API hiện tại, và mình chưa đọc loại nào tự xoay vòng nên không đưa vào bài. Với proxy xoay của nhà cung cấp, thường chỉ cần một cổng.

Rule theo tên miền không khớp dù tên đúng thì sao. Kiểm client gửi tên miền hay IP. Nếu gửi IP, thêm action sniff ở đầu danh sách. Kiểm tiếp giá trị domain_suffix có dấu chấm đầu hay không và thử cả hai.

sing-box có thay Proxifier được không. Hai công cụ khác chức năng. sing-box cần ứng dụng trỏ vào cổng của nó, hoặc dùng TUN ở bài khác. Proxifier ép ứng dụng không có ô cài proxy đi qua proxy. Xem bài Proxifier.

Dùng sing-box để vượt chặn của website được không. Bài này không hướng dẫn việc đó. Proxy chỉ đổi IP thoát, không vượt CAPTCHA, không xóa dấu vân tay trình duyệt và không thay được điều khoản của website. Tuân thủ điều khoản và luật là trách nhiệm của người dùng.

sing-box proxy và những điều cần nhớ

sing-box proxy cần ghi rõ phiên bản trước khi chép cấu hình, dùng action route thay trường outbound cũ và đặt domain_resolver khi server là tên miền. Hãy chạy sing-box check và kiểm từng tuyến bằng log. Cần proxy ổn định, liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam cho sing-box proxy.

TIN TỨC LIÊN QUAN