Hướng Dẫn Cài WireGuard VPN Trên VPS Ubuntu Từ A-Z 2026

Hướng dẫn cài WireGuard VPN trên VPS Ubuntu: tạo key, cấu hình server/client, bật IP forwarding, NAT, UFW, tự khởi động cùng hệ thống và xử lý lỗi handshake.

WireGuard là một VPN hiện đại, gọn nhẹ và đa nền tảng, phù hợp khi bạn muốn biến VPS Ubuntu thành cổng VPN riêng để truy cập mạng an toàn từ laptop, điện thoại hoặc một máy chủ khác. So với nhiều giải pháp VPN truyền thống, WireGuard tập trung vào mô hình peer-to-peer với cặp khóa public/private, cấu hình ngắn và routing rõ ràng. Tuy nhiên, để dùng VPS làm VPN gateway thực tế, bạn vẫn cần xử lý đúng IP forwarding, NAT, firewall và AllowedIPs. Bài viết này hướng dẫn từng bước từ cài WireGuard, tạo key, dựng interface `wg0`, thêm client đầu tiên, bật forwarding, mở UDP port, tự khởi động sau reboot và chẩn đoán các lỗi phổ biến như không handshake, có VPN nhưng không ra Internet hoặc DNS không hoạt động.

Điểm quan trọng Hãy lựa chọn dịch vụ dựa trên nhu cầu sử dụng thực tế và theo dõi tài nguyên thường xuyên để có hiệu quả tốt nhất.

WireGuard là lựa chọn rất phù hợp nếu bạn cần một VPN riêng trên VPS Ubuntu để kết nối laptop, điện thoại hoặc máy chủ khác qua một đường hầm mã hóa. Ubuntu hiện có tài liệu chính thức riêng cho WireGuard, bao gồm các mô hình peer-to-site, site-to-site và dùng VPS làm default gateway.

Điểm mạnh của WireGuard là cấu hình tương đối ngắn: mỗi peer có một private key, public key, địa chỉ VPN và danh sách AllowedIPs. Tuy nhiên, khi dùng VPS làm gateway ra Internet, bạn còn phải bật IP forwarding và cấu hình NAT/masquerade.

Nếu bạn chưa quen SSH, có thể đọc trước bài Dùng SSH key cho VPS Ubuntu và tắt đăng nhập mật khẩu. Nếu VPS public Internet, bài Cài Fail2Ban trên VPS Ubuntu cũng là một lớp bảo mật nên tham khảo.

1. WireGuard là gì?

WireGuard là VPN hiện đại hoạt động ở lớp network interface. Mỗi peer có:

  • private key;
  • public key;
  • địa chỉ IP trong mạng VPN;
  • peer public key của phía còn lại;
  • AllowedIPs để xác định traffic nào đi qua tunnel;
  • Endpoint ở phía cần biết địa chỉ public để chủ động khởi tạo kết nối.

Ubuntu mô tả WireGuard là giải pháp VPN đơn giản, nhanh và đa nền tảng.

2. Mô hình trong bài này

Ta sẽ dùng một VPS Ubuntu làm VPN gateway:

Laptop/Phone
10.20.0.2
   │
   │ WireGuard UDP 51820
   ▼
VPS Ubuntu
10.20.0.1
   │
   ▼
Internet

Mạng VPN nội bộ:

10.20.0.0/24

Server:

10.20.0.1/24

Client đầu tiên:

10.20.0.2/32

Bạn có thể thay subnet nếu bị trùng với mạng đang dùng.

3. Chuẩn bị VPS Ubuntu

Bạn cần:

  • Ubuntu Server đang được hỗ trợ;
  • quyền sudo;
  • IPv4 public hoặc hostname trỏ tới VPS;
  • một UDP port có thể mở trên firewall;
  • client WireGuard trên máy tính/điện thoại.

Nếu đang cần máy Linux để dựng VPN hoặc ứng dụng 24/7, có thể tham khảo VPS tại HUONG CLOUD.

4. Cập nhật hệ thống

sudo apt update
sudo apt upgrade -y

Kiểm tra có cần reboot không:

if [ -f /var/run/reboot-required ]; then cat /var/run/reboot-required; fi

Nếu cần, reboot rồi SSH lại.

5. Cài WireGuard

Ubuntu hỗ trợ trực tiếp:

sudo apt install wireguard -y

Kiểm tra:

wg --version

