Chuyển đến nội dung chính
Giảm 50% tất cả các gói, có thời hạn. Khởi điểm từ $2.48/mo
12 min left
Bảo mật và Mạng

Cách thiết lập WireGuard VPN trên VPS

Pius Bodenmann Bởi Pius Bodenmann 12 phút đọc Đã cập nhật bởi Mir 12d ago
WireGuard VPN tunnel active on an Ubuntu VPS terminal and a phone client

Một WireGuard VPN tự lưu trữ mang lại cho laptop và điện thoại của bạn một đường truyền được mã hóa tới máy chủ do bạn kiểm soát. Nó hữu ích khi bạn muốn một IP ra ổn định, truy cập an toàn trên Wi-Fi không đáng tin, hoặc một tuyến riêng vào mạng khác. Nó không khiến bạn ẩn danh: các trang web vẫn thấy một địa chỉ VPS duy nhất, và nhà cung cấp hosting vẫn vận hành mạng bên dưới.

Hướng dẫn này dựng một VPN full-tunnel IPv4 trên Ubuntu Server. Bạn sẽ cài WireGuard, tạo khóa với quyền hạn chế, bật định tuyến, thêm quy tắc tường lửa và NAT, kết nối máy khách desktop và di động, rồi kiểm tra đường hầm. Thiết kế tương tự có thể hỗ trợ IPv6, nhưng chỉ sau khi VPS có dải IPv6 được định tuyến và bạn cấu hình riêng phần chuyển tiếp cùng quy tắc tường lửa IPv6.

WireGuard là gì?

WireGuard là một giao thức VPN hiện đại, đa nền tảng cùng phần triển khai của nó, truyền các gói IP đã mã hóa qua UDP. đặc tả giao thức WireGuard định nghĩa một tập cố định các nguyên hàm mật mã, gồm ChaCha20-Poly1305, Curve25519, BLAKE2s, SipHash24 và HKDF. Thiết kế cố tình gọn nhẹ đó giúp việc cấu hình và kiểm toán đơn giản hơn so với các giao thức có nhiều bộ mã hóa thay thế lẫn nhau.

WireGuard không có hệ thống tài khoản tập trung hay thư mục người dùng tích hợp. Mỗi thiết bị là một peer với cặp khóa, địa chỉ đường hầm và quy tắc AllowedIPs riêng. Trên VPS, thường một peer đóng vai trò cổng hướng ra internet, còn laptop và điện thoại là bên khởi tạo kết nối tới nó.

Vì sao nên dùng WireGuard trên VPS?

  • Mô hình peer đơn giản: Mỗi thiết bị nhận một cặp khóa và một mục peer.
  • Bề mặt tấn công nhỏ: WireGuard dùng một giao thức gọn và một bộ mã hóa cố định, thay vì bày ra một danh sách dài các tùy chọn cũ.
  • Hiệu năng tốt: Việc tích hợp vào nhân Linux cùng mật mã hiệu quả có thể cho thông lượng cao, dù kết quả vẫn phụ thuộc vào CPU, dung lượng mạng, độ trễ và kích thước gói tin.
  • Máy khách đa nền tảng: Có máy khách chính thức cho Windows 10 và 11, macOS, Android và iOS, trong khi Linux cùng nhiều hệ BSD cung cấp công cụ hoặc gói cài đặt gốc.
  • Chuyển vùng: Một peer có thể đổi mạng và địa chỉ IP nguồn mà không cần nhận danh tính WireGuard mới; máy chủ sẽ ghi nhận endpoint đã xác thực gần nhất.
  • Kiểm soát định tuyến rõ ràng: AllowedIPs quyết định cả việc đích nào đi qua đường hầm lẫn việc địa chỉ đường hầm nào thuộc về từng peer.

Đọc thêm: hướng dẫn của Cloudzy về VPS cho VPN. Với các triển khai cũ hơn, xem hướng dẫn thiết lập PPTP của Cloudzy; đừng chọn PPTP cho một VPN mới cần bảo mật.

Bỏ qua thiết lập thủ công: WireGuard chỉ một cú nhấp

Nếu bạn không có nền tảng kỹ thuật, hoặc không muốn tự tay cài đặt, Cloudzy có sẵn tùy chọn triển khai WireGuard VPN chỉ với một cú nhấp. Phần còn lại của hướng dẫn này nói về cách dựng thủ công; mục này nói về lối tắt.

  1. Đăng nhập vào bảng điều khiển Cloudzy.
  2. Chọn WireGuard trong danh sách ứng dụng.
  3. Tạo một VPS ở vị trí bạn muốn với gói tùy chọn. Một máy Ubuntu cấu hình cơ bản là đủ.

