Hướng dẫn cài đặt VPN WireGuard trên VPS Ubuntu
Trong thế giới số ngày nay, quyền riêng tư và bảo mật dữ liệu cá nhân là điều vô cùng quan trọng. Việc sử dụng các mạng Wi-Fi công cộng tiềm ẩn nhiều rủi ro, và các nhà cung cấp dịch vụ Internet có thể theo dõi mọi hoạt động trực tuyến của bạn. Một giải pháp hiệu quả cho vấn đề này là sử dụng Mạng riêng ảo (VPN).
Tuy nhiên, thay vì tin tưởng dữ liệu của mình cho một công ty VPN bên thứ ba, tại sao không tự tạo ra “đường hầm” Internet của riêng bạn? Trong bài viết này, chúng tôi sẽ hướng dẫn bạn toàn bộ quy trình cài đặt VPN WireGuard trên VPS Ubuntu một cách đơn giản và hiệu quả nhất.
WireGuard là một giao thức VPN cực kỳ hiện đại, nổi tiếng với tốc độ vượt trội, cấu hình tối giản và sử dụng các thuật toán mã hóa tân tiến nhất. Bằng cách làm theo hướng dẫn này, bạn sẽ sở hữu một VPN server cá nhân, cho phép bạn và người thân truy cập Internet an toàn từ mọi nơi.

WireGuard hoạt động như thế nào? Sức mạnh của Cryptokey Routing
Khác với các VPN truyền thống, sức mạnh của WireGuard nằm ở một khái niệm cốt lõi gọi là “Cryptokey Routing”. Hiểu đơn giản, hệ thống sẽ tạo ra một mối liên kết chặt chẽ giữa khóa mã hóa công khai (Public Key) của một client và địa chỉ IP được phép (AllowedIPs) của client đó.

- Khi gửi dữ liệu đi, server sẽ nhìn vào IP đích để quyết định phải dùng Public Key của client nào để mã hóa.
- Khi nhận dữ liệu về, server sẽ giải mã gói tin, xác thực Public Key của người gửi, rồi kiểm tra xem IP nguồn của gói tin có nằm trong danh sách
AllowedIPs
của client đó hay không.
Cách làm này biến firewall và việc định tuyến trở nên cực kỳ đơn giản và an toàn, vì chỉ những client đã được xác thực mới có thể gửi dữ liệu từ những IP đã được cấp phép.
Chuẩn bị cần thiết
Trước khi bắt đầu, hãy đảm bảo bạn đã có đủ các “nguyên liệu” sau. Quá trình chuẩn bị tốt sẽ giúp việc cài đặt diễn ra suôn sẻ hơn rất nhiều.
- Một VPS (Virtual Private Server): Đây sẽ là “ngôi nhà” cho VPN server của bạn. Hãy chọn một nhà cung cấp uy tín và cài đặt hệ điều hành Ubuntu phiên bản 22.04 LTS hoặc 20.04 LTS.
- Quyền truy cập
sudo
: Bạn cần có quyền quản trị cao nhất trên VPS để cài đặt phần mềm và chỉnh sửa các file cấu hình hệ thống. - Kết nối SSH: Một trình kết nối SSH như PuTTY (cho Windows) hoặc Terminal (cho macOS/Linux) để bạn có thể ra lệnh cho VPS từ xa.
Phần 1: Cài đặt và cấu hình WireGuard trên Server
Đây là phần quan trọng nhất, nơi chúng ta sẽ xây dựng nền móng cho VPN server. Hãy thực hiện cẩn thận từng bước để đảm bảo hệ thống hoạt động chính xác.