6. Tạo private key và public key cho server

Trước tiên đặt umask để file tạo ra không bị đọc bởi user khác:

umask 077

Tạo private key:

wg genkey | sudo tee /etc/wireguard/server.key > /dev/null

Tạo public key:

sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub

Kiểm tra:

sudo ls -l /etc/wireguard/server.*

Private key phải được bảo vệ. Không gửi file server.key cho client.

7. Xem public key server

sudo cat /etc/wireguard/server.pub

Public key này sẽ được dùng ở cấu hình client.

8. Xác định interface Internet của VPS

Chạy:

ip route

Bạn có thể thấy:

default via ... dev eth0

Hoặc interface có tên như:

ens3
ens18

Ghi lại tên interface public vì sẽ dùng cho NAT.

9. Tạo cấu hình wg0

Tạo file:

sudo nano /etc/wireguard/wg0.conf

Ví dụ:

[Interface]
Address = 10.20.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

Thay SERVER_PRIVATE_KEY bằng nội dung của:

sudo cat /etc/wireguard/server.key

Sau đó giới hạn quyền:

sudo chmod 600 /etc/wireguard/wg0.conf

Cách không nhúng private key trực tiếp

Ubuntu cũng minh họa cách dùng PostUp = wg set %i private-key ... để private key nằm ở file riêng. Đây là lựa chọn tốt nếu bạn muốn tách secret khỏi config.

10. Bật IPv4 forwarding

Để VPS chuyển traffic từ WireGuard interface ra Internet:

sudo nano /etc/sysctl.d/70-wireguard-routing.conf

Thêm:

net.ipv4.ip_forward = 1

Áp dụng:

sudo sysctl -p /etc/sysctl.d/70-wireguard-routing.conf -w

Kiểm tra:

sysctl net.ipv4.ip_forward

Kết quả mong đợi:

net.ipv4.ip_forward = 1

11. Cấu hình NAT cho client ra Internet

Giả sử interface public là eth0:

sudo iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth0 -j MASQUERADE

Thay eth0 bằng interface thật.

Ubuntu cũng minh họa quy tắc masquerade tương tự khi dùng WireGuard làm default gateway.

Làm NAT persistent

Có nhiều cách quản lý firewall lâu dài như nftables hoặc iptables persistence. Không nên chỉ thêm rule thủ công rồi quên vì sau reboot rule có thể mất.

Nếu hệ thống của bạn quản lý firewall bằng nftables, hãy dùng nftables làm nguồn cấu hình chính để tránh xung đột.

12. Mở UDP port WireGuard trên UFW

Nếu đang dùng UFW:

sudo ufw allow 51820/udp

Kiểm tra:

sudo ufw status verbose

Không cần mở TCP 51820 vì WireGuard dùng UDP.

13. Khởi động interface WireGuard

sudo wg-quick up wg0

Kiểm tra:

sudo wg

Và:

ip addr show wg0

Bạn phải thấy địa chỉ:

10.20.0.1/24

14. Cho WireGuard tự chạy sau reboot

Ubuntu cung cấp systemd service wg-quick@.

Bật:

sudo systemctl enable wg-quick@wg0

Kiểm tra:

sudo systemctl status wg-quick@wg0

15. Tạo key cho client

Bạn có thể tạo key trực tiếp trên client hoặc tạo tạm ở VPS rồi chuyển theo kênh an toàn.

Ví dụ trên Linux client:

umask 077
wg genkey > client.key
wg pubkey < client.key > client.pub

Xem public key:

cat client.pub

Private key client.key chỉ nằm ở client.

16. Thêm client vào server

Sửa:

sudo nano /etc/wireguard/wg0.conf

Thêm:

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.20.0.2/32

Sau đó reload interface:

sudo systemctl reload wg-quick@wg0

Nếu reload không phù hợp với cấu hình cụ thể, có thể restart trong maintenance window:

sudo systemctl restart wg-quick@wg0

17. Tạo cấu hình client

Ví dụ:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.20.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = IP_VPS:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Ý nghĩa AllowedIPs = 0.0.0.0/0

Toàn bộ IPv4 traffic của client sẽ đi qua VPN.

Nếu bạn chỉ muốn client truy cập mạng WireGuard, có thể dùng:

AllowedIPs = 10.20.0.0/24

Đừng dùng default route nếu mục tiêu chỉ là truy cập một dịch vụ nội bộ.