Khi VPS đã sẵn sàng, hãy đăng nhập và chạy lệnh sau để hiển thị cấu hình của bạn:

cat client.conf

Bạn sẽ thấy một cái gì đó giống như thế này:

Terminal output of cat client.conf on a one-click WireGuard VPS, showing the Interface and Peer blocks with the keys and endpoint redacted

Dùng cấu hình đó để tạo một đường hầm mới trong ứng dụng WireGuard trên máy tính của bạn, và kết nối đã sẵn sàng. Nếu bạn muốn hiểu từng thành phần, hoặc cần một bố trí mà bản dựng một chạm không hỗ trợ, hãy tiếp tục với phần dựng thủ công bên dưới.

Cách thiết lập WireGuard trên Ubuntu

Six-step WireGuard setup cycle around a VPS: install, generate keys, configure wg0 with 10.8.0.1/24, enable forwarding between wg0 and eth0, add firewall and NAT rules on UDP 51820, then start and verify the interface

Các lệnh dưới đây dành cho bản Ubuntu Server hiện hành. Hãy chạy chúng qua SSH bằng một tài khoản có quyền sudo. Giữ phiên SSH mở cho tới khi tường lửa được xác nhận, và tạo snapshot VPS trước nếu nhà cung cấp của bạn hỗ trợ.

Điều kiện tiên quyết

  • Một VPS Ubuntu có địa chỉ IPv4 công cộng
  • Một tài khoản không phải root nhưng có quyền sudo
  • Quyền truy cập SSH và thông tin bảng điều khiển khôi phục của nhà cung cấp VPS
  • Một thiết bị máy khách có ứng dụng WireGuard chính thức hoặc công cụ dòng lệnh

Bạn không cần máy chủ Ubuntu thứ hai. Máy khách có thể là PC Windows, Mac, laptop Linux, điện thoại Android hoặc iPhone.

Bước 1: Cài đặt WireGuard

sudo apt update
sudo apt install wireguard -y

Xác nhận rằng các công cụ đã sẵn sàng:

wg --version

Bước 2: Tạo khóa máy chủ một cách an toàn

Tạo thư mục WireGuard và sinh cặp khóa với umask hạn chế. Khóa riêng tuyệt đối không được sao chép sang máy khách hay xuất hiện trong log.

sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'

Hiển thị các khóa khi bạn cần dán chúng vào tệp cấu hình:

sudo cat /etc/wireguard/server.key
sudo cat /etc/wireguard/server.pub

Bước 3: Tạo cấu hình máy chủ

Mở tệp cấu hình giao diện:

sudo nano /etc/wireguard/wg0.conf

Dán khối sau và thay SERVER_PRIVATE_KEY bằng khóa riêng từ bước trước:

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

Mạng đường hầm 10.8.0.0/24 chỉ là ví dụ. Hãy chọn dải riêng khác nếu nó trùng với mạng gia đình, văn phòng hay đám mây mà bạn cần truy cập. Đừng thêm SaveConfig = true: nó có thể ghi đè tệp khi giao diện tắt và xóa mất các thay đổi bạn tự sửa.

sudo chmod 600 /etc/wireguard/wg0.conf

Bước 4: Bật chuyển tiếp IPv4

VPS phải định tuyến gói tin giữa wg0 và giao diện mạng công cộng của nó. Hãy đặt thiết lập này vào một tệp sysctl riêng:

sudo nano /etc/sysctl.d/70-wireguard-routing.conf
net.ipv4.ip_forward = 1

Áp dụng và kiểm tra lại:

sudo sysctl -p /etc/sysctl.d/70-wireguard-routing.conf
sysctl net.ipv4.ip_forward

Cách này theo mô hình định tuyến trong hướng dẫn về cổng WireGuard của Ubuntu. IPv6 cần một tiền tố IPv6 được định tuyến, các địa chỉ đường hầm riêng, chuyển tiếp IPv6 và quy tắc tường lửa IPv6; đừng đẩy lưu lượng máy khách tới ::/0 khi đường đi đó chưa hoàn chỉnh.

Bước 5: Thêm quy tắc tường lửa và NAT

Tìm tên giao diện công cộng của VPS. Trong kết quả bên dưới, hãy để ý giá trị đứng sau dev; các tên thường gặp gồm eth0, ens3 và enp1s0.

ip route show default

Mở lại wg0.conf và thêm các dòng sau vào mục [Interface]. Thay eth0 ở mọi chỗ nếu giao diện công cộng của bạn có tên khác:

