InternetSpeed.online

Ngôn ngữ

Bài viết

Hướng dẫn thực hành

Cách thiết lập máy chủ VPN WireGuard trên Ubuntu bằng tập lệnh

Bắt đầu với máy chủ Ubuntu mới và tạo kết nối VPN riêng. Hướng dẫn gồm cài đặt máy chủ, tạo hồ sơ thiết bị và kiểm tra đường đi của lưu lượng internet.

Đã thử: cài đặt máy chủ, kết nối trong container Linux và tốc độ trên Windows. Chưa hoàn tất kiểm tra trực tiếp trên macOS, Ubuntu Desktop, iPhone và Android.

1. Chọn máy chủ và chuẩn bị quyền truy cập

Hướng dẫn cài WireGuard từ đầu trên VPS Ubuntu 26.04 LTS. Cần IPv4 công khai và mật khẩu root hoặc khóa SSH. Chọn nhà cung cấp và khu vực theo nhu cầu.

Chúng tôi dùng Vultr Shared CPU: 1 vCPU, RAM 1 GB, SSD 25 GB và hạn mức lưu lượng 1 TB mỗi tháng.

Chọn máy chủ IPv4 để kết nối được từ mạng không hỗ trợ IPv6. Máy chủ chỉ có IPv6 cần cấu hình thêm để truy cập trang chỉ có IPv4 và không thuộc phạm vi này.

2. Kiểm tra đăng nhập qua SSH

Windows: tìm PowerShell trong Start rồi mở. Mac: nhấn Command+Space, gõ Terminal rồi Enter. Ubuntu Desktop: nhấn Ctrl+Alt+T.

Trong mọi lệnh, thay SERVER_IP bằng IPv4 công khai trong bảng điều khiển máy chủ. ssh root@SERVER_IP kết nối với tài khoản root.

Chọn lệnh dùng mật khẩu hoặc lệnh dùng khóa SSH có sẵn. Thay đường dẫn khóa ví dụ bằng đường dẫn của bạn.

Lần đầu, SSH có thể hỏi có tin cậy máy chủ không. Kiểm tra đúng địa chỉ VPS vừa tạo, gõ yes rồi Enter. Nhập mật khẩu root khi được hỏi; ký tự không hiện khi gõ.

Sau khi vào máy chủ, chạy lệnh bên dưới để kiểm tra Ubuntu, rồi exit để trở lại máy tính của bạn.

PowerShell hoặc Terminal trên máy tính — đăng nhập bằng mật khẩu
ssh root@SERVER_IP
PowerShell hoặc Terminal trên máy tính — khóa SSH có sẵn
ssh -i ~/.ssh/id_ed25519 root@SERVER_IP
Trên máy chủ
cat /etc/os-release
exit
Nếu không tìm thấy lệnh ssh

Trên Windows, mở PowerShell bằng Run as administrator và chạy lệnh dưới. Cài xong, đóng rồi mở PowerShell thường. Trên Ubuntu, dùng lệnh Ubuntu bên dưới. macOS có sẵn máy khách SSH.

Windows — cài SSH trong PowerShell quản trị
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Sao chép nguyên lệnh. OpenSSH.Client~~~~0.0.1.0 là mã thành phần Windows; giữ nguyên dấu ngã và số.

Ubuntu Desktop — cài máy khách SSH
sudo apt update
sudo apt install openssh-client

3. Tải và xem gói cài đặt

Tải ZIP rồi giải nén. Giữ cả năm tập lệnh trong thư mục wireguard-guide. Chỉ cần theo một nhánh Windows, Mac hoặc Ubuntu bên dưới.

Tập lệnh cài WireGuard trên VPS và tạo hồ sơ kết nối cho thiết bị. Có thể phải nhập mật khẩu máy chủ nhiều lần.

Tải tập lệnh cài đặt (.zip)

4a. Thiết lập máy chủ từ Windows

Mở thư mục wireguard-guide đã giải nén trong File Explorer. Gõ powershell vào thanh địa chỉ rồi Enter để mở PowerShell tại đúng thư mục.

