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.
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;
AllowedIPshai 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 wg0thà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
- Ubuntu Server – WireGuard VPN: https://ubuntu.com/server/docs/how-to/wireguard-vpn/
- Ubuntu Server – Introduction to WireGuard: https://ubuntu.com/server/docs/explanation/intro-to/wireguard-vpn/
- Ubuntu Server – Using VPN as default gateway: https://ubuntu.com/server/docs/how-to/wireguard-vpn/vpn-as-the-default-gateway/
- Ubuntu Server – WireGuard troubleshooting: https://ubuntu.com/server/docs/how-to/wireguard-vpn/troubleshooting/
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 →