5 bước cấu hình VPN WireGuard trên VPS Ubuntu kết nối nhiều server
Trong kỷ nguyên của hạ tầng phân tán, việc quản lý và bảo mật kết nối giữa các server là thách thức lớn. Các máy chủ chứa ứng dụng, database và dữ liệu nhạy cảm thường phải giao tiếp với nhau qua Internet công cộng, tiềm ẩn vô số rủi ro bảo mật.
Làm thế nào để tạo ra một mạng riêng ảo cho nhiều server, một “hành lang” riêng tư và được mã hóa mạnh mẽ?
Giải pháp chính là cấu hình VPN WireGuard trên VPS Ubuntu. Thay vì các giao thức cũ kỹ và phức tạp, WireGuard mang đến một phương pháp hiện đại, cực kỳ nhanh chóng và an toàn để xây dựng một mạng riêng ảo (VPN) vững chắc cho toàn bộ hạ tầng của bạn.
Bài viết này sẽ hướng dẫn bạn chi tiết 5 bước để thiết lập một mạng WireGuard theo mô hình Hub-and-Spoke. Sau khi hoàn thành, bạn sẽ có một server trung tâm (Hub) và nhiều server vệ tinh (Spokes) kết nối với nhau một cách an toàn, hiệu quả.

Tại sao chọn WireGuard cho hệ thống server?
Khi so sánh với các “gã khổng lồ” như OpenVPN hay IPsec, WireGuard nổi lên như một lựa chọn vượt trội cho các hệ thống server hiện đại. Sự khác biệt không chỉ nằm ở tốc độ, mà còn ở triết lý thiết kế và bảo mật.
Hiệu suất đáng kinh ngạc
Tốc độ là ưu điểm lớn nhất của WireGuard. Nó hoạt động trực tiếp bên trong nhân Linux (kernel space), thay vì ở không gian người dùng (user space) như OpenVPN. Điều này giúp loại bỏ độ trễ do chuyển đổi ngữ cảnh, mang lại thông lượng cao hơn và ping thấp hơn đáng kể.
Đối với các tác vụ nhạy cảm về độ trễ như đồng bộ hóa database hoặc gọi API nội bộ giữa các microservice, hiệu suất này tạo ra sự khác biệt rõ rệt.
Bảo mật tối tân với “Cryptokey Routing”
WireGuard sử dụng các thuật toán mã hóa hiện đại nhất như ChaCha20, Poly1305, và Curve25519. Nền tảng bảo mật của nó là khái niệm Cryptokey Routing.
Hiểu đơn giản, WireGuard liên kết chặt chẽ danh tính của mỗi server với một khóa công khai (Public Key). Nó chỉ cho phép dữ liệu từ một địa chỉ IP cụ thể nếu gói tin được xác thực bằng đúng Public Key tương ứng. Điều này giúp loại bỏ hoàn toàn các nguy cơ tấn công giả mạo IP.
Cấu hình tối giản
So với hàng trăm dòng cấu hình phức tạp của IPsec, một file cấu hình WireGuard thường chỉ có vài dòng. Sự đơn giản này không chỉ giúp việc cài đặt nhanh hơn mà còn giảm thiểu đáng kể rủi ro gây ra lỗi cấu hình – một trong những nguyên nhân hàng đầu dẫn đến lỗ hổng bảo mật.
Với chỉ khoảng 4,000 dòng mã, WireGuard cũng dễ dàng cho việc kiểm tra và audit bảo mật hơn rất nhiều so với các đối thủ có hàng trăm ngàn dòng mã.
Bảng so sánh nhanh: WireGuard vs. OpenVPN vs. IPsec
Tiêu chí | WireGuard | OpenVPN | IPsec |
Tốc độ | Rất cao | Trung bình | Cao |
Độ phức tạp | Rất thấp | Trung bình | Rất cao |
Bảo mật | Hiện đại | Mạnh mẽ | Mạnh mẽ |
Nền tảng | Trong nhân (Kernel) | Ngoài nhân (User) | Trong nhân (Kernel) |
Số dòng mã | ~4,000 | ~600,000+ | Phức tạp, tùy OS |
Lên kế hoạch & chuẩn bị môi trường
Một kế hoạch tốt sẽ giúp quá trình triển khai diễn ra suôn sẻ. Trước khi gõ bất kỳ dòng lệnh nào, hãy cùng phác thảo kiến trúc và chuẩn bị các “nguyên liệu” cần thiết.