Chạy một trong hai lệnh. Thay SERVER_IP bằng địa chỉ VPS và thay đường dẫn khóa nếu dùng SSH key.

windows sau -Device là tên hồ sơ thiết bị. Với máy thứ hai, dùng tên khác như laptop. Mỗi thiết bị cần hồ sơ riêng để có thể thu hồi một thiết bị mà không ngắt các thiết bị khác.

Khi xong, nhập %USERPROFILE%\WireGuard vào thanh địa chỉ File Explorer. Mở thư mục mang tên máy chủ và thiết bị để tìm windows.conf. Tập lệnh cũng in đường dẫn đầy đủ. Bật VPN ở bước 5.

PowerShell — xác thực bằng mật khẩu
.\Connect-WireGuardServer.ps1 -Server SERVER_IP -Device windows
PowerShell — xác thực bằng khóa SSH
.\Connect-WireGuardServer.ps1 -Server SERVER_IP -Device windows -IdentityFile "$HOME\.ssh\id_ed25519"
Nếu PowerShell chặn tập lệnh

Nếu lỗi báo tệp tải xuống không có chữ ký số, chạy lệnh này trong cùng thư mục rồi thử lệnh cài đặt lại.

PowerShell — bỏ chặn tệp đã tải
Unblock-File -LiteralPath .\Connect-WireGuardServer.ps1

Nếu lỗi báo không được chạy tập lệnh, chạy các lệnh sau, xác nhận lời nhắc rồi thử lại. Thay đổi hết hiệu lực khi đóng cửa sổ PowerShell.

PowerShell — chỉ cho phép tập lệnh trong cửa sổ này
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
Unblock-File -LiteralPath .\Connect-WireGuardServer.ps1

Nếu chính sách vẫn chặn, dừng lại và giữ thông báo lỗi để chẩn đoán.

4b. Thiết lập máy chủ từ Mac

Mở Terminal. Gõ cd và một dấu cách, kéo thư mục wireguard-guide từ Finder vào Terminal rồi Enter.

Chạy một lệnh, giữ cả bash ở đầu. Thay SERVER_IP và đường dẫn khóa nếu dùng. mac là tên hồ sơ; dùng tên khác như macbook cho máy Mac tiếp theo.

Khi xong, nhấn Command+Shift+H trong Finder để mở thư mục người dùng. Mở WireGuard rồi thư mục máy chủ-thiết bị để tìm mac.conf. Tập lệnh cũng in đường dẫn đầy đủ.

Terminal macOS — xác thực bằng mật khẩu
bash ./connect-wireguard-server.sh SERVER_IP mac
Terminal macOS — xác thực bằng khóa SSH
bash ./connect-wireguard-server.sh SERVER_IP mac 22 ~/.ssh/id_ed25519

4c. Thiết lập máy chủ từ Ubuntu Desktop

Nhấn Ctrl+Alt+T. Gõ cd và dấu cách, kéo thư mục wireguard-guide vào Terminal rồi Enter.

Thay SERVER_IP rồi chạy một lệnh. ubuntu là tên hồ sơ. Không cần sudo cho tập lệnh khởi chạy này hoặc đăng nhập SSH.

Trong trình quản lý tệp, mở Home, WireGuard rồi thư mục máy chủ-thiết bị. ubuntu.conf nằm tại ~/WireGuard/SERVER_IP-ubuntu/ubuntu.conf với địa chỉ máy chủ thật. Hướng dẫn dùng NetworkManager để kết nối.

Trên Ubuntu Desktop — xác thực bằng mật khẩu
bash ./connect-wireguard-server.sh SERVER_IP ubuntu
Trên Ubuntu Desktop — xác thực bằng khóa SSH
bash ./connect-wireguard-server.sh SERVER_IP ubuntu 22 ~/.ssh/id_ed25519

5a. Kết nối Windows hoặc macOS