Bước 1: Cập nhật hệ thống
Trước khi cài đặt bất cứ phần mềm nào, việc đầu tiên luôn là cập nhật danh sách các gói tin và nâng cấp hệ thống. Điều này đảm bảo tính tương thích và vá các lỗ hổng bảo mật đã biết, giúp server của bạn an toàn hơn.
Mở kết nối SSH tới VPS của bạn và chạy lệnh sau:
sudo apt update && sudo apt upgrade -y
Bước 2: Cài đặt WireGuard
Giờ đây, hệ thống của bạn đã sẵn sàng. Chúng ta sẽ tiến hành cài đặt WireGuard chỉ bằng một dòng lệnh đơn giản. Gói phần mềm này đã có sẵn trong kho lưu trữ mặc định của Ubuntu, giúp việc cài đặt trở nên dễ dàng.
sudo apt install wireguard -y
Bước 3: Tạo cặp khóa bảo mật cho Server
WireGuard sử dụng cơ chế mã hóa bất đối xứng, bao gồm một khóa riêng tư (Private Key) và một khóa công khai (Public Key). Khóa riêng tư phải được giữ bí mật tuyệt đối trên server, trong khi khóa công khai sẽ được chia sẻ cho các client để xác thực.
Để tạo cặp khóa này một cách an toàn, hãy chạy các lệnh sau:
cd /etc/wireguard
umask 077
wg genkey | sudo tee privatekey | wg pubkey | sudo tee publickey
Lệnh umask 077
đảm bảo rằng các file khóa được tạo ra chỉ có người dùng root mới có quyền đọc, tăng cường bảo mật cho hệ thống.
Bước 4: Tìm tên card mạng Public của VPS
Đây là bước cực kỳ quan trọng mà rất nhiều hướng dẫn khác bỏ qua, dẫn đến lỗi kết nối. Mỗi VPS có thể có tên card mạng khác nhau (ví dụ: eth0
, ens3
, eno1
…). Chúng ta cần tìm ra tên chính xác để cấu hình tường lửa cho đúng.
Chạy lệnh sau để xem danh sách các card mạng:
ip -br a
Bạn sẽ thấy một danh sách hiện ra. Hãy tìm dòng có chứa địa chỉ IP Public của VPS bạn. Tên ở đầu dòng (ví dụ ens3
) chính là tên card mạng chúng ta cần. Hãy ghi nhớ nó cho các bước tiếp theo.
Bước 5: Tạo file cấu hình Server wg0.conf
Tất cả các thiết lập của WireGuard server sẽ nằm trong một file cấu hình duy nhất. Chúng ta sẽ tạo và chỉnh sửa file này.
sudo nano /etc/wireguard/wg0.conf
Sao chép toàn bộ nội dung dưới đây và dán vào file. Sau đó, hãy thay thế <NỘI DUNG PRIVATE KEY CỦA SERVER>
bằng nội dung bạn lấy từ lệnh sudo cat /etc/wireguard/privatekey
.
[Interface]
# Địa chỉ IP nội bộ của VPN Server (cả IPv4 và IPv6)
# Dải IPv6 này là dải địa chỉ riêng, bạn có thể giữ nguyên
Address = 10.10.0.1/24, fd42:42:42::1/64
# Lưu lại cấu hình peer khi có thay đổi
SaveConfig = true
# Private Key của Server
PrivateKey = <NỘI DUNG PRIVATE KEY CỦA SERVER>
# Cổng mà VPN Server sẽ lắng nghe
ListenPort = 51820
Sau khi chỉnh sửa xong, nhấn Ctrl + X
, sau đó Y
và Enter
để lưu lại.
Bước 6: Kích hoạt IP Forwarding
Để VPS có thể chuyển tiếp các gói tin từ mạng VPN ra ngoài Internet và ngược lại, chúng ta cần bật tính năng IP Forwarding của nhân Linux.
Mở file cấu hình hệ thống:
sudo nano /etc/sysctl.conf
Tìm và bỏ dấu #
ở đầu các dòng sau (nếu chúng có dấu #
). Nếu không tìm thấy, bạn chỉ cần thêm chúng vào cuối file:
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
Lưu file lại và chạy lệnh sau để áp dụng thay đổi ngay lập tức mà không cần khởi động lại VPS:
sudo sysctl -p
Bước 7: Cấu hình Firewall và định tuyến với UFW
Thay vì dùng lệnh iptables
trực tiếp, chúng ta sẽ để cho UFW quản lý luôn cả việc định tuyến (forwarding). Cách làm này nhất quán, an toàn và dễ quản lý hơn.
7.1. Cho phép Forwarding trong UFW
Đầu tiên, chúng ta cần cho phép chính sách chuyển tiếp mặc định trong file cấu hình chính của UFW.
sudo nano /etc/default/ufw
Tìm dòng DEFAULT_FORWARD_POLICY="DROP"
và sửa nó thành DEFAULT_FORWARD_POLICY="ACCEPT"
.
DEFAULT_FORWARD_POLICY="ACCEPT"
Lưu file và thoát.
7.2. Thêm quy tắc NAT cho UFW

