Tại sao bạn nên dùng sshuttle thay vì VPN truyền thống?
Hãy tưởng tượng bạn đang ngồi cafe và cần truy cập gấp vào dải IP nội bộ 10.10.x.x của công ty để fix bug. Thông thường, bạn phải loay hoay kết nối Cisco AnyConnect hoặc OpenVPN. Nhưng nếu server VPN lỗi hoặc bạn chưa được cấp quyền thì sao?
Đó là lúc sshuttle tỏa sáng. Nó là giải pháp “mì ăn liền” hoàn hảo cho anh em DevOps và SysAdmin. Bạn không cần cài đặt server-side phức tạp, không cần quyền root trên remote server, và cũng chẳng cần cấu hình certificate phiền hà.
Trước đây, mình thường dùng ssh -D để tạo SOCKS proxy. Tuy nhiên, nhược điểm lớn nhất là bạn phải cấu hình proxy thủ công cho từng trình duyệt hoặc ứng dụng. sshuttle giải quyết triệt để vấn đề này bằng cách tạo ra một tunnel trong suốt (transparent proxy). Toàn bộ traffic sẽ tự động được định tuyến qua SSH mà không cần bạn phải chỉnh sửa thêm bất kỳ cài đặt nào trong ứng dụng.
Những điểm cộng đáng giá của sshuttle
- Cài đặt một bên: Chỉ cần cài trên máy cá nhân của bạn. Server từ xa chỉ cần có Python 3.6 trở lên là đủ.
- Định tuyến thông minh: Nó can thiệp trực tiếp vào bảng routing (iptables/nftables) trên máy local để điều hướng gói tin.
- Hỗ trợ DNS: Truy cập các domain nội bộ như
gitlab.company.localcực kỳ dễ dàng. - Cơ chế truyền tải tối ưu: sshuttle không đơn thuần bọc gói tin TCP vào TCP (gây hiện tượng sụt giảm băng thông). Nó chuyển đổi các luồng dữ liệu một cách thông minh để giữ tốc độ ổn định nhất có thể.
Cài đặt nhanh trong 1 nốt nhạc
Để sshuttle hoạt động, bạn bắt buộc phải có quyền sudo trên máy local. Phía server, chỉ cần một tài khoản SSH thông thường là bạn đã có thể bắt đầu.
Dành cho Linux (Ubuntu/Debian/Fedora):
# Ubuntu/Debian
sudo apt update && sudo apt install sshuttle -y
# Fedora/CentOS
sudo dnf install sshuttle -y
Dành cho macOS:
brew install sshuttle
Sau khi cài xong, hãy gõ sshuttle --version. Nếu thấy hiện phiên bản (thường là 1.x.x) là bạn đã sẵn sàng.
Các kịch bản sử dụng thực tế
Dưới đây là 3 lệnh mà mình hay dùng nhất trong công việc hàng ngày.
1. Chỉ truy cập dải mạng nội bộ (Khuyên dùng)
Nếu bạn chỉ muốn truy cập các server trong dải 192.168.1.0/24 và vẫn muốn lướt Facebook bằng mạng nhà cho nhanh, hãy dùng lệnh:
sudo sshuttle -r user@remote-server-ip 192.168.1.0/24
Lúc này, chỉ traffic đến dải 192.168.1.x mới đi qua tunnel. Các traffic khác vẫn đi qua internet bình thường.
2. Chế độ Full VPN (0/0)
Nếu bạn muốn ẩn danh hoàn toàn hoặc truy cập các dịch vụ bị chặn địa lý, hãy đẩy toàn bộ traffic qua server:
sudo sshuttle -r user@remote-server-ip 0/0
sshuttle rất khôn ngoan. Nó sẽ tự động loại trừ IP của chính server SSH ra khỏi bảng routing để tránh bị lặp vòng lặp vô tận (connection loop).
3. Giải quyết bài toán DNS nội bộ
Nhiều khi bạn nhớ IP nhưng không nhớ tên miền, hoặc ngược lại. Để phân giải được các domain kiểu db.staging.internal, hãy thêm flag --dns:
sudo sshuttle --dns -r user@remote-server-ip 10.0.0.0/8
Mẹo tối ưu và kiểm tra kết nối
Làm sao biết tunnel đã chạy chưa? Đừng đoán, hãy kiểm tra bằng số liệu thực tế.
Kiểm tra IP và Ping
Mở một terminal khác và thử curl ifconfig.me. Nếu kết quả trả về IP của server từ xa thay vì IP nhà bạn, nghĩa là bạn đã thành công. Tiếp theo, hãy thử ping một máy ảo trong mạng nội bộ mà bình thường không thể thấy:
ping 10.0.0.50
Xử lý khi tốc độ chậm
Vì chạy trên nền SSH (TCP), tốc độ của sshuttle thường đạt khoảng 70-80% so với băng thông SSH gốc. Nếu thấy lag, hãy thử bật chế độ verbose để debug:
sudo sshuttle -v -r user@remote-server-ip 10.0.0.0/24
Nếu server báo thiếu Python, hãy SSH vào server đó và chạy sudo apt install python3. Đây là lỗi phổ biến nhất khiến sshuttle không thể khởi tạo script phía server.
Kết luận
sshuttle không sinh ra để thay thế hoàn toàn các hệ thống VPN doanh nghiệp cho hàng trăm người. Tuy nhiên, với cá nhân làm kỹ thuật, đây là “vũ khí” cực nhanh để xử lý công việc từ xa. Nó gọn nhẹ, an toàn và cực kỳ linh hoạt cho mọi nhu cầu SSH Tunneling hiện đại.

