VPS của bạn có admin panel, database và SSH. VPN cho phép laptop và điện thoại của bạn chạm tới chúng một cách riêng tư, mã hoá — với WireGuard và Zerotier, hai công cụ mà mọi shipper nên biết.
← / → để chuyển slide · chuyển EN/VI bên dưới · góc nhìn người vận hành — tư duy nền tảng trước, vài ví dụ nhỏ
Ngay khi deploy, máy của bạn có một IP công khai — mọi scanner, crawler và script trên internet đều nhìn thấy.
VPS của bạn có địa chỉ dạng 203.0.113.10. Bất kỳ ai biết nó — mà bot thì biết hết — đều có thể thử mọi port trên đó.
Mỗi dịch vụ chạy trên một port đều chạm tới được từ mọi nơi: Grafana ở :3000, admin của bạn ở :8080, Postgres ở :5432, SSH ở :22.
Bot liên tục quét internet để tìm admin panel quen mặt và mật khẩu mặc định. Grafana bị lộ sẽ bị tìm thấy trong vài giờ, không phải vài ngày.
Website có thể cứ công khai. Nhưng admin tools, database và SSH chỉ nên chạm tới được từ thiết bị của bạn — và chỉ của bạn.
Chưa có đường hầm — mọi dịch vụ đều đáp lời bất kỳ ai hỏi.
Cùng máy, cùng port — nhưng giờ mỗi máy cũng đáp lời cả bot credential stuffing. Đó là vấn đề mà cả bài này giải quyết.
Attack surface tốt nhất là cái không tồn tại — hãy giữ admin tools của bạn khỏi internet công khai hoàn toàn.
Một ý tưởng, hai việc: một ống dẫn mã hoá và một mạng riêng. Hiểu được điều này, WireGuard so với Zerotier sẽ dễ.
Mọi thứ bạn gửi qua đường hầm thành mớ ký tự không đọc được với bất kỳ ai trên đường dây — ISP, Wi-Fi quán cà phê, ai đang nghe lén. Mã hoá = không ai đọc được lưu lượng của bạn.
Thiết bị của bạn nhận địa chỉ nội bộ (như 10.0.0.2) và có thể chạm tới nhau — và cả VPS của bạn — như thể tất cả cùng cắm vào một LAN ở nhà.
Mạng VPN là một 'overlay': mạng riêng phủ lên internet công khai. Internet mang đường hầm; đường hầm mang bạn.
HTTPS chỉ bảo vệ một tab browser nói chuyện với một site. VPN bảo vệ mọi app trên cả thiết bị của bạn — và thêm cả mạng riêng.
Laptop + điện thoại → đường hầm → mạng riêng → admin của VPS. Internet chỉ thấy một khối mã hoá.
Từ trong đường hầm, VPS chỉ là một hàng xóm trong LAN của bạn — gọi bằng IP riêng, không có port admin công khai nào cả.
Trên mạng chung — quán cà phê, sân bay, khách sạn — lưu lượng rất dễ bị bắt. Đã mã hoá, phần bị bắt cũng vô dụng: toàn ciphertext, không key, không đọc được. Login admin và dữ liệu của bạn không bị nghe lén khi truyền.
Laptop ở quán cà phê và VPS của bạn nằm ở hai mạng khác nhau — không có route giữa chúng. Overlay cho cả hai một địa chỉ trong cùng một mạng riêng, nên 'gọi 10.0.0.1' luôn chạy được, từ mọi nơi, qua mọi kết nối.
Các dải như 10.0.0.0/20 không được định tuyến trên internet công khai — chúng chỉ tồn tại bên trong overlay của bạn. Router nhà bạn cũng làm y hệt với 192.168.x.x.
Trên VPS bạn chạy server của đường hầm (WireGuard hoặc Zerotier). Nó nhận 10.0.0.1, và mọi thiết bị trong đường hầm gọi nó trực tiếp — không DNS, không port công khai cho admin.
Wi-Fi quán, 4G, khách sạn, văn phòng — không quan trọng. Trong đường hầm bạn đang ở cùng một mạng riêng, nên admin panel chỉ là 'http://10.0.0.1:3000'.
Nước đi của người vận hành: đưa sản phẩm ra internet công khai, và mọi thứ bạn quản trị nằm sau đường hầm.
Grafana, admin của app, dashboard nơi bạn điều khiển mọi thứ. Một form login bị lộ là nam châm hút credential stuffing.
Postgres hay Mongo ở :5432/:27017 không bao giờ nên đáp lời người lạ. Nếu có đáp, chúng sẽ đáp lời bot — mà bot đã soạn sẵn SQL.
:22 là port bị quét nhiều nhất trên thế giới. Sau đường hầm, shell của bạn chỉ chạm được từ laptop — không phải từ botnet.
Website, API công khai, tài liệu, checkout — những thứ user cần. Công khai là ổn (và tốt) với chúng. Quy tắc áp cho công cụ, không cho sản phẩm.
Internet chỉ thấy một cánh cửa. Thiết bị của bạn giữ chìa khoá.
Cùng VPS, cùng dịch vụ — giờ chỉ chạm được từ trong đường hầm. Scanner cứ gõ cửa; không có gì bên phía admin đáp lại.
Website, API công khai, tài liệu, checkout. User cần chúng, và HTTPS đã bảo vệ dữ liệu khi truyền. Việc phơi ra ở đây chính là mục đích.
Grafana, admin panel, database, SSH, endpoint backup. Không có người lạ chính đáng nào ở đây. Nếu bạn không gọi tên được ai cần chạm tới nó, hãy giữ nó sau đường hầm.
Nếu người lạ mở được, đó không phải admin panel — đó là lời mời.
Mặc định hiện đại cho đường hầm tự dựng: nhỏ, nhanh, và đủ đơn giản để giữ trong đầu.
Ra đời năm 2013, phát hành năm 2016. Mới hơn OpenVPN, xây trên crypto hiện đại (ChaCha20-Poly1305), và nằm trong kernel Linux — nên rất nhanh.
Toàn bộ protocol chỉ là vài nghìn dòng code có thể audit. Không có config hàng trăm trang đáng sợ — mỗi thiết bị một file INI nhỏ, thế là đủ.
Mỗi thiết bị có một private key (bí mật) và một public key (danh tính). Server chỉ mở cửa cho các public key mà bạn đã bảo nó tin.
Server chạy trên VPS của bạn. Đó là cái giá: kiểm soát hoàn toàn, không ai phục vụ — bạn tự sinh key, tự viết config, và tự giữ an toàn.
Trên VPS: wg genkey cho ra private key của server, cùng public key tương ứng. Mỗi thiết bị tự sinh cặp của mình theo cách tương tự.
Server gán một interface trên subnet riêng — ví dụ 10.0.0.1/20 — nghe trên một port (51820), và liệt kê từng client tin cậy trong section [Peer].
Mỗi [Peer] chứa public key của client và AllowedIPs của nó — địa chỉ riêng duy nhất nó được dùng, ví dụ 10.0.0.2/32. Laptop mới? Thêm một [Peer].
Config của client trỏ tới IP công khai của server (Endpoint = 203.0.113.10:51820), mang public key của server, và tự nhận địa chỉ riêng của mình.
Tải config vào app client. Ngay lập tức laptop của bạn là 10.0.0.2 trên mạng riêng — và 10.0.0.1 (VPS) chạm được bằng địa chỉ nội bộ.
[Interface]
# the VPS: server end of the tunnel
Address = 10.0.0.1/20
ListenPort = 51820
PrivateKey = <server-private-key>
[Peer]
# Alice's laptop — the only client we trust
PublicKey = <alice-public-key>
AllowedIPs = 10.0.0.2/32
Hai section: [Interface] là chính server; [Peer] là một client tin cậy. Thêm client = thêm block [Peer].
[Interface]
# Alice's laptop, inside the tunnel
Address = 10.0.0.2/20
PrivateKey = <alice-private-key>
[Peer]
# the VPS — the server end
PublicKey = <server-public-key>
Endpoint = 203.0.113.10:51820
AllowedIPs = 10.0.0.0/20
[Peer] của client là server. Endpoint = IP công khai của VPS; AllowedIPs = 'mọi thứ trong mạng riêng đều đi qua đường hầm'.
Trên server, một lệnh cho bạn biết mọi peer và xem chúng có thực sự còn sống không.
Vài nghìn dòng code, được nhiều cặp mắt audit. Ít dòng hơn, ít lỗ hổng hơn — và config đủ nhỏ để đọc từ đầu đến cuối.
Crypto hiện đại nằm trong kernel Linux. Bạn sẽ không cảm thấy khác biệt — đơn giản là hiệu năng miễn phí.
Mỗi thiết bị = sinh cặp key, dán public key vào một [Peer], đưa config riêng cho thiết bị đó. Private key không bao giờ đi lộ thiên.
Mười thiết bị, ba mạng, cái điện thoại cứ hay rớt kết nối — lúc đó việc sổ sách key và config bắt đầu giống một công việc.
Cùng ý tưởng mạng riêng, nhưng phần phối hợp được thuê ngoài sang cloud.
Bạn tạo một mạng Zerotier trên cloud và nhận một ID 16 chữ số, như 914b7c2a5d6e8f30. ID đó là toàn bộ 'server' — không có server nào thuộc về bạn.
Mọi thiết bị chạy client Zerotier và join bằng ID đó. Trong mạng, mọi thiết bị chạm tới được mọi thiết bị khác bằng địa chỉ nội bộ Zerotier của nó.
Cloud của Zerotier đóng vai danh bạ: nó biết ai trong mạng và giới thiệu các thành viên với nhau. Sau phần giới thiệu, lưu lượng đi thẳng thiết bị đến thiết bị.
Thành viên chủ động gọi ra cloud và gọi nhau — NAT traversal xử lý các trường hợp khó, có relay cloud làm phương án dự phòng. Không có gì đi vào — không bao giờ.
Network ID lấy từ admin console của Zerotier. Đó là toàn bộ việc cài đặt trên máy này.
Sau khi cloud giới thiệu hai thành viên, lưu lượng của họ đi peer-to-peer, mã hoá. Cloud thấy ai đang nói chuyện với ai — nhưng không thấy nội dung.
Sau router gia đình và 4G, các thiết bị thường vẫn tự đục được đường nối trực tiếp với nhau. Khi không được, relay của Zerotier gánh lưu lượng — chậm hơn chút, vẫn riêng tư.
Danh tính các thành viên nằm trong cloud của Zerotier, quản lý qua web console. Tiện lợi — nhưng cũng là một niềm tin nữa phải cân nhắc khi quyết định.
Console cho phép cho phép/từ chối từng thành viên, hoặc cả subnet. Trục xuất một laptop = gạt một công tắc trên trình duyệt.
Cùng đích đến — một mạng riêng tư, mã hoá. Hai cách vận hành rất khác nhau.
Cùng một mạng riêng, hai mô hình vận hành.
| WireGuard | Zerotier | |
|---|---|---|
| Ai phối hợp | Bạn — server trên VPS của bạn | Cloud của Zerotier |
| Chạy trên | VPS của bạn, module kernel | app client + cloud của họ |
| Khối lượng config | một file INI nhỏ mỗi thiết bị, phải quản lý key | một lệnh join mỗi thiết bị |
| Port phải mở | một port (ví dụ 51820/udp) trên VPS | không — chỉ đi ra |
| Gỡ một thiết bị | xóa block [Peer] của nó | một công tắc trong web console |
| Hợp với | một VPS + máy của bạn, kiểm soát hoàn toàn | nhiều thiết bị, setup nhanh, không port |
Bạn tự host và tự quản lý key. Kiểm soát và đơn giản tối đa — server là một chương trình nhỏ trên VPS của bạn, và mọi quyết định tin tưởng đều do bạn.
Phối hợp cloud có quản lý, ít config hơn. Bạn đổi một chút kiểm soát và một phụ thuộc bên ngoài để lấy setup gần như bằng không và một console quản lý thành viên.
Chiến mã cũ, cực kỳ phổ biến — bạn sẽ gặp nó trong công ty và tutorial cũ. Cùng một việc, nhiều config hơn, nhiều linh kiện hơn. Với một VPS mới trong 2026, hãy bắt đầu bằng WireGuard hoặc Zerotier.
Cả WireGuard và Zerotier đều có app client cho macOS, Linux, iOS và Android. Trên điện thoại thì đơn giản: mở app, tải config (hoặc join ID), bật lên.
Một VPS + laptop và điện thoại của bạn? WireGuard — nhỏ, nhanh, và hoàn toàn của bạn. Hàng chục thiết bị, không được mở port, hoặc bạn chỉ muốn xong ngay hôm nay? Zerotier.
VPN là cánh cửa sau an toàn cho hạ tầng của bạn — internet nhận sản phẩm của bạn, và công cụ của bạn ở lại sau đường hầm.
Website công khai, admin riêng tư: chọn WireGuard hoặc Zerotier, đặt đường hầm lên VPS, và đừng bao giờ mở port admin ra thế giới nữa.