Cách dựng nhanh máy chủ AmneziaWG2 của riêng bạn trên VPS
Nếu bạn muốn có con đường nhanh nhất để tự dựng một máy chủ VPN mà không phải tự tay cài mọi thứ qua console, thì quy trình self-hosted trong Amnezia là một trong những lựa chọn tiện nhất. Bạn tạo VPS, cấp cho ứng dụng quyền truy cập SSH, chọn giao thức, và client sẽ tự kết nối vào máy chủ rồi cài những gì cần thiết.
Trong bài này, kịch bản chính được minh họa bằng DigitalOcean vì đây là phương án thẳng và dễ làm nhất. Bên dưới, tôi cũng tách riêng phần cần làm nếu bạn dùng AWS, Azure hoặc Google Cloud Platform — đặc biệt là chuyện khóa SSH và mở đúng cổng.
Một lưu ý quan trọng ngay từ đầu: ở một số bước trong giao diện Amnezia, bạn có thể chỉ thấy chữ Amnezia WireGuard mà không nhấn mạnh phiên bản. Nhưng trong luồng self-hosted hiện tại, với các phiên bản client được hỗ trợ, thứ bạn cài thực tế sẽ là AmneziaWG 2.0.
Lộ trình nhanh
Nếu không cần chi tiết, toàn bộ quy trình sẽ như sau:
- tạo VPS;
- chuẩn bị khóa SSH;
- thêm public key vào nhà cung cấp;
- sao chép private key, IP và username;
- cài Amnezia;
- chọn Self-hosted VPN;
- dán IP, username và private key;
- chọn Manual → Amnezia WireGuard;
- chỉ định cổng;
- chờ cài đặt hoàn tất;
- kết nối và kiểm tra IP đã thay đổi hay chưa.
Bên dưới là bản giải thích đầy đủ theo từng bước.
Bạn cần chuẩn bị gì
- một VPS có IP public
- quyền truy cập SSH vào máy chủ
- một khóa SSH
- ứng dụng Amnezia đã cài
- 3–5 phút
Public key và private key: đừng nhầm lẫn
Đây là nguồn lỗi phổ biến nhất.
Khi bạn tạo khóa SSH, bạn sẽ có một cặp file:
- private key — khóa bí mật, chỉ bạn giữ;
- public key — khóa công khai, dùng để thêm vào panel của nhà cung cấp.
Trong trường hợp thông thường:
- file có đuôi
.publà public key; - file không có
.publà private key.
Trong thực tế, điều đó có nghĩa là:
- ở DigitalOcean và thường là Google Cloud, bạn sẽ tải lên public key;
- trong Amnezia, bạn dán private key;
- trên AWS và Azure, portal có thể tự sinh khóa cho bạn, nên luồng làm việc sẽ hơi khác — phần đó được giải thích bên dưới.
DigitalOcean: kịch bản dễ nhất
Với kiểu hướng dẫn như thế này, DigitalOcean thực sự là một trong những lựa chọn dễ nhất.
Bước 1. Tạo khóa SSH
Nếu bạn đã có sẵn một khóa SSH riêng cho máy chủ này thì rất tốt, cứ dùng nó. Nếu chưa có, hãy tạo khóa mới.
Lệnh cơ bản:
ssh-keygen
Sau đó hệ thống sẽ cho bạn biết khóa được lưu ở đâu. Tiếp theo, thứ bạn cần chính là public key, tức file có .pub.
Để in ra terminal và sao chép:
cat ~/.ssh/TEN_KHOA.pub
Nếu bạn giữ tên mặc định, đường dẫn thường sẽ giống như:
cat ~/.ssh/id_ed25519.pub
Bước 2. Thêm public key vào DigitalOcean
Trong DigitalOcean, public key được tải lên tài khoản và sau đó gắn vào droplet mới trong lúc tạo.
Đường dẫn chính thức: DigitalOcean Control Panel → Settings → Security → Add SSH Key
Tài liệu chính thức:
- Add SSH keys to a team: https://docs.digitalocean.com/platform/teams/how-to/upload-ssh-keys/
- Create a Droplet: https://docs.digitalocean.com/products/droplets/how-to/create/
- Add SSH keys to new or existing Droplets: https://docs.digitalocean.com/products/droplets/how-to/add-ssh-keys/
Bạn thậm chí không cần rời khỏi trang tạo droplet: ngay trên đó đã có nút New SSH Key với chức năng tương tự.
Bước 3. Tạo droplet
Cho lần triển khai đầu tiên, như thế này là đủ:
- Ubuntu
- bất kỳ gói cơ bản nào
- xác thực bằng SSH key
- public key bạn vừa tạo
Sau khi droplet được tạo xong, bạn sẽ cần:
- IP public
- username
- private key của bạn
Trên DigitalOcean, username mặc định của Ubuntu droplet thông thường là root.
Cài Amnezia
Trong lúc VPS đang được tạo, bạn có thể tải client ngay.
Trang tải xuống: https://amnezia.org/
Amnezia có các phiên bản cho:
- Windows
- macOS
- Linux
- Android
- iOS
Cài ứng dụng, mở lên và nhấn Let’s get started.
Thiết lập AmneziaWG2 self-hosted
Bước 1. Chọn Self-hosted VPN
Bên trong ứng dụng, chọn:
Self-hosted VPN
Sau đó bạn sẽ cần ba thứ:
- IP của máy chủ
- username
- private SSH key
Bước 2. Dán private key
Ở đây bạn cần private key, chứ không phải file .pub.
Ví dụ, nếu public key của bạn là:
~/.ssh/id_ed25519.pub
thì private key thường sẽ là:
~/.ssh/id_ed25519
Bạn có thể in nó ra như sau:
cat ~/.ssh/id_ed25519
Sao chép toàn bộ nội dung rồi dán vào Amnezia.
Bước 3. Nhập username
Trên DigitalOcean, giá trị này thường là:
root
Với các nhà cung cấp khác, username có thể khác, vì vậy đừng tự động điền root ở mọi nơi.
Bước 4. Nhập IP
Sao chép IP public của VPS từ bảng điều khiển nhà cung cấp rồi dán vào Amnezia.
Bước 5. Chọn Manual → Amnezia WireGuard
Tiếp theo, ứng dụng sẽ hỏi kiểu cài đặt. Hãy chọn:
- Manual
- sau đó Amnezia WireGuard
Đây là chỗ nhiều người dễ bị rối vì tên gọi: giao diện có thể không ghi rõ “version 2”, nhưng trong luồng self-hosted hiện tại, đây chính là AWG 2.0 nếu client của bạn hỗ trợ phiên bản mới.
Hướng dẫn chính thức cho AmneziaWG 2.0 self-hosted: https://docs.amnezia.org/ru/documentation/instructions/new-amneziawg-selfhosted/
Bước 6. Chỉ định cổng
Trong video, cổng được dùng là 8080, và với một lần cài đầu tiên theo kiểu thực dụng thì đây là lựa chọn hoàn toàn ổn.
Điều quan trọng cần hiểu:
- đây là cổng của máy chủ VPN, không phải cổng SSH;
- nếu giao thức không khởi động được, nhiều khi vấn đề không nằm ở bản thân giao thức mà ở chỗ cổng chưa được mở;
- nếu một cổng cụ thể không hoạt động, thường sẽ nhanh hơn nếu thử cổng khác trước khi lao vào tìm nguyên nhân mạng phức tạp.
Tài liệu troubleshooting chính thức cho self-hosted AmneziaWG: https://docs.amnezia.org/troubleshooting/self-hosted-amneziawg-not-working/
Trong đó họ khuyến nghị rõ ràng rằng nếu gặp vấn đề, hãy thử một cổng khác dưới 9999, ví dụ 585 hoặc 1234.
Bước 7. Chờ quá trình cài đặt tự động
Sau đó Amnezia sẽ tự:
- kết nối tới máy chủ qua SSH;
- cài đặt mọi thứ cần thiết;
- chuẩn bị cấu hình;
- thêm kết nối vào trong ứng dụng.
Đó chính là lợi thế lớn nhất của quy trình self-hosted: bạn không cần tự cài mọi thứ bằng tay trong console.
Bước 8. Kết nối và kiểm tra IP
Khi quá trình cài đặt hoàn tất, nút Connect sẽ xuất hiện.
Sau đó:
- nhấn Connect;
- chờ đường hầm hoạt động;
- mở bất kỳ dịch vụ kiểm tra IP nào;
- tải lại trang và xác nhận IP bây giờ đã trùng với VPS của bạn.
Nếu IP đã đổi sang IP của máy chủ, thì phần thiết lập cơ bản đã xong.
Nếu bạn không dùng DigitalOcean thì sao?
Bên dưới là bản tóm tắt ngắn gọn và thực tế cho các nhà cung cấp phổ biến khác.
AWS: khóa SSH và cổng
Trên AWS EC2, luồng làm việc khác với DigitalOcean.
Khóa SSH trên AWS
Với AWS, bạn không nhất thiết phải tạo khóa SSH cục bộ từ trước. Khi tạo một instance EC2, bạn có thể:
- chọn key pair đã có sẵn;
- hoặc tạo key pair mới trực tiếp trong console.
Khi tạo key pair mới, AWS cho phép bạn tải xuống private key (ví dụ file .pem) đúng một lần. Public key sẽ được gắn vào instance tự động.
Tài liệu chính thức:
Vì vậy trên AWS, cách đơn giản nhất là:
- tạo key pair trong lúc khởi chạy EC2;
- tải private key xuống;
- dùng private key đó trong Amnezia.
Mở cổng ở đâu trên AWS
Trên AWS, bạn cần một Security Group có inbound rule cho cổng UDP cần dùng.
Đường đi: EC2 → Instance → Security Group được gắn → Edit inbound rules
Tài liệu chính thức:
- Change security groups: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/changing-security-group.html
- Security group rules reference: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html
Nếu chưa có inbound UDP rule, máy chủ có thể cài thành công nhưng kết nối từ bên ngoài sẽ không hoạt động.
Azure: khóa SSH và cổng
Trên Azure, quy trình cũng khá thuận tiện.
Khóa SSH trên Azure
Azure có thể tạo và lưu khóa SSH trực tiếp trong portal. Điều này hữu ích nếu bạn không muốn tự tạo khóa trên máy local trước.
Tài liệu chính thức:
- Generate and store SSH keys in Azure portal: https://learn.microsoft.com/en-us/azure/virtual-machines/ssh-keys-portal
- Connect to a Linux VM: https://learn.microsoft.com/en-us/azure/virtual-machines/linux-vm-connect
Vì vậy trên Azure bạn có hai lựa chọn:
- dùng public key hiện có của mình;
- để Azure tạo khóa khi tạo VM.
Trong cả hai trường hợp, thứ mà Amnezia cuối cùng cần vẫn là private key.
Mở cổng ở đâu trên Azure
Trên Azure, việc mở cổng thường được thực hiện thông qua:
- Networking
- và/hoặc Network Security Group (NSG)
Tài liệu chính thức:
- Network security groups overview/tutorial: https://learn.microsoft.com/en-us/azure/virtual-network/tutorial-filter-network-traffic
- NSG management: https://learn.microsoft.com/en-us/azure/virtual-network/manage-network-security-group
Trong thực tế, bạn cần một inbound rule cho cổng UDP của mình.
Google Cloud Platform: nơi dễ gây nhầm lẫn nhất
Đây thường là chỗ xuất hiện nhiều điểm không hiển nhiên nhất.
Khóa SSH trong GCP
Google Cloud có hai mô hình truy cập SSH khác nhau:
- OS Login
- metadata-based SSH keys
Đó chính là lý do khiến nhiều người dùng GCP có cảm giác “khóa SSH bị giấu đâu đó”.
Nếu OS Login không được dùng, bạn có thể thêm public SSH key:
- vào project metadata,
- hoặc vào instance metadata của một VM cụ thể.
Tài liệu chính thức:
- Add SSH keys / access overview: https://docs.cloud.google.com/compute/docs/access
- Troubleshooting SSH errors: https://docs.cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors
Nếu bạn chỉ cần SSH cho đúng một VM, thì dùng instance metadata thường tiện hơn là thêm khóa ở cấp project.
Mở cổng ở đâu trong GCP
Trên Google Cloud, bạn không chủ yếu mở cổng “bên trong VM”. Điểm kiểm soát chính nằm ở VPC firewall rules.
Tài liệu chính thức:
- Firewall rules overview: https://docs.cloud.google.com/firewall/docs/firewalls
- Using firewall rules: https://docs.cloud.google.com/firewall/docs/using-firewalls
Trong thực tế, quy trình sẽ là:
- mở VPC firewall;
- tạo rule;
- cho phép cổng UDP cần thiết;
- áp dụng rule vào đúng VM / target tags / mạng.
Đây là một trong những lý do phổ biến nhất khiến mọi thứ trên GCP trông như “đã cài đúng”, nhưng vẫn không chấp nhận kết nối từ bên ngoài.
Nên chọn cổng nào?
Ở đây không có một cổng “tốt nhất” mang tính phổ quát.
Cách làm thực tế là như sau:
Cho lần triển khai đầu tiên
- chọn một cổng UDP rõ ràng;
- mở cổng đó ở cấp cloud firewall / security group / NSG / VPC firewall;
- dùng chính cổng đó trong quá trình setup và đừng làm lần triển khai đầu tiên quá phức tạp.
Nếu không hoạt động
Hãy kiểm tra theo thứ tự này:
- cổng đã mở ở cấp nhà cung cấp chưa;
- bạn đã chọn đúng giao thức chưa;
- bạn đã dán đúng khóa chưa;
- username có đúng không;
- bạn có đang dùng IP public thay vì IP nội bộ không;
- có nên đơn giản là đổi sang cổng khác không.
Nếu bạn muốn loại trừ nhanh một vấn đề ở tầng mạng, bước hữu ích nhất thường là thử một cổng UDP khác.
Những lỗi thường gặp
Nhầm public key với private key
Đây là lỗi phổ biến nhất.
Quy tắc đơn giản:
.pub→ đưa vào panel của nhà cung cấp- không có
.pub→ đưa vào Amnezia
Sai username
Trên DigitalOcean thường là root, nhưng với AWS, Azure, GCP và các image khác nhau thì chưa chắc như vậy.
Chưa mở cổng UDP
Máy chủ có thể cài xong đúng cách, nhưng lưu lượng từ bên ngoài sẽ không đi vào được.
Dùng sai IP
Amnezia cần IP public, không phải địa chỉ nội bộ của VM.
Chỉnh quá nhiều thứ quá sớm
Nếu kết nối cơ bản vẫn chưa hoạt động, đừng vội tinh chỉnh mọi thứ cùng lúc. Trước hết hãy làm cho một kết nối bình thường hoạt động đã.
Nên làm gì tiếp theo?
Sau khi bạn đã có máy chủ AWG2 đầu tiên hoạt động, các chủ đề tiếp theo hợp lý sẽ là:
- cài đặt AmneziaWG2
- so sánh AWG2 vs WireGuard vs VLESS Reality
- cài nhanh VLESS Reality
- định tuyến qua Cloudflare WARP
- các kịch bản server-side nâng cao hơn
Nói cách khác, bài này là điểm bắt đầu: cách triển khai nhanh một thiết lập AWG2 self-hosted hoạt động, chứ không phải một khóa học đầy đủ về quản trị máy chủ VPN.
Tóm tắt ngắn
Nếu bạn muốn con đường thực tế nhanh nhất, thì quy trình là:
- tạo VPS;
- lấy quyền truy cập SSH;
- thêm public key ở phía nhà cung cấp;
- dán private key, IP và username vào Amnezia;
- chọn Manual → Amnezia WireGuard;
- đặt cổng;
- chờ cài đặt;
- kết nối;
- kiểm tra IP.
Trên DigitalOcean, đây là con đường trực quan và trực tiếp nhất. Trên AWS và Azure, portal có thể giúp việc tạo khóa trở nên dễ hơn. Trên Google Cloud, phần dễ gây rối nhất thường là mô hình SSH và các quy tắc VPC firewall.
Nhưng nếu bạn nhớ ba điều — đúng khóa, đúng username và cổng UDP đã mở — thì quy trình self-hosted ban đầu sẽ trở nên rất đơn giản.