PostUp = iptables -I FORWARD 1 -i %i -o eth0 -j ACCEPT; iptables -I FORWARD 1 -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PreDown = iptables -D FORWARD -i %i -o eth0 -j ACCEPT; iptables -D FORWARD -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Nếu UFW đang bật, hãy cho phép SSH trước khi động vào trạng thái của nó, rồi mới mở cổng UDP của WireGuard:

sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw status

Nếu UFW hiện đang tắt và bạn muốn bật nó, hãy xác nhận rằng quy tắc OpenSSH đã tồn tại trước. Đừng tắt rồi bật lại UFW qua SSH chỉ để áp dụng những quy tắc này; việc đó tạo ra rủi ro tự khóa mình bên ngoài, hoàn toàn có thể tránh được.

Bước 6: Khởi động giao diện WireGuard

sudo systemctl enable --now wg-quick@wg0
sudo systemctl status wg-quick@wg0 --no-pager
sudo wg show

Nếu dịch vụ thất bại, hãy chạy journalctl trước khi thay đổi bất cứ thứ gì khác:

sudo journalctl -u wg-quick@wg0 -n 50 --no-pager

Thêm một máy khách WireGuard

A VPS at 10.8.0.1/32 holding separate peer entries for a laptop, tablet, and phone, each with its own keypair and /32 tunnel address, its private key staying on the device, and a QR code marked as containing a private key

Mỗi thiết bị cần một cặp khóa và một IP đường hầm riêng. Đừng bao giờ dùng lại một cấu hình máy khách trên hai thiết bị: khóa và địa chỉ trùng nhau khiến việc định tuyến trở nên khó lường và không thể thu hồi gọn gàng.

Bước 1: Tạo khóa cho máy khách

Ứng dụng chính thức trên máy tính và di động có thể tạo khóa khi bạn tạo một đường hầm trống. Trên máy khách Linux, hãy dùng:

umask 077
wg genkey | tee client.key | wg pubkey > client.pub

Giữ client.key trên thiết bị đó. Chỉ sao chép client.pub sang máy chủ.

Bước 2: Thêm peer trên máy chủ

sudo nano /etc/wireguard/wg0.conf

Thêm một khối peer. Thay CLIENT_PUBLIC_KEY bằng khóa công khai của máy khách:

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

Dòng Address = 10.8.0.2/32 gán địa chỉ đường hầm ở phía máy khách. Trong khối [Peer] trên máy chủ, AllowedIPs = 10.8.0.2/32 gắn địa chỉ đó với peer này để định tuyến và xác thực nguồn. Dùng 10.8.0.3/32 cho thiết bị tiếp theo, rồi tăng dần mà không trùng lặp.

sudo systemctl restart wg-quick@wg0

Bước 3: Dựng cấu hình máy khách

Tạo tệp client.conf trên máy khách và thay toàn bộ giá trị giữ chỗ:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.8.0.2/32
DNS = 1.1.1.1

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

AllowedIPs = 0.0.0.0/0 biến đây thành một đường hầm IPv4 toàn phần. Nếu chỉ muốn truy cập mạng VPN, hãy dùng AllowedIPs = 10.8.0.0/24. PersistentKeepalive hữu ích cho máy khách nằm sau NAT cần giữ ánh xạ luôn tiếp cận được khi rảnh; hướng dẫn bắt đầu nhanh của WireGuard lưu ý rằng phần lớn peer không cần đến nó.

Bước 4: Nhập cấu hình

Sử dụng hướng dẫn cài đặt máy khách WireGuard để lấy máy khách được hỗ trợ cho nền tảng của bạn.

  • Windows: Chọn Add Tunnel, rồi nhập tệp client.conf.
  • macOS: Chọn Import tunnel(s) from file rồi chọn tệp client.conf.
  • Android hoặc iOS: Nhập tệp hoặc quét mã QR được tạo từ tệp đó.

Trên máy khách Ubuntu hoặc Debian đang giữ tệp client.conf, hãy cài qrencode và hiển thị tệp đó trong terminal của máy khách:

sudo apt install qrencode -y
qrencode -t ansiutf8 < client.conf

Mã QR chứa khóa riêng của máy khách. Chỉ hiển thị nó trong một terminal đáng tin cậy, đừng lưu ảnh chụp màn hình, và xóa sạch terminal sau khi điện thoại đã nhập xong.

Bước 5: Kiểm tra đường hầm

Bật đường hầm, tạo lưu lượng từ máy khách, rồi chạy các bước kiểm tra sau trên VPS:

sudo wg show
ip -brief address show wg0