Mô hình mạng Hub and Spoke
Chúng ta sẽ triển khai theo mô hình WireGuard Hub and Spoke, một kiến trúc mạng phổ biến và hiệu quả.
- Hub Server (VPS trung tâm): Đóng vai trò là cổng kết nối chính. Mọi traffic giữa các server vệ tinh đều sẽ đi qua Hub. VPS này cần có một địa chỉ IP public tĩnh.
- Spoke Servers (VPS vệ tinh): Là các server ứng dụng, database… Chúng sẽ khởi tạo kết nối đến Hub Server và giao tiếp với các Spoke khác thông qua Hub.
Mô hình này giúp đơn giản hóa việc quản lý. Bạn chỉ cần cấu hình firewall tại Hub và dễ dàng thêm hoặc bớt các Spoke mà không ảnh hưởng đến toàn bộ mạng.
Yêu cầu hệ thống
- VPS: Tối thiểu 02 VPS chạy Ubuntu 22.04 LTS hoặc 20.04 LTS. Một VPS làm Hub, các VPS còn lại làm Spoke. Cấu hình tối thiểu (1 vCPU, 512MB RAM) là đủ cho một Hub xử lý lượng traffic vừa phải.
- Quyền truy cập: Quyền
sudo
trên tất cả các VPS. - Kết nối SSH: Một trình SSH client như Terminal hoặc PuTTY.
Lên sơ đồ địa chỉ IP
Việc quy hoạch địa chỉ IP là cực kỳ quan trọng. Hãy quyết định trước dải IP riêng mà bạn sẽ dùng cho mạng VPN. Dải IP này không được trùng với bất kỳ dải IP mạng LAN nào khác của bạn.
Trong bài viết này, chúng ta sẽ sử dụng:
- Dải IP VPN:
10.80.0.0/24
- Hub Server IP:
10.80.0.1
- Spoke Server 1 IP:
10.80.0.2
- Spoke Server 2 IP:
10.80.0.3
- … và cứ thế tiếp tục.
Tóm tắt nhanh các lệnh chính
Trước khi đi vào chi tiết, đây là bảng tóm tắt các tác vụ chính bạn sẽ thực hiện trên mỗi loại server.
Vai trò Server | Tóm tắt các tác vụ và lệnh chính |
Hub Server (Trung tâm) |
|
Spoke Server (Vệ tinh) |
|
5 bước cấu hình VPN WireGuard trên VPS Ubuntu
Đây là phần cốt lõi của bài hướng dẫn. Hãy thực hiện cẩn thận từng bước trên các VPS tương ứng.
Bước 1: Cài đặt WireGuard trên TẤT CẢ các Server
Bước đầu tiên là cài đặt gói phần mềm WireGuard trên cả Hub Server và tất cả các Spoke Server.
Đầu tiên, hãy cập nhật hệ thống để đảm bảo mọi gói tin đều là phiên bản mới nhất. Điều này giúp tránh các xung đột và vá lỗi bảo mật.
sudo apt update && sudo apt upgrade -y
Tiếp theo, cài đặt WireGuard bằng một lệnh duy nhất. Gói phần mềm đã có sẵn trong kho lưu trữ mặc định của Ubuntu.
sudo apt install wireguard -y
Bước 2: Tạo cặp khóa bảo mật cho TỪNG server
Mỗi server trong mạng WireGuard (cả Hub và Spoke) phải có một cặp khóa riêng biệt: một khóa riêng tư (private key) và một khóa công khai (public key).
Thực hiện các lệnh sau trên TẤT CẢ các server (Hub, Spoke 1, Spoke 2…).
Di chuyển vào thư mục cấu hình của WireGuard.
cd /etc/wireguard
Sử dụng umask 077
để đảm bảo các file khóa được tạo ra sẽ có quyền truy cập nghiêm ngặt nhất, chỉ cho phép người sở hữu (root) đọc và ghi.
umask 077
Tạo cặp khóa. Lệnh này sẽ tạo ra privatekey
và từ đó suy ra publickey
tương ứng.
wg genkey | sudo tee privatekey | wg pubkey | sudo tee publickey
Sau khi chạy xong, bạn sẽ có hai file privatekey
và publickey
trong thư mục /etc/wireguard
. Hãy ghi lại nội dung của các khóa này từ mỗi server, chúng ta sẽ cần chúng ở các bước sau.
Lưu ý: Giữ file privatekey
tuyệt đối bí mật trên mỗi server. Chỉ chia sẻ publickey
.
Bước 3: Cấu hình VPS trung tâm (Hub Server)
Bây giờ chúng ta sẽ tập trung vào việc thiết lập Hub Server. Tất cả cấu hình sẽ nằm trong file /etc/wireguard/wg0.conf
.
(Quan trọng) Tìm tên card mạng public
Để cấu hình iptables
chính xác, bạn cần biết tên card mạng public của Hub Server. Chạy lệnh sau:
ip -br a
Bạn sẽ thấy một danh sách các card mạng. Hãy tìm dòng có chứa địa chỉ IP Public của VPS. Tên ở đầu dòng (ví dụ eth0
hoặc ens3
) chính là tên bạn cần. Hãy ghi nhớ nó.
Tạo file cấu hình
Tạo và mở file cấu hình:
sudo nano /etc/wireguard/wg0.conf
Sao chép nội dung dưới đây và dán vào file. Hãy nhớ thay eth0
bằng tên card mạng bạn vừa tìm được.
[Interface]
Address = 10.80.0.1/24
ListenPort = 51820
PrivateKey = <NỘI DUNG PRIVATE KEY CỦA HUB SERVER>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -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
# --- Cấu hình cho Spoke Server 1 ---
[Peer]
PublicKey = <NỘI DUNG PUBLIC KEY CỦA SPOKE 1>
AllowedIPs = 10.80.0.2/32
# --- Cấu hình cho Spoke Server 2 ---
[Peer]
PublicKey = <NỘI DUNG PUBLIC KEY CỦA SPOKE 2>
AllowedIPs = 10.80.0.3/32
Sau khi dán Private Key và Public Key của các server tương ứng, nhấn Ctrl + X
, Y
, và Enter
để lưu lại.
Kích hoạt IP Forwarding
Để Hub có thể định tuyến traffic, bạn cần bật IP Forwarding trong kernel.
sudo nano /etc/sysctl.conf
Tìm và bỏ dấu #
ở dòng net.ipv4.ip_forward=1
. Nếu không có, hãy thêm nó vào cuối file. Lưu file và áp dụng thay đổi:
sudo sysctl -p
Mở cổng firewall
Để các Spoke có thể kết nối đến Hub, chúng ta cần mở cổng WireGuard trên firewall của Hub Server. Để hiểu rõ hơn về cách UFW hoạt động, bạn có thể đọc bài viết Hướng dẫn cấu hình UFW Ubuntu: Làm chủ tường lửa VPS.
# Luôn cho phép SSH để không bị mất kết nối từ xa
sudo ufw allow ssh
# Mở cổng mặc định của WireGuard
sudo ufw allow 51820/udp
# Kích hoạt firewall
sudo ufw enable
Hệ thống sẽ hỏi bạn xác nhận, hãy nhập y
và Enter
.
Bước 4: Cấu hình các VPS vệ tinh (Spoke Servers)
Bây giờ, chúng ta sẽ cấu hình cho từng Spoke Server. Quá trình này tương tự nhau cho tất cả các Spoke.
Trên Spoke Server 1:
Tạo và mở file cấu hình:
sudo nano /etc/wireguard/wg0.conf
Dán nội dung sau và tùy chỉnh:
[Interface]
Address = 10.80.0.2/24
PrivateKey = <NỘI DUNG PRIVATE KEY CỦA SPOKE 1>
[Peer]
PublicKey = <NỘI DUNG PUBLIC KEY CỦA HUB SERVER>
Endpoint = :51820
AllowedIPs = 10.80.0.0/24
PersistentKeepalive = 25
Trên Spoke Server 2:
Tạo và mở file cấu hình /etc/wireguard/wg0.conf
, dán nội dung tương tự nhưng thay đổi Address
:
[Interface]
Address = 10.80.0.3/24
PrivateKey = <NỘI DUNG PRIVATE KEY CỦA SPOKE 2>
[Peer]
PublicKey = <NỘI DUNG PUBLIC KEY CỦA HUB SERVER>
Endpoint = :51820
AllowedIPs = 10.80.0.0/24
PersistentKeepalive = 25
Giải thích cấu hình Spoke:
AllowedIPs = 10.80.0.0/24
: Chỉ định rằng tất cả traffic dành cho mạng VPN nội bộ sẽ được gửi qua tunnel đến Hub Server.PersistentKeepalive = 25
: Giữ kết nối ổn định, đặc biệt hữu ích khi Spoke đứng sau tường lửa NAT.
Bước 5: Kích hoạt & xác thực kết nối
Sau khi đã cấu hình xong tất cả các server, giờ là lúc khởi động mạng VPN.
Thực hiện các lệnh sau trên TẤT CẢ các server (Hub và các Spoke).
Sử dụng wg-quick
để khởi động giao diện mạng wg0
và kích hoạt nó khởi chạy cùng hệ thống.
sudo systemctl enable --now wg-quick@wg0
Xác thực kết nối:
Trên Hub Server, chạy lệnh wg show
để xem trạng thái:
sudo wg show
Bạn sẽ thấy thông tin về interface wg0
và danh sách các peer (Spoke) đã kết nối, bao gồm cả “latest handshake”. Nếu bạn thấy thông tin handshake, kết nối đã thành công.
Kiểm tra cuối cùng:
- Từ Spoke 1, ping đến Hub Server:
ping 10.80.0.1
- Từ Spoke 1, ping đến Spoke 2:
ping 10.80.0.3
- Từ Hub Server, ping đến Spoke 1:
ping 10.80.0.2
Nếu tất cả các lệnh ping đều thành công, xin chúc mừng! Bạn đã xây dựng thành công một mạng riêng ảo an toàn kết nối nhiều server.
Quản lý & xử lý sự cố thường gặp
Vận hành một hệ thống mạng luôn đi kèm với việc quản lý và xử lý sự cố. Dưới đây là các tình huống phổ biến.

