Vì sao OpenVPN dần nhường chỗ cho WireGuard?
OpenVPN và IPsec đã gắn bó với giới quản trị mạng nhiều năm qua. Tuy nhiên, điểm yếu cố hữu của chúng là mã nguồn cồng kềnh với hàng trăm ngàn dòng lệnh, ngốn nhiều CPU và độ trễ cao. Mỗi khi bạn đổi mạng từ Wi-Fi sang 4G, OpenVPN thường mất tới 10–20 giây để bắt tay và kết nối lại.
WireGuard giải quyết triệt để phiền toái này. Toàn bộ codebase chỉ vỏn vẹn gần 4.000 dòng, tích hợp thẳng vào nhân Linux từ bản 5.6. Các bài kiểm tra thực tế cho thấy WireGuard đạt thông lượng nhanh gấp 3–4 lần OpenVPN, đồng thời tiết kiệm 30% pin trên điện thoại. Với một VPS Ubuntu 22.04 hoặc 24.04 cấu hình 1 vCPU / 1GB RAM, bạn có thể hoàn tất cài đặt trong chưa đầy 10 phút.
Khái niệm cốt lõi: WireGuard hoạt động như thế nào?
Nắm rõ cách vận hành sẽ giúp bạn xử lý sự cố cực nhanh khi mạng gặp trục trặc:
- Mô hình Cryptokey Routing: WireGuard coi mọi thiết bị là một Peer bình đẳng. Tương tự cơ chế khóa của SSH, mỗi máy giữ một cặp Public/Private Key riêng. Server dựa thẳng vào Public Key để định tuyến và giải mã gói tin, loại bỏ các bước xác thực TLS rườm rà.
- Chạy trực tiếp trong Kernel Space: Dữ liệu không cần chuyển qua lại giữa User Space và Kernel Space như cơ chế TUN/TAP của OpenVPN. Nhờ vậy, độ trễ được giảm xuống mức thấp nhất và tận dụng tối đa băng thông cổng mạng.
- Thiết kế phi trạng thái (Stateless): WireGuard không gửi gói tin thăm dò (keepalive) liên tục nếu không có dữ liệu cần truyền. Server hoàn toàn im lặng trước các lệnh quét cổng IP ngẫu nhiên từ Internet.
Thực hành chi tiết: Cài đặt và cấu hình WireGuard trên Ubuntu
Bước 1: Kích hoạt tính năng IP Forwarding
Mặc định, Linux sẽ chặn chuyển tiếp gói tin giữa các card mạng. Bạn cần bật tính năng này để VPS đóng vai trò định tuyến lưu lượng ra Internet:
sudo sed -i -e '$a\net.ipv4.ip_forward = 1' /etc/sysctl.conf
sudo sed -i -e '$a\net.ipv6.conf.all.forwarding = 1' /etc/sysctl.conf
sudo sysctl -p
Màn hình trả về net.ipv4.ip_forward = 1 nghĩa là hệ thống đã nhận cấu hình mới.
Bước 2: Cài đặt gói phần mềm và tạo cặp khóa Server
Cài đặt WireGuard cùng tiện ích tạo mã QR để cấu hình thiết bị di động:
sudo apt update && sudo apt install -y wireguard qrencode
Tạo thư mục làm việc và sinh cặp khóa riêng tư/công khai cho Server với quyền hạn an toàn:
cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
Bạn có thể đọc nội dung file khóa bằng lệnh cat server_private.key. Tuyệt đối không để lộ Private Key cho bất kỳ ai.
Bước 3: Xác định card mạng và tạo file cấu hình Server
Tìm tên cổng mạng chính đang nối Internet bằng lệnh sau:
ip -br link
Thông thường card mạng sẽ có tên là eth0, ens3 hoặc enp1s0. Hãy thay đúng tên này vào phần cấu hình tường lửa iptables bên dưới.
Tạo file cấu hình máy chủ /etc/wireguard/wg0.conf:
sudo nano /etc/wireguard/wg0.conf
Dán nội dung sau vào file (thay nội dung khóa và card mạng tương ứng):
[Interface]
Address = 10.8.0.1/24, fd42:42:42::1/64
ListenPort = 51820
PrivateKey = <NỘI_DUNG_FILE_server_private.key>
SaveConfig = false
# Bật NAT khi mở VPN và xóa NAT khi tắt VPN (thay eth0 bằng card mạng thực tế)
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
Bước 4: Cấu hình Firewall và khởi chạy dịch vụ
Mở cổng UDP 51820 trên tường lửa UFW và khởi động WireGuard qua systemd:
sudo ufw allow 51820/udp
sudo ufw allow OpenSSH
sudo ufw enable
# Kích hoạt WireGuard khởi động cùng hệ thống
sudo systemctl enable --now wg-quick@wg0
Kiểm tra trạng thái máy chủ bằng lệnh:
sudo wg show
Nếu terminal hiển thị giao diện wg0 kèm cổng 51820 và public key, máy chủ của bạn đã sẵn sàng nhận kết nối.
Bước 5: Tạo file cấu hình và mã QR cho Client
Tạo cặp khóa cho thiết bị client đầu tiên (ví dụ: client1):
cd /etc/wireguard
wg genkey | tee client1_private.key | wg pubkey > client1_public.key
Thêm thông tin Client vào cấu hình máy chủ bằng cách chỉnh sửa file /etc/wireguard/wg0.conf, thêm đoạn sau vào cuối file:
[Peer]
PublicKey = <NỘI_DUNG_FILE_client1_public.key>
AllowedIPs = 10.8.0.2/32, fd42:42:42::2/128
Cập nhật cấu hình server mà không cần khởi động lại dịch vụ:
sudo wg addconf wg0 <(sudo wg-quick strip wg0)
Tiếp theo, tạo file cấu hình kết nối client1.conf để gửi về thiết bị:
[Interface]
PrivateKey = <NỘI_DUNG_FILE_client1_private.key>
Address = 10.8.0.2/24, fd42:42:42::2/64
DNS = 1.1.1.1, 8.8.8.8
[Peer]
PublicKey = <NỘI_DUNG_FILE_server_public.key>
Endpoint = <IP_PUBLIC_CỦA_SERVER>:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
Để thêm cấu hình vào điện thoại, bạn chỉ cần xuất mã QR ra terminal rồi mở app WireGuard quét mã:
qrencode -t ansiutf8 < client1.conf
Mẹo thực chiến khi vận hành WireGuard
1. Khắc phục tình trạng nghẽn web bằng MTU
Nếu bạn ping IP vẫn thông nhưng vào các trang web lớn bị treo hoặc tải chậm, nguyên nhân thường do MTU bị tràn khi đóng gói qua nhiều lớp mạng. Hãy hạ MTU trong file cấu hình Client:
[Interface]
MTU = 1360
Mức MTU từ 1360 đến 1420 hoạt động ổn định trên phần lớn hạ tầng cáp quang và sóng 4G/5G tại Việt Nam.
2. Tránh rớt kết nối NAT với PersistentKeepalive
Nhiều router Wi-Fi hoặc nhà mạng 4G (CGNAT) tự động xóa bảng định tuyến NAT sau 30 giây không thấy dữ liệu. Thêm tùy chọn PersistentKeepalive = 25 vào phần [Peer] của Client sẽ gửi một gói tin mồi mỗi 25 giây. Nhờ đó, đường truyền luôn mở và bạn nhận thông báo đẩy tức thì.
3. Phân biệt Full Tunnel và Split Tunnel
Tùy theo nhu cầu công việc, bạn hãy điều chỉnh giá trị AllowedIPs trên file Client:
- Full Tunnel (
AllowedIPs = 0.0.0.0/0, ::/0): Toàn bộ lưu lượng duyệt web, tải file đều đi qua VPS. Lựa chọn này bắt buộc khi bạn dùng Wi-Fi công cộng tại quán cafe hoặc khách sạn. - Split Tunnel (
AllowedIPs = 10.8.0.0/24): Chỉ các truy cập tới dải IP máy chủ nội bộ mới qua VPN, còn việc lướt web hàng ngày đi thẳng qua mạng gốc. Cách này giúp tiết kiệm băng thông VPS và giữ tốc độ mạng ở mức cao nhất.
Tổng kết
WireGuard chứng minh rằng một giải pháp mạng bảo mật không nhất thiết phải cồng kềnh. Chỉ với vài dòng lệnh tạo khóa và định tuyến iptables, bạn đã có một đường hầm mã hóa riêng tư, tốc độ cao. Thiết lập chính xác MTU và Keepalive ngay từ đầu sẽ giúp kết nối của bạn luôn mượt mà trên mọi thiết bị.