Một lần bắt tay gần đây cùng các bộ đếm truyền tải đang tăng xác nhận rằng WireGuard đang trao đổi gói tin. Sau đó, hãy kiểm tra lối ra full-tunnel từ máy khách:

curl -4 https://api.ipify.org; echo

Lệnh này phải trả về địa chỉ IPv4 công cộng của VPS. Nếu không có bắt tay, hãy kiểm tra địa chỉ endpoint, cổng UDP, tường lửa đám mây, quy tắc UFW và các khóa. Nếu đã bắt tay nhưng không vào được internet, hãy kiểm tra chuyển tiếp IP, tên giao diện công cộng, quy tắc NAT và DNS.

Có thể đặt WireGuard sau Nginx không?

Người tài liệu về mô-đun stream của NGINX giải thích cách NGINX có thể chuyển tiếp UDP từ cổng này sang cổng khác, nên nó có thể đẩy UDP/80 hoặc UDP/443 tới WireGuard ở UDP/51820. Đó là một bộ chuyển tiếp UDP, không phải reverse proxy HTTP. Nó không biến WireGuard thành TCP hay HTTPS, và cũng không khiến giao thức trông giống lưu lượng web thông thường.

Với hầu hết các triển khai, đổi ListenPort của WireGuard rồi mở cổng UDP tương ứng sẽ đơn giản hơn là thêm NGINX. Nếu một mạng chặn UDP hoàn toàn hoặc dùng kiểm tra gói sâu, bộ chuyển tiếp UDP bằng NGINX cũng không giải quyết được vấn đề. tài liệu về giới hạn của WireGuard nêu rõ rằng việc làm rối lưu lượng nằm ngoài phạm vi của giao thức.

Kết nối VPS với mạng gia đình

A VPS hub relaying a roaming laptop and phone to a home gateway over WireGuard, with full-tunnel 0.0.0.0/0 and split-tunnel 192.168.1.0/24 paths, PersistentKeepalive on the home peer, and a warning that two overlapping 192.168.1.0/24 networks cannot route cleanly

Một VPS có thể đóng vai trò trung tâm giữa máy khách di động và một thiết bị trong nhà bạn. Peer phía nhà sẽ chủ động mở kết nối WireGuard đi ra tới VPS, nhờ vậy bạn không cần IP công cộng ở nhà. Hãy đặt PersistentKeepalive cho peer phía nhà khi nó nằm sau NAT.

Để với tới toàn bộ mạng LAN ở nhà thì thêm một peer là chưa đủ. Mục peer trên VPS ứng với cổng nhà phải có dải mạng nhà trong AllowedIPs, chẳng hạn 192.168.1.0/24. Máy khách từ xa dùng đường hầm toàn phần (AllowedIPs = 0.0.0.0/0) vốn đã đẩy lưu lượng của dải mạng nhà qua VPS; chỉ thêm 192.168.1.0/24 vào máy khách khi bạn dùng split tunneling. Cổng nhà cũng phải chuyển tiếp lưu lượng giữa WireGuard và mạng LAN. Hãy thêm một tuyến trên router nhà, hoặc một quy tắc NAT được giới hạn phạm vi cẩn thận trên cổng nhà. Kiểm tra trùng dải trước đã: một máy khách đang nối vào một mạng 192.168.1.0/24 khác sẽ không thể định tuyến gọn gàng cả hai mạng nếu không đánh số lại hoặc dùng định tuyến theo chính sách phức tạp hơn.

WireGuard tự lưu trữ so với VPN thương mại

Tự lưu trữ chỉ thay đổi ai vận hành VPN, chứ không tự động cải thiện tính ẩn danh. Một VPS cá nhân cho bạn một IP ra cố định, vốn rất dễ liên hệ tới một mạng hosting. Dịch vụ thương mại thường cho bạn địa chỉ ra dùng chung và đổi vị trí dễ dàng, nhưng bạn phải trông cậy vào chính sách, cách vận hành và các cuộc kiểm toán độc lập mà họ công bố.

Bản thân WireGuard rất nhẹ, và một VPS nhỏ thường là điểm khởi đầu hợp lý cho một người dùng với vài thiết bị. Đừng coi một con số RAM hay vCPU cố định là bảo chứng cho thông lượng. Hãy thử nghiệm với số thiết bị thực tế, khu vực, kích thước gói tin và băng thông bạn kỳ vọng, rồi nâng cấu hình nếu CPU bão hòa, mất gói hay độ trễ trở thành giới hạn.

