Tailscale SOCKS5 proxy: userspace networking không cần TUN
Tailscale SOCKS5 proxy là chế độ userspace networking, trong đó tailscaled chạy như một cổng SOCKS5 hoặc HTTP thay vì tạo card mạng TUN. ProxyVN đọc tài liệu Tailscale ngày 27/10/2026, ghi lại lệnh khởi động, cách trỏ ứng dụng và kết quả đối chứng bằng proxy giả. Bài không nhầm chế độ này với exit node.
Tailscale SOCKS5 proxy: tác vụ cụ thể và ranh giới với bài đã có
Tailscale là mạng riêng ảo dựng trên WireGuard. Mỗi máy trong mạng, gọi là tailnet, có một địa chỉ riêng và nói chuyện được với máy khác dù nằm sau NAT. Thông thường Tailscale tạo một card mạng ảo trên hệ điều hành để mọi ứng dụng tự đi qua.
Có nơi không tạo được card mạng ảo, như một số nền tảng container. Tài liệu Tailscale gọi cách giải quyết là chế độ userspace networking. Bài này chỉ bàn chế độ đó, ở góc nhìn của người cần một cổng SOCKS5 cục bộ.
Bài này khác các bài đã có thế nào
ProxyVN đã có bài proxy và VPN khác gì nhau và bài dùng VPN và proxy cùng lúc, nói chung về hai loại công cụ. Bài cách dùng SOCKS5 proxy nói về SOCKS5 nói chung.
Bài này hẹp hơn nhiều. Nó chỉ hỏi: làm sao để một ứng dụng đơn lẻ, trong môi trường không có TUN, đi qua tailnet bằng cổng SOCKS5 của tailscaled, và làm sao kiểm chứng rằng nó thật sự đi qua.
Hai thứ dễ nhầm với nhau
Thứ nhất là userspace networking: không có card mạng ảo, ứng dụng chọn dùng cổng SOCKS5 hoặc HTTP, và chỉ ứng dụng nào được trỏ vào cổng mới đi qua tailscaled. Thứ hai là exit node: một máy trong tailnet được chọn để đẩy toàn bộ lưu lượng Internet của máy khác qua nó. Hai thứ giải quyết hai việc khác nhau.
Phần sau của bài có bảng so sánh chi tiết. Điểm cần nhớ ngay: userspace networking không tự biến máy anh em thành "đi ra Internet bằng IP của máy khác".
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 tailscaled và chưa dùng tài khoản Tailscale nào. Mọi lệnh Tailscale trong bài lấy từ tài liệu chính thức. Phần mình đã chạy là hai script Python và curl: một proxy giả thay cho cổng của tailscaled, và một bảng kiểm biến môi trường proxy. Kết quả ghi nguyên văn ở các phần sau.
Dùng userspace networking làm Tailscale SOCKS5 proxy theo hỗ trợ hiện hành
Trang tài liệu chế độ userspace networking mở đầu bằng lý do: Tailscale trên Linux thường dùng thiết bị /dev/net/tun để tạo đường hầm như một card mạng bình thường. Không phải hệ nào cũng có thiết bị này, ví dụ một số nền tảng container như Heroku và Google Cloud Run.
Ở những nơi đó, tailscaled chạy như một cổng SOCKS5 hoặc HTTP để các tiến trình khác trong container kết nối qua. Đây là toàn bộ ý tưởng.
Phiên bản hỗ trợ
Tài liệu ghi rõ hai mốc. Userspace networking với SOCKS5 có từ Tailscale v1.8 trở lên. Cổng HTTP có từ v1.16 trở lên. Máy cài bản cũ hơn phải cập nhật. Chạy tailscale version để biết bản thật, đừng đoán.
Mốc thứ ba liên quan đến phần phân biệt: exit node yêu cầu cả máy exit node và máy dùng nó chạy v1.20 trở lên.
SOCKS5 hay HTTP
Tài liệu viết: SOCKS5 là proxy tổng quát, làm việc với mọi loại lưu lượng. HTTP chỉ dành cho giao thức HTTP, tức trang web và HTTPS. Nếu ứng dụng của anh em nói SSH, cơ sở dữ liệu hay giao thức khác, chọn SOCKS5. Nếu chỉ lấy trang web và công cụ chỉ hỗ trợ proxy HTTP, chọn cổng HTTP.
Hai loại này có thể dùng chung một cổng. Dòng lệnh ví dụ của tài liệu truyền cùng localhost:1055 cho cả hai tham số, và tài liệu nói rõ có thể dùng SOCKS5 và HTTP trên cùng một cổng.
Lệnh khởi động
Lệnh mẫu của tài liệu gồm hai bước. Bước đầu chạy tailscaled với chế độ userspace và hai cổng. Bước hai đăng nhập tailnet bằng auth key.
tailscaled --tun=userspace-networking --socks5-server=localhost:1055 --outbound-http-proxy-listen=localhost:1055 &
tailscale up --auth-key=<your-auth-key>
Tham số --tun=userspace-networking dùng một giá trị đặc biệt thay cho tên thiết bị TUN. Trang tham chiếu tailscaled mô tả giá trị này là "magic value" để không dùng hỗ trợ của nhân và làm mọi việc trong tiến trình. Tham số --socks5-server chạy máy chủ SOCKS5 để truy cập tailnet. Tham số --outbound-http-proxy-listen chạy proxy HTTP tương tự.
Tài liệu khuyến nghị dùng chế độ này với node tạm thời (ephemeral) và auth key. Chế độ này chủ yếu dành cho môi trường serverless.
Cách khác để bật chế độ
Trên Ubuntu, RHEL và các bản dẫn xuất, thêm cờ --tun=userspace-networking vào biến FLAGS trong tệp /etc/default/tailscaled. Ảnh Docker của Tailscale có biến TS_USERSPACE tương đương cờ này. Hai cách này giúp dịch vụ nền tự chạy ở chế độ userspace sau khi khởi động lại.
Trỏ ứng dụng vào cổng
Sau khi Tailscale xác thực xong, ứng dụng kết nối bằng SOCKS5, HTTP hoặc cả hai. Tài liệu chỉ ra rằng nhiều gói mạng đã hỗ trợ sẵn, thường qua biến ALL_PROXY và HTTP_PROXY. Lệnh mẫu như sau.
ALL_PROXY=socks5://localhost:1055/ HTTP_PROXY=http://localhost:1055/ http_proxy=http://localhost:1055/ ./my-app
Tài liệu nói thêm: một số thư viện dùng http_proxy viết thường thay vì HTTP_PROXY, và anh em có thể phải thử để tìm biến đúng cho ứng dụng của mình. Phần đối chứng bên dưới có một thử nghiệm nhỏ về chính chuyện này.
Truy cập SSH khi không có TUN
Trang tham chiếu CLI có ghi chú về SSH. Khi máy ở chế độ userspace networking và không có đường nối trực tiếp, hãy dùng tailscale ssh thay cho ssh thường. Lệnh này dựng ProxyCommand đi qua tailscaled cục bộ. Cách này khác với việc cấu hình ssh dùng SOCKS5, và bài SSH ProxyJump cũng là cách đi qua máy trung gian.
Chuẩn bị phiên bản, auth key và môi trường kiểm thử cho Tailscale SOCKS5 proxy
Một bài kiểm thử có ích cần biết bản đang chạy, danh tính của node và đường dẫn để hoàn nguyên. Phần này đi qua từng thứ.
Auth key
Auth key cho phép đăng ký node mà không cần mở trình duyệt. Trang auth key viết rằng key xác thực thiết bị như chính người tạo key. Nếu gắn tag vào key, thiết bị sau khi đăng nhập sẽ mang danh tính của tag.
Có hai loại. Key dùng một lần chỉ kết nối một thiết bị một lần, và Tailscale tự thu hồi sau khi dùng. Key dùng lại kết nối nhiều thiết bị. Tài liệu cảnh báo mạnh về loại thứ hai: nếu bị đánh cắp thì rất nguy hiểm, nên cất trong kho khóa chuyên dụng.
Hạn dùng của key
Key tự hết hạn sau số ngày đặt khi tạo, từ một đến 90 ngày. Nếu không đặt thì dùng tối đa 90 ngày. Quan trọng hơn: key hết hạn không làm thiết bị đã dùng nó bị mất quyền. Thiết bị vẫn hợp lệ cho đến khi node key của nó hết hạn, mặc định sau 180 ngày.
Thu hồi key cũng không gỡ quyền của thiết bị đã đăng ký. Muốn gỡ thiết bị, xóa nó trong trang Machines của bảng quản trị.
Chọn loại key cho lab
Mục Best practices của trang auth key gợi ý: key tạm thời (ephemeral) cho workload ngắn hạn như container hay hàm Lambda, vì node tạm thời bị xóa tự động khi không hoạt động. Key gắn tag cho máy chủ để ACL áp dụng theo tag. Key duyệt trước (pre-approved) khi mạng bật duyệt thiết bị.
Cho lab, mình chọn một key một lần, ephemeral, gắn tag riêng. Một node tạm thời biến mất khỏi tailnet khi dừng, không để rác. Nếu chạy tailscale logout trên node tạm thời, tài liệu CLI ghi node bị xóa khỏi tailnet ngay.
Lưu trạng thái
Trang tham chiếu tailscaled mô tả cờ --statedir cho thư mục lưu cấu hình, khóa và tệp Taildrop, và cờ --state cho tệp trạng thái. Giá trị mem: nghĩa là không lưu trạng thái và đăng ký như node tạm thời. Cờ --encrypt-state mã hóa tệp trạng thái bằng TPM cục bộ.
Với lab dùng container, mem: là lựa chọn gọn nhất. Khi thoát, trạng thái biến mất cùng container.
Quyền truy cập trong tailnet
Tailscale dùng chính sách quyền truy cập khai báo trong tệp policy. Trang ACL viết rằng ACL mặc định từ chối, có hướng, và chạy ở từng thiết bị. Điểm cần chú ý: nếu tệp chưa có phần acls thì Tailscale áp dụng chính sách mặc định cho phép tất cả.
Tailscale hiện khuyên dùng grants thay ACL cho cấu hình mới, vì ACL sẽ không nhận tính năng mới. Hãy cho node lab chỉ nói chuyện được với đúng máy anh em cần thử, thay vì cả tailnet.
Xem log của tailscaled
Khi lab không chạy như ý, log là nơi đầu tiên cần xem. Trang tham chiếu tailscaled nêu cách lấy log khác nhau theo nền tảng. Cách dùng được ở mọi nơi là lệnh tailscale debug daemon-logs, nhưng lệnh này không đọc lại log cũ. Trên systemd dùng journalctl -u tailscaled --since="1 hour ago". Trên Windows, log nằm ở C:\ProgramData\Tailscale\Logs.
Cờ --verbose=N tăng độ chi tiết, N từ 1 trở lên. Cờ --debug mở một máy chủ gỡ lỗi cục bộ. Trang tài liệu ghi chi tiết của máy chủ này có thể đổi theo thời gian, và nhiều cờ chỉ dành cho gỡ lỗi, nên đừng đưa vào cấu hình chạy lâu dài.
Điều kiện lab
- Một node tailscaled chạy userspace networking, nghe localhost:1055.
- Một máy khác trong tailnet có dịch vụ thử, ví dụ một trang web nội bộ.
- Auth key tạm thời gắn tag lab, có hạn ngắn.
- Một ứng dụng thử, như curl, trỏ vào cổng 1055.
- Một ứng dụng đối chứng, cũng là curl, nhưng không trỏ proxy.
Cấu hình Tailscale SOCKS5 proxy tối thiểu và phạm vi từng thiết lập
Mỗi cờ và mỗi biến môi trường trong tài liệu có một phạm vi riêng. Hiểu phạm vi giúp anh em không mở rộng quyền ngoài ý muốn.
Địa chỉ nghe
Ví dụ của tài liệu nghe localhost:1055. Đó là phạm vi nhỏ nhất. Chỉ tiến trình trên cùng máy mới nối được. Nếu anh em ghi tham số dạng :1055 hoặc 0.0.0.0:1055, cổng mở cho cả mạng mà tài liệu không nhắc tới xác thực SOCKS5 cho cổng này.
Mình không thấy tùy chọn tài khoản cho cổng SOCKS5 của tailscaled trong các trang đã đọc. Vì vậy mình coi cổng này như cổng không xác thực và chỉ cho nghe localhost. Nếu máy dùng chung nhiều người, mọi người trên máy đó đều dùng được cổng.
Bảng phạm vi các thiết lập
Thiết lập |
Phạm vi |
Ghi chú theo tài liệu |
|---|---|---|
--tun=userspace-networking |
Cả tiến trình tailscaled |
Không dùng thiết bị TUN của nhân |
--socks5-server=localhost:1055 |
Ứng dụng nào trỏ vào cổng |
Có từ v1.8 |
--outbound-http-proxy-listen=localhost:1055 |
Ứng dụng nào trỏ vào cổng |
Có từ v1.16 |
ALL_PROXY, HTTP_PROXY |
Tiến trình được đặt biến |
Do thư viện đọc |
tailscale up --auth-key |
Danh tính node |
Key tạm thời cho container |
--exit-node |
Cả máy, mọi lưu lượng Internet |
Khác hẳn userspace |
Bảng này chép từ các trang tài liệu và không có tính năng suy diễn. Cột phạm vi là cách mình diễn giải từ nội dung đó.
Exit node: khác hẳn

