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.
ssh root@SERVER_IPssh -i ~/.ssh/id_ed25519 root@SERVER_IPcat /etc/os-release
exitNế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.
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0Sao 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ố.
sudo apt update
sudo apt install openssh-client3. 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.
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.
.\Connect-WireGuardServer.ps1 -Server SERVER_IP -Device windows.\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.
Unblock-File -LiteralPath .\Connect-WireGuardServer.ps1Nế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.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
Unblock-File -LiteralPath .\Connect-WireGuardServer.ps1Nế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 đủ.
bash ./connect-wireguard-server.sh SERVER_IP macbash ./connect-wireguard-server.sh SERVER_IP mac 22 ~/.ssh/id_ed255194c. 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.
bash ./connect-wireguard-server.sh SERVER_IP ubuntubash ./connect-wireguard-server.sh SERVER_IP ubuntu 22 ~/.ssh/id_ed255195a. 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ị.
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.
nmcli --version
systemctl is-active NetworkManagersudo 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 "~."sudo nmcli connection up ubuntu
nmcli connection show --activesudo nmcli connection down ubuntu6. 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.
python3 /root/internetspeed-wireguard/manage-client.py add iphone
qrencode -t ANSIUTF8 < /etc/wireguard/clients/iphone.confpython3 /root/internetspeed-wireguard/manage-client.py add android
qrencode -t ANSIUTF8 < /etc/wireguard/clients/android.conf7. 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.
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ệ.
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.
systemctl is-active wg-quick@wg0systemctl restart wg-quick@wg0
systemctl is-active wg-quick@wg0Khở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.
wg show9. 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.
python3 /root/internetspeed-wireguard/manage-client.py remove iphoneapt update
apt list --upgradable
test ! -f /var/run/reboot-required || cat /var/run/reboot-requiredbash /root/internetspeed-wireguard/remove-server.sh --confirm