Làm thế nào để thêm một Spoke Server mới?
Quá trình này rất đơn giản:
- Trên Spoke Server mới (ví dụ Spoke 3), thực hiện Bước 1 và 2 để cài đặt WireGuard và tạo cặp khóa.
- Trên Hub Server, mở file
wg0.conf
và thêm một khối[Peer]
mới cho Spoke 3, cấp cho nó IP10.80.0.4/32
. - Trên Spoke Server 3, tạo file
wg0.conf
theo mẫu ở Bước 4, sử dụng key của nó và IP10.80.0.4/24
. - Trên Hub Server, reload lại cấu hình:
sudo systemctl restart wg-quick@wg0
. - Trên Spoke Server 3, khởi động WireGuard:
sudo systemctl start wg-quick@wg0
.
Sự cố: Không thể kết nối (No Handshake)
Đây là lỗi phổ biến nhất, cho thấy Spoke không thể “bắt tay” được với Hub.
- Kiểm tra Firewall: Đảm bảo bạn đã chạy
sudo ufw allow 51820/udp
trên Hub Server và firewall đã được kích hoạt. - Kiểm tra
Endpoint
: Đảm bảo địa chỉ IP public và port trong file cấu hình của Spoke là chính xác. - Kiểm tra Public Key: Kiểm tra lại xem bạn có dán nhầm public key giữa Hub và Spoke không. Một ký tự sai cũng sẽ gây lỗi.
Sự cố: Kết nối được nhưng không Ping được các Spoke khác
Lỗi này thường liên quan đến định tuyến hoặc firewall trên Hub Server.
- Kiểm tra IP Forwarding: Chắc chắn rằng
net.ipv4.ip_forward=1
đã được kích hoạt trên Hub. - Kiểm tra
iptables
: Đảm bảo các quy tắc trongPostUp
của Hub Server là chính xác và tên card mạng (eth0
hayens3
) đã đúng. - Kiểm tra
AllowedIPs
: Trên Spoke,AllowedIPs
phải là10.80.0.0/24
để nó có thể “nhìn thấy” toàn mạng. Trên Hub,AllowedIPs
cho mỗi peer phải là địa chỉ IP duy nhất (/32
).
Câu hỏi thường gặp (FAQ)
1. Mô hình này có an toàn không?
Rất an toàn. Toàn bộ traffic giữa các server của bạn được mã hóa bằng các thuật toán tiên tiến. Miễn là bạn giữ bí mật các private key, mạng của bạn được bảo vệ vững chắc.
2. Hiệu suất hệ thống sẽ bị ảnh hưởng như thế nào?
Do chạy trong kernel và rất nhẹ, WireGuard ảnh hưởng rất ít đến hiệu năng CPU. Mức sụt giảm băng thông thường rất thấp, không đáng kể so với các giải pháp VPN khác.
3. Tôi có thể dùng mô hình này cho cụm Kubernetes (K8s) không?
Có thể, nhưng các giải pháp CNI (Container Network Interface) như Calico, Cilium thường là lựa chọn tối ưu hơn cho kết nối mạng bên trong một cụm K8s. Tuy nhiên, bạn có thể dùng WireGuard để kết nối an toàn giữa các cụm K8s khác nhau.
4. Sự khác biệt giữa mô hình này và một Service Mesh như Istio?
WireGuard hoạt động ở lớp mạng (Layer 3), tạo ra một mạng riêng ảo. Service Mesh hoạt động ở lớp ứng dụng (Layer 7), cung cấp các tính năng nâng cao như cân bằng tải, giám sát traffic, xác thực dịch vụ (mTLS) một cách chi tiết hơn. Cả hai có thể được sử dụng bổ sung cho nhau.
Kết luận

Chúc mừng bạn đã hoàn thành cấu hình VPN WireGuard trên VPS Ubuntu và thành công kết nối nhiều vps qua vpn. Bạn không chỉ xây dựng được một “xương sống” mạng an toàn và hiệu quả cho hạ tầng của mình, mà còn nắm vững một trong những công nghệ VPN hiện đại nhất hiện nay.
Với mạng riêng ảo này, các máy chủ của bạn có thể giao tiếp một cách liền mạch và bảo mật, mở ra nhiều khả năng cho việc triển khai ứng dụng, đồng bộ hóa dữ liệu và quản lý hệ thống. Đây là một kỹ năng nền tảng quan trọng cho bất kỳ nhà phát triển hay quản trị viên hệ thống nào trong thế giới điện toán đám mây.
Lưu ý: Hướng dẫn này tập trung vào việc kết nối nhiều server với nhau. Nếu bạn chỉ cần một VPN server cá nhân để truy cập Internet an toàn, hãy xem bài viết Hướng dẫn cài đặt VPN WireGuard trên VPS Ubuntu của chúng tôi.