Userspace networking và exit node khác nhau
Trang exit node mô tả exit node định tuyến toàn bộ lưu lượng Internet công khai của một thiết bị qua thiết bị khác, bằng tuyến mặc định 0.0.0.0/0 và ::/0, giống VPN thông thường. Để dùng, phải có ba bước chọn tham gia. Thiết bị tự quảng bá làm exit node, quản trị viên cho phép trong bảng quản trị, và thiết bị khách chọn dùng.
Trang tham chiếu CLI có hai cờ liên quan trên lệnh tailscale up: --advertise-exit-node để thiết bị tự mời làm exit node, và --exit-node để chọn một exit node. Cả hai là thiết lập cho cả máy, khác với cổng SOCKS5 theo ứng dụng.
Tiêu chí |
Userspace networking, cổng SOCKS5 |
Exit node |
|---|---|---|
Cách ứng dụng đi vào |
Ứng dụng tự trỏ proxy |
Hệ điều hành đẩy mọi lưu lượng |
Cần card mạng ảo |
Không |
Theo tài liệu là thiết bị chạy Tailscale thông thường |
Phạm vi |
Từng ứng dụng |
Toàn máy |
Ba bước chọn tham gia |
Không |
Có: quảng bá, cho phép, chọn dùng |
Phiên bản tối thiểu ghi trong tài liệu |
v1.8 cho SOCKS5, v1.16 cho HTTP |
v1.20 |
Hàng "Cần card mạng ảo" của exit node mình đọc từ phần điều kiện của trang exit node, nơi liệt kê hệ điều hành hỗ trợ. Trang không nói thẳng exit node cần TUN, nên anh em kiểm trên đúng nền tảng của mình.
Bao giờ cần exit node thay vì cổng SOCKS5
Nếu muốn mọi ứng dụng trên máy đi qua một máy khác trong tailnet, kể cả ứng dụng không hỗ trợ proxy, dùng exit node. Nếu chỉ muốn một vài ứng dụng đi qua, và máy không có TUN, dùng cổng SOCKS5. Nếu cần IP thoát của vùng nào đó theo hợp đồng, một gói proxy thương mại thường tiện hơn, vì exit node chỉ cho IP của chính máy anh em tự dựng.
Chạy đối chứng app qua SOCKS và app đi thẳng với Tailscale SOCKS5 proxy

