
Thiết lập VPN riêng trên VPS với WireGuard giúp bạn kiểm soát hoàn toàn dữ liệu, tránh log của nhà cung cấp thương mại, và chi phí chỉ bằng giá thuê VPS (4-5 USD/tháng). WireGuard là giao thức VPN hiện đại, nhẹ (khoảng 4.000 dòng code), hiệu suất cao hơn OpenVPN nhờ chạy trong kernel space và dùng thuật toán mã hóa ChaCha20-Poly1305.
Tại sao chọn WireGuard cho VPN tự quản?
So với OpenVPN, WireGuard có độ trễ thấp hơn, thiết lập kết nối nhanh hơn (chỉ vài mili giây), và cấu hình đơn giản nhờ dùng public key thay vì certificate. Nhiều bài benchmark cho thấy throughput WireGuard gấp 3-4 lần OpenVPN trên cùng phần cứng. Linux kernel từ phiên bản 5.6 đã tích hợp sẵn module WireGuard, nên cài đặt trên VPS Ubuntu/Debian cực kỳ ngắn gọn.

Yêu cầu chuẩn bị
- VPS: Ubuntu 20.04/22.04/24.04 hoặc Debian 11/12, RAM 512MB trở lên, 1 vCPU. Nhà cung cấp phổ biến: Vultr, Hetzner Cloud, DigitalOcean.
- Domain/subdomain (tùy chọn): Dùng để trỏ IP VPS, tiện cho client config.
- Kiến thức cơ bản: SSH, chỉnh sửa file config, quản lý firewall (ufw/iptables).
Cài đặt WireGuard trên VPS (Server)
Phương pháp 1: Script tự động (khuyên dùng)
Dự án angristan/wireguard-install cung cấp script bash cài đặt toàn bộ: kernel module, tools, systemd service, sinh client config tự động.
curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
chmod +x wireguard-install.sh
sudo ./wireguard-install.sh
Script sẽ hỏi: IPv4/IPv6 public, port (mặc định 51820/UDP), DNS cho client (1.1.1.1, 8.8.8.8), keepalive, và tên client đầu tiên. Sau khi chạy xong, file config client (`.conf`) nằm trong thư mục home hoặc `/etc/wireguard/clients/`. Chạy lại script bất kỳ lúc nào để thêm/xóa client.

Phương pháp 2: Cài đặt thủ công (để hiểu rõ quy trình)
# Ubuntu/Debian
sudo apt update && sudo apt install -y wireguard qrencode
# Sinh key pair server
wg genkey | sudo tee /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
# Sinh key pair client
wg genkey | tee client_private.key
cat client_private.key | wg pubkey | tee client_public.key
Tạo file cấu hình server `/etc/wireguard/wg0.conf`:
[Interface]
Address = 10.0.0.1/24, fd00::1/64
ListenPort = 51820
PrivateKey =
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey =
AllowedIPs = 10.0.0.2/32, fd00::2/128
Bật IP forwarding và khởi động service:
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sudo systemctl enable --now wg-quick@wg0
Cấu hình Client (Máy tính/Điện thoại)
File client config mẫu (`client.conf`):
[Interface]
PrivateKey =
Address = 10.0.0.2/24, fd00::2/64
DNS = 1.1.1.1, 8.8.8.8
[Peer]
PublicKey =
Endpoint = :51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
- AllowedIPs = 0.0.0.0/0: Tunnel toàn bộ traffic (full tunnel). Để split tunnel (chỉ truy cập LAN VPS), dùng
AllowedIPs = 10.0.0.0/24. - PersistentKeepalive: Giữ kết nối NAT, quan trọng nếu client sau NAT/Firewall.
- QR code: Dùng
qrencode -t ansiutf8 < client.confđể quét nhanh trên mobile app WireGuard.

Firewall và Hardening
- Chỉ mở port 51820/UDP:
sudo ufw allow 51820/udp - Chặn mọi inbound khác:
sudo ufw default deny incoming - Fail2Ban cho SSH:
sudo apt install fail2ban - Thay đổi port SSH mặc định (22 → 20128 hoặc port ngẫu nhiên).
- Cập nhật hệ thống thường xuyên:
sudo apt update && sudo apt upgrade -y
Quản lý Client: Thêm, Xóa, Theo dõi
Với script angristan: chạy lại ./wireguard-install.sh chọn “Add a new client” hoặc “Remove a client”. Thủ công: thêm block [Peer] mới vào `wg0.conf` với key pair mới, reload service.
Theo dõi kết nối: sudo wg show hiển thị handshake gần nhất, transfer rx/tx per peer. Dùng watch -n 1 'wg show' để real-time.
Troubleshooting thường gặp
| Vấn đề | Nguyên nhân | Giải pháp |
|---|---|---|
| Client không kết nối được | Firewall chặn UDP 51820 | Mở port trên VPS và cloud provider firewall |
| Kết nối được nhưng không ra internet | Thiếu MASQUERADE/POSTROUTING | Kiểm tra PostUp/PostDown rule iptables |
| Handshake không thành công | Key mismatch hoặc clock skew | Đồng bộ NTP: timedatectl set-ntp true |
| Throughput thấp | MTU không phù hợp | Set MTU = 1420 trong client config |
So sánh nhanh: WireGuard vs OpenVPN vs Tailscale
| Tiêu chí | WireGuard | OpenVPN | Tailscale |
|---|---|---|---|
| Codebase | ~4k lines | ~100k lines | Proprietary (dựa trên WireGuard) |
| Thiết lập | Nhanh, đơn giản | Phức tạp (PKI, cert) | Rất dễ (login SSO) |
| Hiệu suất | Cao nhất | Thấp hơn | Cao (WireGuard backend) |
| Kiểm soát | Hoàn toàn (self-host) | Hoàn toàn | Phụ thuộc server Tailscale |
| Chi phí | Chỉ tiền VPS | Chỉ tiền VPS | Free tier 100 thiết bị |
Kết luận
WireGuard trên VPS tự quản là giải pháp VPN tối ưu cho developer, power user, và doanh nghiệp nhỏ: hiệu suất cao, kiểm soát dữ liệu tuyệt đối, chi phí thấp. Script angristan/wireguard-install giảm thiểu rào cản kỹ thuật, cho phép triển khai VPN production trong chưa đầy 5 phút. Hãy bắt đầu với một VPS $5/tháng, thêm client cho điện thoại, laptop, và tận hưởng internet an toàn, riêng tư.
Nguồn tham khảo: WireGuard Official Installation, angristan/wireguard-install GitHub