Cài ứng dụng WireGuard chính thức cho hệ điều hành. Nhập tệp .conf vừa tạo, cấp quyền VPN rồi bật đường hầm. Tên mục nhập có thể khác theo phiên bản ứng dụng.

Hồ sơ đưa IPv4 vào đường hầm và có tuyến mặc định IPv6 nhằm tránh IPv6 đi ngoài VPN. Máy chủ không cung cấp internet IPv6. Kiểm tra hành vi thực tế bằng các bước bên dưới.

Hồ sơ chứa khóa riêng. Ai có bản sao có thể thử dùng danh tính VPN của thiết bị. Không gửi hồ sơ trong yêu cầu hỗ trợ, tải lên công cụ tạo QR trực tuyến hoặc dùng chung giữa các thiết bị.

Tải WireGuard chính thức

5b. Kết nối Ubuntu Desktop bằng NetworkManager

NetworkManager nhập hồ sơ và quản lý DNS cùng định tuyến, không phụ thuộc phiên bản hộp thoại đồ họa. Chạy lệnh trên máy tính, không trong SSH tới VPS. Trước tiên kiểm tra nmcli có sẵn và NetworkManager đang chạy.

Dùng ubuntu.conf để kết nối có tên ubuntu. Nếu tên đã tồn tại, chọn tên thiết bị khác và sửa lệnh tương ứng. Chỉ nhập một lần; lần sau dùng up và down. Lệnh bên dưới tắt tự kết nối VPN khi máy khởi động.

DNS này ưu tiên VPN cho mọi tên miền khi đang hoạt động. DNS bảo mật riêng của trình duyệt có thể khác. Làm kiểm tra IP, DNS và IPv6 ở bước 7. Cách này chưa được thử trực tiếp trên Ubuntu Desktop; kết quả container không xác nhận DNS và IPv6 của desktop.

Không bật cùng hồ sơ bằng wg-quick đồng thời vì hai trình quản lý có thể tạo tuyến xung đột. Dùng nmcli để kiểm tra và ngắt dù giao diện desktop hiển thị khác.

Trên Ubuntu Desktop — kiểm tra NetworkManager
nmcli --version
systemctl is-active NetworkManager
Trên Ubuntu Desktop — nhập một lần và đặt DNS
sudo nmcli connection import type wireguard file "$HOME/WireGuard/SERVER_IP-ubuntu/ubuntu.conf"
sudo nmcli connection modify ubuntu connection.autoconnect no ipv4.dns-priority -50 ipv4.dns-search "~."
Trên Ubuntu Desktop — kết nối
sudo nmcli connection up ubuntu
nmcli connection show --active
Trên Ubuntu Desktop — ngắt kết nối
sudo nmcli connection down ubuntu

6. Kết nối iPhone hoặc Android bằng mã QR

Cài ứng dụng WireGuard chính thức qua liên kết App Store hoặc Google Play dưới đây.

Trên máy tính, vào lại VPS bằng ssh root@SERVER_IP hoặc lệnh khóa SSH. Chạy lệnh dành cho điện thoại để tạo hồ sơ và hiển thị QR.

Trong WireGuard trên điện thoại, chọn thêm đường hầm bằng quét QR. Quét mã trên máy tính, đặt tên, cấp quyền VPN rồi bật kết nối.

Mỗi điện thoại dùng hồ sơ riêng. Không chia sẻ QR vì mã cho phép truy cập VPN. Nếu mã bị ngắt dòng, phóng to cửa sổ Terminal rồi hiển thị lại.

Trên máy chủ — tạo hồ sơ iPhone
python3 /root/internetspeed-wireguard/manage-client.py add iphone
qrencode -t ANSIUTF8 < /etc/wireguard/clients/iphone.conf
Trên máy chủ — tạo hồ sơ Android riêng
python3 /root/internetspeed-wireguard/manage-client.py add android
qrencode -t ANSIUTF8 < /etc/wireguard/clients/android.conf

WireGuard cho iPhone — App Store

WireGuard cho Android — Google Play

7. Kiểm tra internet có đi qua VPN