Hãy chọn tự lưu trữ khi một IP ra cá nhân ổn định, khả năng truy cập từ xa hay quyền kiểm soát máy chủ quan trọng hơn việc chọn vị trí và sự tiện lợi. Hãy chọn VPN thương mại khi bạn muốn nhiều quốc gia, lối ra dùng chung, hỗ trợ rộng cho thiết bị tiêu dùng, và có người khác lo xử lý sự cố.

Yếu tố quyết địnhWireGuard tự lưu trữVPN thương mại
Mô hình chi phíMột máy chủ cộng thêm thời gian quản trị của bạnThuê bao, thường được giảm giá khi đăng ký dài hạn
Vị trí lối raMỗi máy chủ một vị tríNhiều vị trí có sẵn ngay trong ứng dụng
Cài đặtBạn tự cấu hình khóa, định tuyến, quy tắc tường lửa và máy kháchCài ứng dụng rồi đăng nhập
Bảo trìBạn tự vá lỗi, giám sát, sao lưu và xử lý sự cốNhà cung cấp vận hành dịch vụ
Mô hình quyền riêng tưBạn kiểm soát máy chủ, nhưng nhà cung cấp hosting vẫn quan sát được siêu dữ liệuBạn trông cậy vào chính sách của nhà cung cấp và các cuộc kiểm toán độc lập họ công bố
Phù hợp nhấtIP ra cá nhân ổn định, truy cập từ xa và quyền kiểm soát hạ tầngĐổi vị trí linh hoạt, ít phải bảo trì và hỗ trợ thiết bị rộng rãi

Kết luận

Một triển khai WireGuard đáng tin cậy rút gọn lại còn năm điều: khóa riêng được bảo vệ, địa chỉ peer không trùng nhau, AllowedIPs đúng, chuyển tiếp và NAT hoạt động, cùng một quy tắc tường lửa cho cổng UDP đang lắng nghe. Hãy kiểm tra cả bắt tay lẫn địa chỉ ra công cộng trước khi tin tưởng đường hầm, và tiếp tục vá lỗi cho VPS sau khi triển khai.

Nếu bạn muốn tự dựng máy chủ, hãy bắt đầu với một Cloudzy Ubuntu VPS. Nếu bạn muốn bỏ qua các bước cài đặt, hãy dùng gói triển khai WireGuard một chạm của Cloudzy rồi chuyển thẳng sang phần cấu hình máy khách và kiểm tra.

Câu hỏi thường gặp

Vì sao WireGuard hiển thị peer nhưng không có bắt tay?

Việc có một mục peer chỉ chứng tỏ rằng cấu hình đã được nạp. Không có bắt tay thường nghĩa là máy khách không tới được máy chủ, hoặc các khóa không khớp. Hãy kiểm tra Endpoint ở máy khách, IP công cộng của máy chủ, cổng UDP/51820 ở cả tường lửa nhà cung cấp lẫn UFW, và khóa công khai ở cả hai phía. Hãy tạo lưu lượng từ máy khách trước khi kiểm tra, vì WireGuard im lặng khi rảnh.

Vì sao đường hầm kết nối được nhưng lại mất internet?

Bắt tay được nhưng không vào được internet thường là chuyện định tuyến chứ không phải mã hóa. Hãy kiểm tra net.ipv4.ip_forward, xác nhận tên giao diện công cộng trong quy tắc NAT, soát lại các quy tắc FORWARD, và thử DNS tách riêng khỏi kết nối IP thuần. Ngoài ra, hãy chắc rằng AllowedIPs trên máy khách khớp với thiết kế full-tunnel hay split-tunnel mà bạn định dùng.

Hai thiết bị có dùng chung một cấu hình WireGuard được không?

Không. Hãy cấp cho mỗi thiết bị khóa riêng, khóa công khai và địa chỉ đường hầm /32 của riêng nó. Dùng lại một cấu hình sẽ gây xung đột endpoint và tuyến đường, đồng thời khiến bạn không thể thu hồi một thiết bị bị mất mà không ngắt kết nối thiết bị còn lại.

Mọi máy khách có cần PersistentKeepalive không?

Không. Hãy thêm nó khi một peer nằm sau NAT cần giữ ánh xạ luôn mở trong lúc rảnh, điều thường gặp với điện thoại, cổng mạng gia đình và một số mạng khắt khe. Hãy bỏ qua nó khi peer liên lạc thường xuyên hoặc không cần phía bên kia chủ động tiếp cận lúc rảnh.

Chia sẻ

Thêm bài viết từ blog

Tiếp tục đọc.

Sẵn sàng triển khai? Từ $2.48/tháng.

Cloud độc lập, từ 2008. AMD EPYC, NVMe, 40 Gbps. Hoàn tiền trong 14 ngày.