18. PersistentKeepalive có bắt buộc không?

Không trong mọi tình huống.

Nó hữu ích khi client nằm sau NAT/firewall và cần giữ mapping hoạt động để server có thể trả traffic ổn định.

Giá trị 25 giây thường được dùng trong tài liệu WireGuard cho các peer sau NAT, nhưng chỉ bật khi cần.

19. Cài WireGuard trên iPhone/Android

Trên điện thoại, cài ứng dụng WireGuard chính thức từ kho ứng dụng phù hợp.

Bạn có thể:

  • nhập config thủ công;
  • import file .conf;
  • dùng QR code nếu quy trình của bạn tạo QR an toàn.

Không đăng QR chứa private key lên nơi công khai.

20. Test handshake

Sau khi bật client, trên server:

sudo wg

Nếu hoạt động, peer sẽ có:

latest handshake
transfer

Ubuntu cũng khuyến nghị dùng:

watch wg

để theo dõi handshake realtime khi troubleshooting.

21. Test ping trong mạng VPN

Từ client:

ping 10.20.0.1

Nếu không ping được, kiểm tra:

  • public/private key;
  • AllowedIPs;
  • firewall;
  • IP subnet;
  • endpoint/port.

22. Test Internet qua VPN

Nếu client dùng:

AllowedIPs = 0.0.0.0/0

hãy kiểm tra public IP bằng một dịch vụ xác định IP hoặc:

curl ifconfig.me

Public IP nên là IP của VPS hoặc IP egress của hạ tầng VPS.

23. VPN kết nối nhưng không ra Internet

Đây là lỗi rất phổ biến.

Kiểm tra:

sysctl net.ipv4.ip_forward

Phải là:

1

Kiểm tra NAT:

sudo iptables -t nat -L -n -v

Kiểm tra interface public:

ip route

Nếu NAT dùng sai interface, traffic sẽ không ra ngoài đúng cách.

24. Có handshake nhưng không ping được

Ubuntu troubleshooting khuyến nghị kiểm tra:

  • key có bị nhầm không;
  • AllowedIPs hai phía;
  • route;
  • địa chỉ trên interface;
  • IP forwarding khi cần routing.

Chạy:

sudo wg
ip route
ip addr show wg0

25. Không có handshake

Kiểm tra:

UDP port

sudo ss -lunp | grep 51820

Firewall

sudo ufw status

Endpoint

Client phải trỏ đúng:

IP_VPS:51820

Public key

Server phải có public key client, client phải có public key server.

Private key không trao đổi giữa các peer.

26. DNS không hoạt động sau khi bật VPN

Nếu traffic IP hoạt động nhưng domain không resolve, kiểm tra DNS client.

Trong config client có thể đặt:

DNS = 1.1.1.1

hoặc DNS resolver bạn tin cậy.

Ubuntu lưu ý rằng khi dùng VPN làm default gateway, DNS cần được xem xét riêng để tránh vẫn dùng resolver của mạng local không mong muốn.

27. Thêm client thứ hai

Tạo key riêng cho client mới và dùng IP khác:

10.20.0.3/32

Trên server:

[Peer]
PublicKey = CLIENT_2_PUBLIC_KEY
AllowedIPs = 10.20.0.3/32

Mỗi client nên có key riêng.

Không chia sẻ chung một private key cho nhiều thiết bị.

28. Thu hồi một client

Xóa [Peer] tương ứng khỏi server config rồi reload.

Bạn không cần thay key của các client khác.

Đây là một lợi thế lớn của mô hình peer riêng.

29. WireGuard có thay thế SSH key không?

Không.

WireGuard bảo vệ đường mạng; SSH key bảo vệ xác thực SSH.

Một mô hình an toàn có thể là:

  • WireGuard cho truy cập private network;
  • SSH chỉ listen/bị firewall giới hạn trong VPN;
  • public key auth cho SSH.

30. Có thể chỉ cho SSH đi qua WireGuard không?

Có.

Sau khi VPN ổn định, bạn có thể giới hạn firewall SSH chỉ cho subnet:

10.20.0.0/24

Nhưng không nên đóng SSH public trước khi test WireGuard và có console dự phòng.

Nếu VPN lỗi, bạn có thể tự khóa khỏi VPS.

31. WireGuard có làm Internet nhanh hơn không?

Không mặc định.

