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.
Khi nào nên dùng cách thiết lập này?
Phù hợp khi bạn muốn VPN riêng đi ra internet qua máy chủ tự chọn và mạng cho phép kết nối WireGuard. Bạn chọn nhà cung cấp, vị trí máy chủ và các thiết bị được truy cập.
Nếu mạng chặn VPN, WireGuard thông thường có thể không phù hợp. Nó không ngụy trang kết nối thành lưu lượng web thông thường. Ngay cả máy chủ cấu hình đúng cũng có thể không truy cập được qua nhà mạng của bạn. Hãy cân nhắc trước khi trả tiền thuê VPS.
Với mạng chặn VPN, hãy cân nhắc AmneziaWG hoặc Xray với VLESS và REALITY. AmneziaVPN hỗ trợ cài chúng trên máy chủ riêng. Chúng được thiết kế để chống phát hiện và chặn, nhưng không bảo đảm kết nối từ mọi mạng.
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.
Hướng dẫn dùng VPS có 1 vCPU và RAM 1 GB.
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.
Bảo mật máy chủ: bài này hướng dẫn cài VPN, không bao quát toàn bộ bảo mật và bảo trì VPS. Tập lệnh cấu hình tường lửa cho SSH và WireGuard. Bạn vẫn chịu trách nhiệm cập nhật bảo mật và bảo vệ truy cập. Dùng khóa SSH, bật xác thực hai yếu tố cho tài khoản hosting và giữ hồ sơ VPN như mật khẩu. Chỉ tắt đăng nhập SSH bằng mật khẩu sau khi đã kiểm tra đăng nhập bằng khóa.
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ữ tất cả 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à lưu hồ sơ VPN vào máy tính qua một kết nối SSH cho toàn bộ quá trình. Khi đăng nhập bằng mật khẩu, mật khẩu được hỏi một lần cho mỗi lần chạy thành công và không được tập lệnh lưu lại.
Tên hồ sơ dài 1–15 ký tự, gồm chữ Latin hoa hoặc thường, số và dấu gạch nối, bắt đầu bằng chữ. Không có dấu cách. Ví dụ: my-wg-vpn, my-laptop, my-phone. Bỏ tên thì tập lệnh sẽ hỏi; Enter chọn my-wg-vpn. Tên không hợp lệ sẽ được hỏi lại. Dùng tên khác cho mỗi thiết bị bổ sung.
Để tải hồ sơ có sẵn, chạy script, chọn 2 (Manage existing server), kết nối rồi chọn 9 (Download profile). Nhập tên trong danh sách; nhấn Enter khi để trống để hủy. Việc tải dùng cùng kết nối SSH, không hỏi lại mật khẩu máy chủ. Tải thành công sẽ thay thế tệp cục bộ cùng tê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 các lệnh. Thay SERVER_IP bằng địa chỉ VPS và thay đường dẫn khóa nếu dùng SSH key.
Chọn 1 (Set up server), nhập IP máy chủ và tên hồ sơ, rồi nhập đường dẫn khóa SSH hoặc nhấn Enter. Enter giữ tên được đề xuất. Kiểm tra phần tóm tắt và nhập yes/y để tiếp tục; Nhập no để hủy. Sau 3 câu trả lời không hợp lệ, script sẽ đóng. Tiến trình được hiển thị trong khi cài đặt. Bạn cũng có thể nhấn Enter để tiếp tục.
Hồ sơ được lưu trong thư mục cá nhân tại WireGuard/SERVER_IP/my-wg-vpn.conf. Script hiển thị đường dẫn đầy đủ.
.\Connect-WireGuardServer.ps1.\Connect-WireGuardServer.ps1 -Server SERVER_IP -ProfileName my-wg-vpn.\Connect-WireGuardServer.ps1 -Server SERVER_IP -ProfileName my-wg-vpn -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.ps1, .\ManagementClient.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.ps1, .\ManagementClient.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. my-wg-vpn là tên hồ sơ; dùng tên khác như macbook cho máy Mac tiếp theo.
Hồ sơ được lưu trong thư mục cá nhân tại WireGuard/SERVER_IP/my-wg-vpn.conf. Script hiển thị đường dẫn đầy đủ.
Chọn 1 (Set up server), nhập IP máy chủ và tên hồ sơ, rồi nhập đường dẫn khóa SSH hoặc nhấn Enter. Enter giữ tên được đề xuất. Kiểm tra phần tóm tắt và nhập yes/y để tiếp tục; Nhập no để hủy. Sau 3 câu trả lời không hợp lệ, script sẽ đóng. Tiến trình được hiển thị trong khi cài đặt. Bạn cũng có thể nhấn Enter để tiếp tục.
bash ./connect-wireguard-server.shbash ./connect-wireguard-server.sh SERVER_IP my-wg-vpnbash ./connect-wireguard-server.sh SERVER_IP my-wg-vpn 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. my-wg-vpn 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.
Hồ sơ được lưu trong thư mục cá nhân tại WireGuard/SERVER_IP/my-wg-vpn.conf. Script hiển thị đường dẫn đầy đủ.
Chọn 1 (Set up server), nhập IP máy chủ và tên hồ sơ, rồi nhập đường dẫn khóa SSH hoặc nhấn Enter. Enter giữ tên được đề xuất. Kiểm tra phần tóm tắt và nhập yes/y để tiếp tục; Nhập no để hủy. Sau 3 câu trả lời không hợp lệ, script sẽ đóng. Tiến trình được hiển thị trong khi cài đặt. Bạn cũng có thể nhấn Enter để tiếp tục.
bash ./connect-wireguard-server.shbash ./connect-wireguard-server.sh SERVER_IP my-wg-vpnbash ./connect-wireguard-server.sh SERVER_IP my-wg-vpn 22 ~/.ssh/id_ed25519Trước khi kết nối: nếu VPN ngừng hoạt động thì sao?
Full tunnel đưa lưu lượng internet thông thường qua VPN khi hồ sơ đang hoạt động.
Kill switch chặn kết nối internet ngoài VPN. Hành vi tùy ứng dụng và cài đặt: máy chủ không phản hồi, tắt hồ sơ thủ công và khởi động lại thiết bị có thể cho kết quả khác nhau. Hướng dẫn tạo hồ sơ full tunnel nhưng không thiết lập cùng một cơ chế chặn thường trực trên mọi thiết bị. Nếu không có bảo vệ bổ sung, tắt hồ sơ có thể khôi phục internet thông thường.
Windows: ứng dụng chính thức tự bật kill switch cho hồ sơ tập lệnh tạo ra. Bảo vệ có hiệu lực khi đường hầm đang bật. Tắt hồ sơ thủ công sẽ cho phép internet thông thường trở lại.
Android: trong cài đặt hệ thống, tìm VPN rồi cài đặt WireGuard. Bật Always-on VPN và Block connections without VPN để chặn kết nối ngoài VPN; chỉ Always-on là chưa đủ. Tên và vị trí tùy điện thoại. Khi bật chặn, VPN không hoạt động cũng đồng nghĩa không có internet.
Mac và iPhone: On-Demand tự kết nối theo quy tắc đã đặt. Không nên coi đó là kill switch thường trực.
Ubuntu Desktop: cách nhập bằng NetworkManager bên dưới không tạo kill switch riêng. Cần thêm quy tắc tường lửa trên máy tính.
Máy chủ không truy cập được khác với hồ sơ VPN bị tắt. Nếu máy chủ ngừng phản hồi nhưng hồ sơ vẫn bật, lưu lượng có thể chỉ dừng lại; không nhất thiết thiết bị đã chuyển sang kết nối ngoài VPN.
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ị.
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 my-wg-vpn.conf để kết nối có tên my-wg-vpn. 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/my-wg-vpn.conf"
sudo nmcli connection modify my-wg-vpn connection.autoconnect no ipv4.dns-priority -50 ipv4.dns-search "~."sudo nmcli connection up my-wg-vpn
nmcli connection show --activesudo nmcli connection down my-wg-vpn6. 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 450–500 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, lưu lượng 1 TB/tháng; giá lúc tạo là 5 USD/tháng.
Trong một thử nghiệm riêng, máy chủ Vultr Shared CPU Intel High Frequency (vhf-1c-1gb; 1 vCPU, 1 GB RAM), giá 6 USD/tháng, đạt khoảng 550–750 Mbps cho cả tải xuống và tải lên. Cả hai gói đều được thử trên Windows với cùng phương pháp và tuyến: San Diego → máy chủ VPN ở vùng Vịnh San Francisco → máy chủ đo tại Seattle.
Kết quả khác nhau giữa các máy chủ Intel High Frequency được thử: một số luôn đạt gần đầu trên của khoảng tốc độ, trong khi số khác ổn định gần đầu dưới. Chỉ chọn gói này không bảo đảm đạt 750 Mbps.
Đâ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í.
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.
Máy chủ thử nghiệm có giá 5 và 6 USD/tháng. Giá, phần cứng và hạn mức lưu lượng tùy nhà cung cấp, khu vực. Khi so với thuê bao VPN, hãy tính cả việc một VPS chỉ cho một vị trí đã chọn và bạn tự bảo trì máy chủ.
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ì
Dùng hồ sơ riêng cho mỗi thiết bị. Để thu hồi quyền truy cập của một hồ sơ VPN, vào VPS qua SSH rồi chạy lệnh xóa bên dưới, thay iphone bằng tên hồ sơ. Xóa các bản sao tệp hoặc mã QR đã lưu. Chỉ xóa hồ sơ trên thiết bị không thu hồi quyền trên 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-requiredCác lệnh này liệt kê bản cập nhật và kiểm tra yêu cầu khởi động lại, không cài bản cập nhật. Cấu hình cập nhật bảo mật và bảo vệ VPS riêng với việc cài VPN.
bash /root/internetspeed-wireguard/remove-server.sh --confirm