Trước khi bật VPN, mở My IP qua liên kết bên dưới và ghi lại IP. Bật WireGuard, tải lại My IP và so sánh với IPv4 công khai của VPS.

Nếu trang mở được và hiện địa chỉ VPS, kết nối trình duyệt đó đang qua VPN. Nếu vẫn hiện IP cũ, xem phần khắc phục sự cố.

Điều này xác nhận kết nối trình duyệt, không phải mọi ứng dụng hoặc khả năng bảo vệ lúc VPN gián đoạn. Có thể kiểm tra thêm DNS và IPv6 bên dưới.

Kiểm tra IP công khai

Tùy chọn: kiểm tra IPv6 và DNS

IPv6: mở Test IPv6 trước khi kết nối và xem có địa chỉ IPv6 không. Bật VPN rồi thử lại. Cấu hình IPv4 này không nên có internet IPv6 hoạt động. Nếu IPv6 thường dùng vẫn xuất hiện, nó đang đi ngoài đường hầm. Nếu ban đầu không có IPv6, thử nghiệm không cho biết hành vi trên mạng hỗ trợ IPv6.

DNS: khi VPN bật, chạy Standard test tại DNS Leak Test. Hồ sơ dùng Cloudflare DNS. Nếu thấy nhà mạng gia đình, kiểm tra DNS thiết bị. Nhà cung cấp khác cũng có thể do Secure DNS của trình duyệt; cần tìm hiểu chứ chưa tự động chứng minh rò rỉ. Kết quả không đảm bảo mọi ứng dụng được bảo vệ.

Mở Test IPv6

Mở DNS Leak Test

8. Khắc phục kết nối không hoạt động

Nếu My IP vẫn hiện IP thường, kiểm tra hồ sơ WireGuard đã bật. Tắt rồi bật lại một lần và tải lại My IP.

Nếu bật VPN khiến trang không mở, tắt VPN rồi thử cùng trang. Nếu vẫn lỗi, khôi phục internet thường trước. Nếu chỉ lỗi khi bật VPN, làm các kiểm tra dưới đây.

Để so sánh, nối máy tính vào điểm phát sóng điện thoại rồi thử VPN. Trên điện thoại, tắt Wi-Fi và thử dữ liệu di động; có thể phát sinh phí. Đây là thử tạm thời. Nếu chỉ hoạt động qua di động, vấn đề liên quan kết nối Wi-Fi đó nhưng chưa xác định nguyên nhân.

Nếu cài đặt dừng do lỗi, lưu thông báo cuối. Sau khi sửa nguyên nhân, chạy lại cùng lệnh và tên thiết bị. Hồ sơ cũ được giữ lại.

Kiểm tra máy chủ VPN đang chạy

Đăng nhập SSH như bước 2 rồi chạy lệnh. Kết quả cần là active. Nếu inactive hoặc failed, chạy lệnh khởi động lại và kiểm tra. Nếu vẫn không active, lưu lỗi.

Trên máy chủ — kiểm tra WireGuard
systemctl is-active wg-quick@wg0
Trên máy chủ — khởi động lại WireGuard nếu chưa hoạt động
systemctl restart wg-quick@wg0
systemctl is-active wg-quick@wg0

Khởi động lại sẽ tạm ngắt các thiết bị đang dùng VPN.

Kiểm tra thiết bị có tới được máy chủ

Bật VPN, thử My IP rồi chạy wg show trên máy chủ. Tìm latest handshake dưới mục thiết bị. 10 seconds ago nghĩa là vừa thiết lập kết nối mã hóa. Không có dòng này nghĩa là chưa ghi nhận kết nối thành công cho thiết bị.

Nếu không có kết nối mới, kiểm tra Endpoint trong hồ sơ là địa chỉ VPS kèm :51820. Vào Firewall hoặc Security groups trong bảng điều khiển VPS. Nếu có tường lửa gắn với VPS, cho phép UDP đến cổng 51820. Giao diện tùy nhà cung cấp; tập lệnh đã đặt tường lửa trong Ubuntu.