Tiếp theo, chúng ta sẽ thêm các quy tắc NAT (Network Address Translation) vào file before.rules
của UFW. Các quy tắc này giúp “che giấu” địa chỉ IP nội bộ của client, làm cho mọi truy cập ra Internet đều mang địa chỉ IP của server.
sudo nano /etc/ufw/before.rules
Thêm đoạn mã sau vào đầu file, ngay phía trên các dòng *filter
. Hãy nhớ thay <TÊN CARD MẠNG CỦA BẠN>
bằng tên card mạng bạn đã tìm được ở Bước 4.
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Cho phép traffic từ client WireGuard ra WAN (IPv4)
-A POSTROUTING -s 10.10.0.0/24 -o <TÊN CARD MẠNG CỦA BẠN> -j MASQUERADE
# Cho phép traffic từ client WireGuard ra WAN (IPv6)
-A POSTROUTING -s fd42:42:42::/64 -o <TÊN CARD MẠNG CỦA BẠN> -j MASQUERADE
COMMIT
Lưu file và thoát.
7.3. Mở cổng và kích hoạt UFW
Cuối cùng, chúng ta cho phép cổng WireGuard và cổng SSH (để phòng trường hợp mất kết nối), sau đó kích hoạt UFW.
# Luôn cho phép SSH để không bị mất kết nối
sudo ufw allow ssh
# Cho phép cổng WireGuard
sudo ufw allow 51820/udp
# Kích hoạt UFW
sudo ufw enable
Hệ thống sẽ hỏi bạn xác nhận, hãy nhập y
và Enter để tiếp tục.
Bước 8: Khởi động và kiểm tra WireGuard Server
Tất cả các bước cấu hình đã hoàn tất. Giờ là lúc khởi động dịch vụ và thiết lập để nó tự chạy mỗi khi VPS khởi động lại.
sudo systemctl start wg-quick@wg0
sudo systemctl enable wg-quick@wg0
Để xem trạng thái chi tiết của dịch vụ, bạn có thể dùng lệnh:
sudo systemctl status wg-quick@wg0
Lưu ý: Bạn có thể sẽ thấy trạng thái là
active (exited)
. Đừng lo lắng, đây là hành vi hoàn toàn bình thường.wg-quick
là một kịch bản (script) chỉ chạy một lần để thiết lập giao diện mạng WireGuard (wg0
) rồi thoát. Giao diện mạng đó vẫn đang hoạt động ngầm trong kernel của Linux.
Phần 2: Cấu hình và kết nối Client
Server đã sẵn sàng, bây giờ chúng ta cần cấu hình cho các thiết bị người dùng (máy tính, điện thoại) để chúng có thể kết nối vào.

