
Bạn muốn tạo mạng riêng ảo (VPN) nhanh, đơn giản và hiệu năng cao mà không cần cấu hình phức tạp như OpenVPN? WireGuard là protocol VPN hiện đại với chỉ ~4,000 dòng mã, đã được nhúng vào kernel Linux từ phiên bản 5.6 — hoạt động ở tốc độ gần như băng thông gốc.
WireGuard là gì?
WireGuard là VPN protocol mã nguồn mở dùng cryptography hiện đại: ChaCha20-Poly1305 cho encryption, Curve25519 cho key exchange, BLAKE2s cho hashing. So với OpenVPN/IPsec, nó:
- Handshake nhanh hơn ~10 lần ( Noise protocol framework )
- Roaming mượt: giữ kết nối khi chuyển WiFi → 4G → WiFi khác
- Code audit dễ (4k dòng) so với OpenVPN (hàng trăm nghìn dòng)
- Hiệu năng cao hơn 20-30% so với OpenVPN trên cùng CPU

Cài đặt WireGuard trên Ubuntu VPS
1. Cài server
apt update && apt install -y wireguard
systemctl enable --now wg-quick@wg0
2. Tạo key pair
wg genkey | tee server_private.key | wg pubkey > server_public.key
wg genkey | tee client_private.key | wg pubkey > client_public.key
3. Cấu hình /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
PrivateKey =
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey =
AllowedIPs = 10.0.0.2/32
4. Mở firewall
ufw allow 51820/udp
# hoặc iptables
iptables -A INPUT -p udp --dport 51820 -j ACCEPT
5. Client config (Windows/Mac/Android)
[Interface]
PrivateKey =
Address = 10.0.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey =
Endpoint = YOUR_VPS_IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

So sánh WireGuard với OpenVPN và IPSec
| Tiêu chí | WireGuard | OpenVPN | IPSec (strongSwan) |
|---|---|---|---|
| Code size | ~4,000 dòng | ~100,000 dòng | ~500,000 dòng |
| Kernel module | Có (Linux 5.6+) | Userland | Kernel + userland |
| Crypto | ChaCha20-Poly1305, Curve25519 | OpenSSL (AES, RSA, …) | IKEv2 + ESP |
| Handshake | ~100 ms | ~1 giây | ~500 ms |
| Roaming | Tự động, mượt | Cần reconnect | Khó |
| Config đơn giản | Rất đơn giản | Trung bình | Phức tạp |
| Audit | Dễ (code nhỏ) | Khó | Rất khó |
| Throughput | Gần băng thông gốc | Thấp hơn 20-30% | Tốt |
| UDP only | Có | TCP/UDP | UDP |
Kiểm tra kết nối
# Server side
wg show
# output: interface: wg0, public key, latest handshake, transfer
# Client side
curl ifconfig.me # phải ra IP của VPS
ping 10.0.0.1 # ping qua VPN tunnel
WireGuard + DNS riêng (Pi-hole)
Trong client config, thêm DNS = 10.0.0.1 — tất cả traffic DNS đi qua VPS. Trên VPS cài Pi-hole để chặn quảng cáo, tracker. Kết hợp WireGuard + Pi-hole = VPN ad-blocker cho toàn bộ thiết bị.
Split tunneling
Không muốn route toàn bộ traffic qua VPN? Để AllowedIPs = 0.0.0.0/0, ::/0 cho full tunnel, hoặc chỉ route mạng nội bộ:
[Peer]
PublicKey =
Endpoint = VPS_IP:51820
AllowedIPs = 10.0.0.0/24, 192.168.1.0/24
PersistentKeepalive = 25
Split tunneling tiết kiệm băng thông VPS, phù hợp khi chỉ cần truy cập server nội bộ.
WireGuard trong Docker
Chạy WireGuard trong container với linuxserver/wireguard. Port 51820/UDP expose ra host. Lưu ý: container cần NET_ADMIN capability để tạo tunnel interface.
docker run -d
--name wireguard
--cap-add NET_ADMIN
--cap-add SYS_MODULE
-e SERVERURL=yourdomain.com
-e PEERS=3
-p 51820:51820/udp
-v /root/wireguard/config:/config
linuxserver/wireguard
Troubleshooting
- Handshake failed: Kiểm tra public key khớp, firewall mở 51820/UDP, không có NAT blocking UDP.
- DNS leak: Đảm bảo
DNS = 10.0.0.1trong client, không dùng DNS public bên ngoài tunnel. - Mất kết nối sau idle: Thêm
PersistentKeepalive = 25ở cả server và client. - Không ping được 10.0.0.1: Kiểm tra
PostUpiptables MASQUERADE,sysctl net.ipv4.ip_forward=1.
Bảo mật best practices
- PersistentKeepalive = 25: giữ NAT mapping sống, tránh mất kết nối sau idle
- AllowedIPs = 0.0.0.0/0: route toàn bộ traffic qua VPN — nhớ kiểm tra DNS leak
- Không share private key: mất private key = mất toàn bộ quyền truy cập server
- Key rotation: đổi key pair mỗi 3-6 tháng
- Fail2ban trên SSH: WireGuard không có password, bảo vệ SSH là bắt buộc
Khi nào dùng WireGuard?
- Cần VPN đơn giản, nhanh, dễ audit
- Remote access VPS/self-hosted service
- Site-to-site VPN giữa 2 máy hoặc 2 mạng nhỏ
- Tuân thủ compliance cần crypto hiện đại