VPN tạo thêm một đường hầm và thêm VPS làm hop trung gian. Tốc độ phụ thuộc:

  • CPU VPS;
  • bandwidth;
  • route;
  • latency;
  • MTU;
  • mạng client.

WireGuard được thiết kế hiệu quả, nhưng không thể vượt giới hạn đường truyền vật lý.

32. WireGuard có ẩn hoàn toàn danh tính không?

Không nên coi VPN tự host là công cụ “ẩn danh tuyệt đối”.

Website bên ngoài sẽ thấy IP egress của VPS, còn nhà cung cấp VPS vẫn có thể biết metadata hạ tầng của máy bạn thuê.

Mục tiêu chính là mã hóa đường truyền giữa client và VPS, kiểm soát routing và truy cập mạng riêng.

33. MTU và lỗi một số website không tải

Nếu VPN handshake được nhưng một số site/API treo, MTU có thể là một nguyên nhân.

Bạn có thể thử đặt MTU thấp hơn trong interface config, nhưng không nên thay đổi trước khi kiểm tra route và packet size.

Dùng tracepath hoặc công cụ mạng phù hợp để chẩn đoán.

34. Bảo mật private key WireGuard

Private key của server/client phải được giữ bí mật.

Trên server:

sudo chmod 600 /etc/wireguard/*.key
sudo chmod 600 /etc/wireguard/*.conf

Không lưu private key vào Git.

35. Backup WireGuard config

Nên backup:

/etc/wireguard/
/etc/sysctl.d/70-wireguard-routing.conf

và firewall/NAT config.

Backup phải được mã hóa vì chứa private key.

36. Checklist WireGuard VPN VPS Ubuntu

  • Cài wireguard.
  • Tạo server key.
  • Tạo wg0.conf.
  • Bật ip_forward.
  • Cấu hình NAT.
  • Mở UDP port.
  • wg-quick up wg0 thành công.
  • Enable wg-quick@wg0.
  • Tạo key riêng cho client.
  • Thêm peer server/client.
  • Có handshake.
  • Test ping VPN.
  • Test Internet nếu dùng default route.
  • Backup config an toàn.

37. FAQ về WireGuard trên VPS Ubuntu

WireGuard dùng TCP hay UDP?

WireGuard dùng UDP.

Có cần mở port 51820 không?

Chỉ nếu bạn chọn port 51820. WireGuard có thể dùng UDP port khác, nhưng firewall và client phải khớp.

Có thể chạy nhiều client không?

Có. Mỗi client nên có key và IP riêng.

AllowedIPs = 0.0.0.0/0 nghĩa là gì?

Toàn bộ IPv4 traffic được route qua peer đó.

WireGuard có tự chạy sau reboot không?

Có thể bật bằng:

sudo systemctl enable wg-quick@wg0

VPN kết nối nhưng không ra Internet vì sao?

Thường do chưa bật IP forwarding, NAT sai hoặc firewall chặn traffic.

Có nên đóng SSH public sau khi có WireGuard?

Có thể, nhưng chỉ sau khi VPN hoạt động ổn định và bạn có phương án console/rescue nếu VPN lỗi.

Kết luận

Cài WireGuard VPN trên VPS Ubuntu là cách hiệu quả để tạo một mạng riêng cho laptop, điện thoại và các máy chủ khác. Cấu hình cốt lõi khá ngắn, nhưng phần routing, NAT và firewall quyết định tunnel có thật sự hoạt động như mong muốn hay không.

Hãy tạo key riêng cho từng client, giữ private key bí mật, bật IP forwarding đúng nhu cầu và kiểm tra AllowedIPs khi gặp lỗi. Nếu dùng VPN làm default gateway, cần kiểm tra thêm DNS và route.

Nếu bạn cần VPS Ubuntu tại HUONG CLOUD để dựng VPN, môi trường phát triển hoặc hạ tầng ứng dụng 24/7, hãy chọn location và bandwidth dựa trên thiết bị/client thực tế sẽ kết nối tới VPS.

Nguồn tham khảo

Kết luận

Nếu chưa chắc cấu hình hoặc loại dịch vụ nào phù hợp, hãy gửi nhu cầu thực tế để đội ngũ hỗ trợ tư vấn trước khi mua.

Chưa biết nên chọn gói nào?

Xem bảng giá VPS hoặc liên hệ đội ngũ hỗ trợ để chọn cấu hình phù hợp.

Xem bảng giá VPS →