Bước 9: Tạo cặp khóa cho Client
Tương tự như server, mỗi client cũng cần một cặp khóa riêng. Bạn có thể tạo cặp khóa này ngay trên server cho tiện quản lý. Chúng ta sẽ đặt tên chúng là client1_privatekey
và client1_publickey
.
cd /etc/wireguard
wg genkey | sudo tee client1_privatekey | wg pubkey | sudo tee client1_publickey
Bước 10: Thêm thông tin Client (Peer) vào Server
Bây giờ, chúng ta cần “giới thiệu” client này với server bằng cách thêm public key của nó vào file cấu hình của server.
Mở lại file cấu hình wg0.conf
:
sudo nano /etc/wireguard/wg0.conf
Kéo xuống cuối file và thêm vào khối [Peer]
như sau. Hãy thay <NỘI DUNG PUBLIC KEY CỦA CLIENT1>
bằng nội dung trong file client1_publickey
(dùng lệnh sudo cat /etc/wireguard/client1_publickey
để xem).
[Peer]
# Public Key của Client 1
PublicKey = <NỘI DUNG PUBLIC KEY CỦA CLIENT1>
# Địa chỉ IP nội bộ cấp cho Client 1
AllowedIPs = 10.10.0.2/32, fd42:42:42::2/128
Lưu file lại. Sau đó, khởi động lại dịch vụ WireGuard để áp dụng thay đổi:
sudo systemctl restart wg-quick@wg0
Bước 11: Tạo file cấu hình hoàn chỉnh cho Client
Bước cuối cùng là tạo một file cấu hình .conf
cho thiết bị client. Bạn có thể tạo file này trên server rồi sao chép nội dung, hoặc tạo trực tiếp trên máy client.
Nội dung file sẽ như sau (ví dụ: client1.conf
). Hãy thay thế các giá trị trong dấu < >
:
<NỘI DUNG PRIVATE KEY CỦA CLIENT1>
: Dùng lệnhsudo cat /etc/wireguard/client1_privatekey
trên server để lấy.<NỘI DUNG PUBLIC KEY CỦA SERVER>
: Dùng lệnhsudo cat /etc/wireguard/publickey
trên server để lấy.<IP PUBLIC CỦA VPS>
: Địa chỉ IP công khai của VPS của bạn.
[Interface]
# Private Key của Client
PrivateKey = <NỘI DUNG PRIVATE KEY CỦA CLIENT1>
# Địa chỉ IP nội bộ của Client (sử dụng /32 cho IPv4 và /128 cho IPv6)
Address = 10.10.0.2/32, fd42:42:42::2/128
# Máy chủ DNS để phân giải tên miền (sử dụng của Cloudflare)
DNS = 1.1.1.1
[Peer]
# Public Key của Server
PublicKey = <NỘI DUNG PUBLIC KEY CỦA SERVER>
# Địa chỉ và cổng của Server
Endpoint = <IP PUBLIC CỦA VPS>:51820
# Chuyển toàn bộ lưu lượng truy cập qua VPN
AllowedIPs = 0.0.0.0/0, ::/0
# Giữ kết nối ổn định khi client đứng sau NAT
PersistentKeepalive = 25
Phần 3: Kết nối và xác thực
Với file client1.conf
đã tạo, bạn chỉ cần tải ứng dụng WireGuard chính thức về thiết bị của mình và nhập file cấu hình này vào.
- Tải ứng dụng: Truy cập trang chủ wireguard.com/install để tải phiên bản phù hợp cho Windows, macOS, Android, iOS hoặc Linux.
- Nhập cấu hình: Mở ứng dụng và chọn “Import tunnel(s) from file” hoặc “Add a tunnel”, sau đó chọn file
client1.conf
của bạn. - Kết nối: Bật kết nối vừa tạo.
Để xác thực VPN đã hoạt động, hãy mở trình duyệt và truy cập một trang web kiểm tra IP như whatismyip.com. Nếu địa chỉ IP hiển thị là IP của VPS, bạn đã kết nối thành công!
Xử lý các lỗi thường gặp
Trong quá trình cài đặt, đôi khi bạn có thể gặp một số sự cố. Dưới đây là cách khắc phục các vấn đề phổ biến nhất.