Đối chứng app qua SOCKS và app đi thẳng
Đây là phần kiểm chứng. Mình chưa chạy tailscaled, nên dùng một proxy giả thay cho cổng của nó và nói rõ điều đó. Kết quả cho thấy cách đối chứng, không phải hành vi của Tailscale.
Thiết kế phép thử
Proxy giả là lab.py, một script Python dùng chung với các bài proxy trước trong chuỗi. Nó mở cổng SOCKS5 ở 1055 không cần tài khoản, giống cổng của tailscaled, và cổng HTTP ở 1056 vì proxy giả không ghép được hai giao thức trên một cổng. Tailscale thật dùng một cổng cho cả hai.
Tên miền đuôi .test chỉ proxy giả phân giải được. Mình chọn thiết kế này để mô phỏng tên chỉ tailscaled biết, như tên máy trong tailnet. Điều này là mô hình hóa do mình chọn, không phải hành vi đã quan sát ở Tailscale.
Năm ca và kết quả thật
Mình gọi cùng một địa chỉ http://shop-a.test:8901/ping bằng curl theo năm cách. Kết quả in nguyên văn như sau.
[A. di truc tiep, khong proxy]
ket qua: [curl exit 6] curl: (6) Could not resolve host: shop-a.test
proxy ghi: khong co dong nao
[B. --socks5 (curl tu phan giai ten)]
ket qua: [curl exit 97] curl: (97) Could not resolve host: shop-a.test
proxy ghi: khong co dong nao
[C. --socks5-hostname (gui ten cho proxy)]
ket qua: {"path": "/ping", "client": "127.0.0.1", "via": "", "ua": "curl/8.13.0"} [curl exit 0]
proxy ghi: ['socks5 CONNECT host=shop-a.test kieu=domain']
[D. ALL_PROXY=socks5h://...]
ket qua: {"path": "/ping", "client": "127.0.0.1", "via": "", "ua": "curl/8.13.0"} [curl exit 0]
proxy ghi: ['socks5 CONNECT host=shop-a.test kieu=domain']
[E. HTTP_PROXY=http://... (cong HTTP)]
ket qua: {"path": "/ping", "client": "127.0.0.1", "via": "http-proxy", "ua": "curl/8.13.0"} [curl exit 0]
proxy ghi: ['http GET host=http://shop-a.test:8901/ping kieu=-']
Ca A là ứng dụng đi thẳng: curl không phân giải được tên, mã thoát 6, proxy không ghi gì. Ca A cho thấy tên này không tồn tại với ứng dụng đi thẳng. Đây là đối chứng quan trọng: nếu ca A thành công, phép thử không chứng minh được gì về proxy.
Điều ca B dạy
Ca B dùng --socks5 không có chữ h. Curl tự phân giải tên trước, thất bại với mã 97 và không gửi gì cho proxy. Ca C dùng --socks5-hostname, curl gửi nguyên tên cho proxy phân giải, và proxy ghi nhận kiểu địa chỉ là domain.
Bài học áp dụng cho Tailscale: nếu anh em muốn truy cập một máy bằng tên mà chỉ phía tailscaled hiểu, cần chế độ gửi tên cho proxy. Với curl là socks5h. Tài liệu Tailscale dùng scheme socks5 trong ví dụ ALL_PROXY, nên hãy thử cả hai trên máy của mình và dùng IP của tailnet nếu cần chắc ăn. Mình không khẳng định hành vi của tailscaled với tên MagicDNS vì chưa chạy.
Ca D và E
Ca D đặt ALL_PROXY=socks5h://127.0.0.1:1055 và curl tự theo biến, không cần cờ. Kết quả giống ca C. Ca E đặt HTTP_PROXY cho cổng HTTP, và proxy ghi một lệnh GET dạng URL đầy đủ, khác với CONNECT. Trang đích cũng nhận tiêu đề X-Lab-Via do proxy giả thêm vào, bằng chứng đi qua proxy.
Thử nghiệm biến môi trường trong Python
Tài liệu nhắc một số thư viện đọc http_proxy viết thường. Mình viết env_matrix.py để xem urllib và requests của Python nhận biến nào trên Windows. Kết quả như sau.
[ALL_PROXY=socks5h://127.0.0.1:1055]
{"urllib": {"all": "socks5h://127.0.0.1:1055"}, "requests_env_proxies": {"all": "socks5h://127.0.0.1:1055"}, "requests_socks_err": "InvalidSchema: Missing dependencies for SOCKS support."}
[HTTP_PROXY=http://127.0.0.1:1056 (viet hoa)]
{"urllib": {"http": "http://127.0.0.1:1056"}, "requests_env_proxies": {"http": "http://127.0.0.1:1056"}}
[http_proxy=http://127.0.0.1:1056 (viet thuong)]
{"urllib": {"http": "http://127.0.0.1:1056"}, "requests_env_proxies": {"http": "http://127.0.0.1:1056"}}
PySocks: chua cai
Có hai phát hiện thật. Thứ nhất, thư viện requests đọc được ALL_PROXY nhưng báo InvalidSchema "Missing dependencies for SOCKS support" vì máy mình chưa cài PySocks. Muốn dùng SOCKS5 với requests phải cài thêm gói hỗ trợ SOCKS. Thứ hai, trên Windows hai cách viết hoa và thường cho cùng kết quả, vì Windows không phân biệt hoa thường ở tên biến môi trường.
Trên Linux và macOS hai tên là hai biến khác nhau. Vì vậy lời khuyên của tài liệu là đặt cả hai dạng. Kết quả của mình chỉ đúng với Windows, và mình không đo trên hệ khác.
Giới hạn của phép thử
Phép thử với proxy giả chỉ chứng minh được ba điều. Ứng dụng đi thẳng không thấy tên chỉ phía proxy biết. Cờ socks5 và socks5h khác nhau ở chỗ ai phân giải tên. Biến môi trường nào được thư viện nhận. Nó không chứng minh gì về tốc độ, độ trễ, bảo mật hay cách tailscaled xử lý tên.
Vì vậy mỗi kết luận trong phần này đều gắn với phép đo cụ thể ở trên, và mọi điều về Tailscale thật đều lấy từ tài liệu hoặc ghi rõ là chưa chạy. Nếu anh em chạy được tailscaled, hãy chạy lại đúng năm ca A đến E với cổng 1055 thật và so kết quả.
Kế hoạch ca trên Tailscale thật
Ca |
Việc làm |
Kết quả cần thấy |
|---|---|---|
1 |
Khởi động tailscaled userspace, tailscale up bằng key tạm |
tailscale status liệt kê các máy trong tailnet |
2 |
curl đi thẳng tới địa chỉ tailnet |
Không tới được, vì không có card mạng ảo |
3 |
curl --socks5-hostname tới cùng địa chỉ |
Tới được trang dịch vụ |
4 |
curl qua cổng HTTP tới cùng địa chỉ HTTP |
Tới được trang dịch vụ |
5 |
Dùng tailscale ping tới máy đích |
Cho biết đường trực tiếp hay qua relay |
6 |
curl qua cổng tới một trang IP công khai |
Ghi lại IP thoát, không đoán trước |
Ca 6 là ca mình không dự đoán. Tài liệu mô tả cổng này để truy cập tailnet, không nói rõ lưu lượng tới đích ngoài tailnet đi đường nào. Anh em chạy và ghi IP thật.
Đọc trạng thái bằng lệnh Tailscale
Trang CLI có ba lệnh hữu ích khi thử. Lệnh tailscale status in bảng các thiết bị, mỗi dòng có địa chỉ Tailscale, tên máy, chủ sở hữu, hệ điều hành và trạng thái kết nối như active; direct hoặc relay. Lệnh tailscale ping hỏi riêng qua Tailscale, cho biết đường đi. Lệnh tailscale nc nối tới một cổng và đọc ghi qua đầu vào ra chuẩn.
Khi dùng chế độ userspace, trang CLI còn ghi lệnh tailscale wait chỉ chờ tailscaled và trạng thái Running, vì không có card mạng vật lý.
Gỡ cấu hình thử, quản lý bí mật và dùng Tailscale SOCKS5 proxy thật
Sau khi thử xong, dọn dẹp và ghi rõ điều kiện khi chuyển sang việc thật.
Hoàn nguyên
Dừng tiến trình tailscaled. Với node tạm thời, chạy tailscale logout để xóa node khỏi tailnet ngay, hoặc để Tailscale tự xóa khi node ngoại tuyến. Xóa tệp trạng thái nếu không dùng mem:. Thu hồi hoặc để hết hạn auth key lab. Nếu đã sửa /etc/default/tailscaled, trả FLAGS về giá trị cũ.
Kiểm biến môi trường trong shell và trong tệp cấu hình ứng dụng. Một biến ALL_PROXY sót lại sẽ khiến ứng dụng tiếp tục trỏ vào cổng 1055 đã đóng, và lỗi hiện ra khó đoán.
Quản lý auth key

Auth key tạm thời và hoàn nguyên
Trang auth key có hướng dẫn cách xử lý key an toàn. Quy tắc chung mình rút ra gồm bốn việc. Không viết key vào tệp trong kho mã. Truyền key qua biến môi trường hoặc kho bí mật. Đặt hạn ngắn và dùng key một lần khi có thể. Thu hồi ngay khi nghi lộ. Nhắc lại cảnh báo của tài liệu: key dùng lại bị đánh cắp là rủi ro lớn.
Auth key trong lệnh tailscale up --auth-key sẽ nằm trong lịch sử dòng lệnh và danh sách tiến trình trên một số hệ. Hãy đọc key từ biến môi trường thay vì gõ thẳng.
Phạm vi dùng thật
Cổng SOCKS5 của tailscaled phù hợp cho tác vụ nhỏ như một công cụ trong container gọi vào dịch vụ nội bộ qua tailnet. Nó không phù hợp để làm proxy chung cho cả nhóm, vì thiếu xác thực ở cổng. Nó cũng không thay được gói proxy cho việc thu thập dữ liệu cần IP ở các vùng khác nhau.
Điều kiện áp dụng
- Bản Tailscale từ v1.8 trở lên cho SOCKS5, v1.16 trở lên cho HTTP.
- Cổng nghe localhost, không phải 0.0.0.0.
- Auth key ngắn hạn, tạm thời, có tag.
- ACL hoặc grants giới hạn node lab chỉ tới đúng máy cần.
- Ứng dụng trỏ vào cổng bằng socks5h hoặc IP tailnet khi cần.
- Đã chạy ca đối chứng ứng dụng đi thẳng và ghi kết quả.
- Có cách dừng và xóa node nhanh.
Tailscale SOCKS5 proxy: checklist và câu hỏi thường gặp
Phần cuối gom checklist và các câu hỏi người mới hay gặp.
Checklist trước khi chạy dài

Checklist trước khi chạy dài
- Chạy tailscale version, ghi số phiên bản.
- Xác nhận máy không có TUN, hoặc có lý do rõ ràng để dùng userspace.
- Khởi động tailscaled với localhost:1055, không mở rộng địa chỉ nghe.
- Kiểm bằng ca đi thẳng và ca qua cổng, ghi cả hai.
- Đặt biến môi trường cả dạng hoa và dạng thường trên Linux.
- Với Python requests, cài thêm gói hỗ trợ SOCKS trước khi dùng ALL_PROXY.
- Xóa node và thu hồi key khi xong.
Nếu cần IP thoát ở Việt Nam thay vì chỉ đi trong tailnet, anh em có thể mua proxy tốc độ cao 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.
Cổng SOCKS5 của tailscaled đưa ứng dụng vào tailnet. Exit node đẩy cả máy ra Internet. Đừng gọi hai việc này bằng một tên.
Câu hỏi thường gặp
Tailscale SOCKS5 proxy có làm IP thoát của tôi đổi không. Tài liệu không nói như vậy. Cổng này để truy cập tailnet. Nếu cần đẩy lưu lượng Internet qua một máy khác, đó là tính năng exit node. Anh em tự đo IP thoát ở ca 6 và ghi lại.
Cổng SOCKS5 của tailscaled có tài khoản không. Trong các trang mình đọc không có tùy chọn tài khoản. Vì vậy chỉ cho nghe localhost và coi như cổng mở với mọi tiến trình trên máy.
Dùng được trong Docker không. Có. Ảnh Docker của Tailscale hỗ trợ tham số TS_USERSPACE tương đương cờ userspace. Tài liệu còn có hướng dẫn riêng cho Heroku, Google Cloud Run và GitHub Actions. Mình không đọc chi tiết các trang đó.
Tại sao ứng dụng của tôi vẫn đi thẳng dù đã đặt ALL_PROXY. Có ba lý do thường gặp. Ứng dụng không đọc biến môi trường. Ứng dụng đọc biến viết thường mà anh em đặt viết hoa trên Linux. Hoặc ứng dụng có cài đặt proxy riêng ghi đè. Kiểm bằng ca đối chứng: nếu ứng dụng vẫn nối được tới đích mà không qua cổng, nó đang đi thẳng.
Tailscale SOCKS5 proxy có mã hóa lưu lượng không. Tailscale xây trên WireGuard nên đường giữa các node trong tailnet được mã hóa. Đoạn từ ứng dụng tới cổng localhost là kết nối nội bộ trên cùng máy, không qua mạng. Mình không đo mã hóa trong lab, đây là suy ra từ cách Tailscale được mô tả.
Nên dùng key dùng một lần hay key dùng lại cho container. Tài liệu gợi ý key tạm thời cho workload ngắn hạn. Key dùng một lần hợp với lab, mỗi lần chạy sinh một key mới. Key dùng lại chỉ nên dùng khi có kho khóa và có kế hoạch xoay vòng, vì mất key là mất cửa vào tailnet.
Khác gì Proxifier. Proxifier ép ứng dụng không có ô cài proxy đi qua proxy ở mức hệ điều hành. Cổng của tailscaled đòi ứng dụng tự trỏ vào. Hai thứ có thể ghép, xem bài Proxifier.
Tailscale SOCKS5 proxy và những điều cần nhớ
Tailscale SOCKS5 proxy chạy bằng userspace networking: cổng nghe localhost, auth key tạm thời, ứng dụng tự trỏ vào, và luôn có ca đối chứng đi thẳng. Không gọi nó là exit node. Cần proxy ổn định cho IP thoát, liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam cho Tailscale SOCKS5 proxy.