→ From Coder to Shipper
From Coder to Shipper · Hạ tầng

VPN — đường hầm riêng tư, mã hoá

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ỏ

Vấn đề

Mọi thứ trên VPS của bạn đều công khai theo mặc đị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.

IP công khai

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 đó.

Port mở là cánh cửa

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.

Scanner không ngủ

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.

Bạn cần một cánh cửa có khoá

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.

Bức tranh

Hiện tại: internet bước thẳng vào nhà

Chưa có đường hầm — mọi dịch vụ đều đáp lời bất kỳ ai hỏi.

bất kỳ ai
Laptop / điện thoại của bạnbạn, đang đăng nhập
→qua internet công khai
VPS — 203.0.113.10 mở toang với cả thế giới
Grafana:3000
Admin của app:8080
Postgres:5432
SSH:22

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.
— khẩu hiệu của người vận hành
01
Phần 1

Tư duy nền tảng — VPN thực ra là gì

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ễ.

Cốt lõi

VPN làm hai việc

(a) Nó mã hoá

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.

(b) Nó dựng một mạng riêng

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à.

Lớp phủ (overlay)

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.

Không giống HTTPS

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.

Bức tranh

Đường hầm riêng tư trên internet công khai

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á.

Laptop10.0.0.2
Điện thoại10.0.0.3
→mã hoá
Đường hầmciphertext chạy trên internet
→10.0.0.0/20
VPS — 10.0.0.1 admin · DB · SSH

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ả.

Hai việc, hai vấn đề được giải

Vì sao mỗi việc quan trọng

Mã hoá trả lời: 'ai đang nghe lén?'

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.

Overlay trả lời: 'làm sao chạm tới được?'

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.

Chi tiết giúp bạn hiểu ngay

IP nội bộ — chiêu y như Wi-Fi nhà bạn

10.x.x.x là dải IP riêng

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.

VPS là đầu cuối

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.

Từ mọi nơi, trên mọi mạng

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'.

02
Phần 2

Vì sao, trên VPS

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.

Sự phân tách

Cái gì thuộc về phía sau đường hầm

Admin panel

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.

Database

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.

SSH

: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.

…và cái gì cứ công khai

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.

Bức tranh

Cửa sau an toàn

Internet chỉ thấy một cánh cửa. Thiết bị của bạn giữ chìa khoá.

công khai
Internet — mọi ngườiuser + scanner
→:443
VPS — website + APImở, đúng như nó phải thế
riêng tư
Laptop / điện thoại của bạnbạn, qua đường hầm VPN
→10.0.0.0/20
VPS — 10.0.0.1
Grafana:3000
Postgres:5432
SSH:22

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.

Quy tắc ngón tay cái

Phơi sản phẩm, giấu công cụ

Phơi ra — sản phẩm

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.

Giữ kín — công cụ

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.
— nhiệm vụ của đường hầm, trong một dòng
03
Phần 3

WireGuard — key của bạn, server của bạn

Mặc định hiện đại cho đường hầm tự dựng: nhỏ, nhanh, và đủ đơn giản để giữ trong đầu.

Công cụ

WireGuard trong một câu

Hiện đại

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.

Đơn giản

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ô hình key-pair

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.

Bạn tự host

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.

Luồng đi

WireGuard, năm bước

  1. 1

    Sinh key

    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ự.

  2. 2

    Config server

    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].

  3. 3

    Một [Peer] cho mỗi client

    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].

  4. 4

    Config client

    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.

  5. 5

    Đường hầm mở

    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ộ.

Một bản phác thảo nhỏ

Config server — /etc/wireguard/wg0.conf

wg0.conf
[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].

Một bản phác thảo nhỏ

Config client — laptop của Alice

alice.conf
[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'.

Kiểm tra

wg show — ai đang ở trên mạng

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.

ops@vps — zsh
# bring the tunnel up (one-time)
$ sudo systemctl enable --now wg-quick@wg0
$ wg show
interface: wg0
public key: 9FqK...serverPublicKey
endpoint: 203.0.113.77:51820
allowed ips: 10.0.0.2/32
last handshake: 3 minutes ago
transfer: 1.2 MiB received, 890 KiB sent
Cái giá thật thà

Điểm mạnh và việc vặt của WireGuard

Nhỏ

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.

Nhanh

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í.

Bạn tự quản lý

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.

Khi nào nó trở nên fiddly

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.

04
Phần 4

Zerotier — LAN ảo dạng dịch vụ

Cùng ý tưởng mạng riêng, nhưng phần phối hợp được thuê ngoài sang cloud.

Công cụ

Zerotier trong một câu

Một mạng là một ID

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.

Join là lên LAN

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ó.

Phối hợp nằm ở cloud

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ị.

Không cần mở port

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ờ.

Một lệnh

Join mạng Zerotier của bạn

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.

ops@vps — zsh
$ zerotier-cli join 914b7c2a5d6e8f30
OK joined 914b7c2a5d6e8f30
$ zerotier-cli peers
914b7c2a5d6e8f30 ONLINE
# your VPS also joined the same network — you can reach it by its internal address now
Bên trong

Cloud làm gì — và không làm gì

Nó là danh bạ, không phải ống dẫn

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.

NAT traversal

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 ở cloud

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.

Quy tắc truy cập

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.

05
Phần 5

Chọn — WireGuard so với Zerotier

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 nhau

WireGuard so với Zerotier

Cùng một mạng riêng, hai mô hình vận hành.

WireGuardZerotier
Ai phối hợpBạn — server trên VPS của bạnCloud của Zerotier
Chạy trênVPS của bạn, module kernelapp client + cloud của họ
Khối lượng configmột file INI nhỏ mỗi thiết bị, phải quản lý keymột lệnh join mỗi thiết bị
Port phải mởmột port (ví dụ 51820/udp) trên VPSkhô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ớimột VPS + máy của bạn, kiểm soát hoàn toànnhiều thiết bị, setup nhanh, không port
Sự tương phản trong tư duy

Mỗi cái một câu

WireGuard

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.

Zerotier

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.

Xung quanh hai cái chính

OpenVPN một dòng — và client chạy ở đâu

OpenVPN

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.

Client là một app

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ặc định thực dụng

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.
— đó là toàn bộ bài học

Giờ thì ship đi — với một cánh cửa có khoá

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.