Sự cố: Đã kết nối nhưng không truy cập được Internet
- Nguyên nhân 1: Sai tên card mạng trong file
/etc/ufw/before.rules
. Hãy kiểm tra lại kết quả của lệnhip -br a
và đảm bảo bạn đã điền đúng. - Nguyên nhân 2: Chưa bật IP Forwarding. Hãy kiểm tra lại file
/etc/sysctl.conf
và chạy lạisudo sysctl -p
. - Nguyên nhân 3: Lỗi DNS. Hãy chắc chắn rằng bạn đã thêm dòng
DNS = 1.1.1.1
trong file cấu hình của client.
Sự cố: Client không thể kết nối đến Server (No Handshake)
- Nguyên nhân 1: Tường lửa đang chặn kết nối. Hãy đảm bảo bạn đã chạy lệnh
sudo ufw allow 51820/udp
vàsudo ufw enable
. - Nguyên nhân 2: Sai địa chỉ IP hoặc Public Key. Kiểm tra kỹ
Endpoint
vàPublicKey
trong file cấu hình của client. Một ký tự sai cũng sẽ làm kết nối thất bại.
Mẹo quản lý nhiều Client
Nếu bạn muốn tạo VPN cho gia đình hoặc bạn bè, việc thêm client mới rất đơn giản. Với mỗi client mới (ví dụ: client2), bạn chỉ cần lặp lại 3 bước:
- Tạo cặp khóa mới trên server:
wg genkey | sudo tee client2_privatekey | wg pubkey | sudo tee client2_publickey
. - Thêm khối
[Peer]
mới vào cuối filewg0.conf
, cấp cho nó một IP mới (ví dụ:AllowedIPs = 10.10.0.3/32, fd42:42:42::3/128
). - Tạo file cấu hình
client2.conf
mới với các khóa tương ứng và địa chỉ IP10.10.0.3/32, fd42:42:42::3/128
.
Đừng quên khởi động lại dịch vụ WireGuard trên server (sudo systemctl restart wg-quick@wg0
) sau mỗi lần chỉnh sửa file wg0.conf
.
Câu hỏi thường gặp (FAQ)
1. WireGuard có thực sự an toàn không?
Có. WireGuard được thiết kế với triết lý tối giản và sử dụng các thuật toán mã hóa hiện đại nhất, được cộng đồng bảo mật đánh giá rất cao về độ an toàn.
2. Tốc độ của WireGuard so với các VPN khác như OpenVPN thế nào?
WireGuard nhanh hơn đáng kể so với OpenVPN. Do có ít dòng mã hơn và chạy trực tiếp trong nhân Linux, nó cho thông lượng cao hơn và độ trễ thấp hơn, rất lý tưởng cho việc chơi game hoặc xem video.
3. Tôi có thể kết nối bao nhiêu thiết bị cùng lúc?
Về lý thuyết, bạn có thể thêm rất nhiều client. Giới hạn thực tế phụ thuộc vào tài nguyên CPU và băng thông của gói VPS mà bạn thuê. Với một VPS thông thường, việc kết nối 5-10 thiết bị là hoàn toàn khả thi.
4. Chi phí duy trì VPN server này là bao nhiêu?
Chi phí duy nhất là phí thuê VPS hàng tháng. WireGuard là một phần mềm mã nguồn mở và hoàn toàn miễn phí.
Kết luận
Chúc mừng bạn đã hoàn thành việc cài đặt VPN WireGuard trên VPS Ubuntu của riêng mình! Giờ đây, bạn đã có toàn quyền kiểm soát dữ liệu và hoạt động trực tuyến của mình, tận hưởng một kết nối Internet an toàn và không bị giới hạn.
Quá trình này có thể hơi phức tạp lúc đầu, nhưng thành quả nhận được là hoàn toàn xứng đáng. Bạn không chỉ học được nhiều kiến thức về quản trị hệ thống Linux mà còn xây dựng được một công cụ bảo mật mạnh mẽ.
Nếu bạn có bất kỳ câu hỏi nào trong quá trình thực hiện, đừng ngần ngại để lại bình luận bên dưới. Chúc bạn thành công!