Nếu handshake mới nhưng trang vẫn không mở, ghi lại kết quả và lỗi hoặc nhật ký ứng dụng. Thay ngẫu nhiên cấu hình mạng nâng cao có thể làm chẩn đoán khó hơn.

Trên máy chủ — xem trạng thái VPN
wg show

9. Có thể đạt tốc độ nào?

Thử trên Windows đạt khoảng 350–400 Mbps tải xuống và 450–500 Mbps tải lên, cùng phương pháp với các VPN khác của dự án. Tuyến: người dùng tại San Diego → VPN ở vùng Vịnh San Francisco → máy chủ đo tại Seattle.

VPS là Vultr Shared CPU vc2-1c-1gb: 1 vCPU, RAM 1 GB, SSD 25 GB, lưu lượng 1 TB/tháng; giá lúc tạo là 5 USD/tháng.

Đây là kết quả của cấu hình này. Tốc độ của bạn phụ thuộc internet, máy chủ và vị trí. Chưa so sánh các gói VPS hay nhà cung cấp khác.

10. Chi phí, quyền riêng tư và giới hạn nhà cung cấp

VPN tự quản cho quyền kiểm soát cấu hình và một vị trí đầu ra. Bạn chịu trách nhiệm cập nhật, thanh toán, quyền thiết bị và khôi phục. Nó không làm bạn ẩn danh với nhà cung cấp máy chủ hay thay thế HTTPS.

Duyệt web, video, tải xuống, tải lên và đo tốc độ đều tiêu tốn hạn mức lưu lượng VPS. Kiểm tra phần còn lại trong bảng điều khiển. Vượt hạn mức có thể bị tính thêm phí hoặc giới hạn tùy gói.

Trước khi dùng P2P, đọc điều khoản hiện hành của nhà cung cấp và luật áp dụng. Giao thức và quyền nội dung là hai vấn đề riêng. Chỉ tải và chia sẻ nội dung bạn có quyền; không phải nơi nào cũng cho mọi hình thức P2P.

IP trung tâm dữ liệu có thể gặp CAPTCHA, giới hạn dịch vụ hoặc chặn phát trực tuyến. WireGuard thông thường không đảm bảo qua mọi mạng bị lọc. Một VPS cũng là một điểm lỗi duy nhất, không có nhiều vị trí và máy thay thế như nhà cung cấp lớn.

11. Thêm thiết bị, thu hồi quyền và bảo trì

Mỗi thiết bị một hồ sơ. Với điện thoại thất lạc, xóa peer mang tên đó trên máy chủ và các bản hồ sơ còn giữ, rồi tạo hồ sơ thay thế. Chỉ xóa tệp trên điện thoại không thu hồi quyền phía máy chủ.

Cập nhật bảo mật Ubuntu và kiểm tra yêu cầu khởi động lại. Khởi động lại lúc phù hợp rồi xác nhận VPN hoạt động. Bảo vệ tài khoản hosting và SSH; đổi xác thực SSH riêng với phương án đăng nhập thay thế đã thử.

Tập lệnh gỡ bỏ dừng VPN này, xóa cấu hình và quy tắc tường lửa do nó quản lý. SSH, UFW và các gói vẫn còn. Chuyển tiếp vẫn bật tới khi chính sách hệ thống áp dụng lúc khởi động lại. Gỡ VPN không hủy phí VPS; lưu dữ liệu cần thiết rồi xóa máy qua nhà cung cấp khi không dùng nữa.

Trên máy chủ — thu hồi hồ sơ iPhone
python3 /root/internetspeed-wireguard/manage-client.py remove iphone
Trên máy chủ — kiểm tra cập nhật và yêu cầu khởi động lại
apt update
apt list --upgradable
test ! -f /var/run/reboot-required || cat /var/run/reboot-required
Trên máy chủ — gỡ cấu hình VPN (ngắt mọi thiết bị)
bash /root/internetspeed-wireguard/remove-server.sh --confirm