Tới nội dung
Cloudj

Ứng dụng VPS

Tự dựng VPN WireGuard trên VPS Amsterdam: hướng dẫn từng bước

Tự dựng VPN WireGuard trên VPS Amsterdam: cài đặt, tạo key, cấu hình server và thiết bị, bật NAT, mở firewall đúng cách và xử lý lỗi kết nối thường gặp.

Cập nhật · 5 phút đọc

Tự dựng VPN WireGuard trên VPS là cách đơn giản nhất để có một VPN chỉ bạn và đội của bạn sử dụng. WireGuard nhỏ gọn, cài nhanh và đã nằm sẵn trong nhân Linux, nên một máy chủ cấu hình khiêm tốn vẫn phục vụ được vài thiết bị một cách nhẹ nhàng. Bài này dựng một VPN hoàn chỉnh trên máy chủ Amsterdam từ con số không: cài đặt, tạo key, cấu hình server và client, NAT, firewall, cùng những lỗi hay gặp nhất kiểu "kết nối được mà không vào được mạng". Cuối bài là phần nói thẳng khi nào tự dựng VPN không phải lựa chọn đúng.

Vì sao chọn Amsterdam cho VPN ở châu Âu

Amsterdam là một trong những trung tâm Internet lớn của Tây Âu, nên đây là điểm ra mạng cân bằng nếu bạn hay di chuyển giữa các nước EU, làm việc cho khách hàng châu Âu hoặc cần một IP châu Âu cố định. Máy chủ Cloudj tại Amsterdam có gói tháng kèm 5 TB băng thông, điều này quan trọng với VPN vì mọi trang web, video và file tải về trên thiết bị của bạn đều đi qua máy chủ. Muốn biết thêm về vị trí này, hãy đọc VPS tốt nhất tại Hà Lan; hướng dẫn VPS châu Âu so sánh Amsterdam với Frankfurt, London và các thành phố châu Âu khác.

VPN cho vài thiết bị là việc nhẹ. Cấu hình nhỏ nhất 1 vCPU, 1 GB RAM là đủ cho nhu cầu cá nhân, CPU shared cũng không sao. Nếu nhiều người cùng xem video hoặc chuyển file lớn qua VPN cùng lúc, hãy thêm một vCPU.

Lưu ý về pháp lý trước khi bắt đầu

Tự chạy VPN là hợp pháp ở hầu hết các nơi, nhưng những gì bạn làm qua VPN vẫn phải tuân theo luật sở tại và điều khoản của từng dịch vụ. Hãy dùng nó để bảo vệ kết nối khi dùng Wi-Fi quán cà phê, sân bay, để truy cập máy chủ của chính bạn hoặc làm việc từ một IP châu Âu cố định. Đừng dùng nó để lách quy định của các nền tảng hay che giấu hành vi lạm dụng; IP đó gắn với máy chủ và tài khoản của bạn.

Bước 1: cài WireGuard

Triển khai một máy chủ Ubuntu 24.04 (danh sách hệ điều hành có thể khác theo vị trí, hãy kiểm tra trong console), đăng nhập qua SSH và cài công cụ:

sudo apt update && sudo apt install -y wireguard qrencode

Bước 2: tạo key

Mỗi bên có một private key không bao giờ rời khỏi thiết bị và một public key để chia sẻ cho bên kia. Tạo cặp key cho server và cho client đầu tiên:

sudo -i
cd /etc/wireguard
umask 077
wg genkey | tee server.key | wg pubkey > server.pub
wg genkey | tee laptop.key | wg pubkey > laptop.pub

Giữ nguyên shell root này cho các bước tiếp theo (gõ exit khi xong); lệnh cat server.key và tương tự sẽ in ra key để bạn dán vào cấu hình bên dưới.

Tạo key client ngay trên server rất tiện cho điện thoại, vì bạn sẽ cấu hình bằng mã QR. Với laptop, bạn có thể tạo key ngay trên laptop để private key không tồn tại ở bất kỳ nơi nào khác.

Bước 3: tìm tên card mạng ra Internet

Rule NAT cần tên giao diện mạng hướng ra Internet:

ip route show default

Tên đứng sau chữ dev (thường là eth0 hoặc ens3) là tên bạn dùng ở các bước sau.

Bước 4: viết cấu hình server

Tạo file /etc/wireguard/wg0.conf, thay key bằng nội dung của server.key và laptop.pub, thay eth0 bằng tên card mạng của bạn:

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

[Peer]
# laptop
PublicKey = LAPTOP_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

Ở phía server, AllowedIPs cho biết địa chỉ nào trong tunnel thuộc về peer này. Mỗi thiết bị mới nhận địa chỉ kế tiếp: 10.8.0.3/32, 10.8.0.4/32 và cứ thế.

Bước 5: bật chuyển tiếp gói tin và firewall

Máy chủ cần chuyển tiếp gói tin giữa tunnel và Internet:

echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system

Mở SSH và cổng UDP của WireGuard, cho phép lưu lượng từ tunnel đi ra Internet, rồi bật UFW:

sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw route allow in on wg0 out on eth0
sudo ufw enable

Mặc định UFW chặn lưu lượng chuyển tiếp, nên chính rule route allow mới là thứ giúp bạn lướt web được. Gói phản hồi quay về nhờ rule có sẵn của UFW cho các kết nối đã thiết lập. Bài cấu hình firewall UFW giải thích kỹ hơn các loại rule.

Bước 6: khởi động tunnel

sudo systemctl enable --now wg-quick@wg0
sudo wg show

wg show liệt kê interface, cổng đang lắng nghe và từng peer. Khi một thiết bị đã kết nối, peer đó sẽ có dòng "latest handshake".

Bước 7: cấu hình thiết bị

Tạo file laptop.conf với private key của laptop, public key và IP của server:

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

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

AllowedIPs = 0.0.0.0/0, ::/0 đẩy toàn bộ lưu lượng qua tunnel. Thêm ::/0 giúp lưu lượng IPv6 không "rò" ra ngoài VPN, kể cả khi tunnel chỉ chở IPv4. Nếu bạn chỉ muốn truy cập máy chủ của mình, hãy liệt kê địa chỉ các máy đó thay vào (split tunnel).

Nhập file vào ứng dụng WireGuard chính thức trên Windows hoặc macOS, còn trên Linux thì chạy sudo wg-quick up ./laptop.conf. Với điện thoại, hiển thị mã QR ngay trong terminal rồi quét bằng app WireGuard:

qrencode -t ansiutf8 < phone.conf

Khi thiết bị đã cấu hình xong, hãy xóa private key của client khỏi server. Danh sách ứng dụng chính thức cho mọi nền tảng có tại wireguard.com.

Thêm thiết bị mà không cần khởi động lại

Thêm một khối [Peer] mới vào wg0.conf, rồi áp dụng thay đổi mà không ngắt các kết nối đang chạy:

sudo bash -c 'wg syncconf wg0 <(wg-quick strip wg0)'

Kết nối được nhưng không vào được mạng

Kiểm tra lần lượt theo thứ tự:

  1. wg show không có handshake. Cổng UDP 51820 bị chặn, sai IP endpoint, hoặc nhầm key. Kiểm tra client có đúng public key của server và ngược lại.
  2. Có handshake nhưng không có Internet. Chưa bật chuyển tiếp (sysctl net.ipv4.ip_forward phải in ra 1), sai tên card mạng trong rule NAT, hoặc thiếu rule route của UFW.
  3. Có trang vào được, có trang không. Thường do kích thước gói tin trên một số mạng di động hay Wi-Fi công cộng. Thêm MTU = 1380 vào phần [Interface] của client rồi kết nối lại.
  4. Không phân giải được tên miền. Thiếu dòng DNS trong cấu hình client, hoặc hệ điều hành của client bỏ qua dòng này.

Khi nào không nên tự dựng VPN WireGuard trên VPS

VPN tự dựng cho bạn một IP ở một thành phố, và bạn tự bảo trì: cập nhật, quản lý key, thỉnh thoảng xử lý handshake lỗi. Nếu không muốn tự vận hành máy chủ, Cloudj cũng có dịch vụ VPN. Nếu thứ bạn cần thật ra là một IP cố định cho profile trình duyệt hay công cụ thu thập dữ liệu, chứ không phải tunnel mã hóa cho cả thiết bị, thì proxy riêng thường hợp hơn. Còn nếu cùng máy chủ đó bạn định chạy thêm dịch vụ khác, như một Git server tự host hay máy chủ game như trong bài Minecraft trên VPS Đức, WireGuard là cách tốt để giấu trang quản trị của chúng khỏi Internet công cộng.

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

WireGuard dùng cổng nào?

Bất kỳ cổng UDP nào bạn chọn; 51820 là cổng quy ước. WireGuard không dùng TCP, nên hãy mở cổng UDP trên firewall.

Một VPS nhỏ phục vụ được bao nhiêu thiết bị?

VPN cá nhân với vài điện thoại và laptop chạy tốt trên cấu hình nhỏ nhất. Theo dõi biểu đồ CPU và mạng trong console, và nâng cấu hình nếu nhiều người dùng nặng cùng lúc.

WireGuard có tốt hơn OpenVPN không?

WireGuard có mã nguồn nhỏ hơn nhiều, cấu hình đơn giản hơn và nằm sẵn trong nhân Linux. OpenVPN chạy được qua TCP, đôi khi hữu ích ở những mạng chặn UDP.

Lưu lượng qua VPN có tính vào băng thông không?

Có. Lưu lượng VPN là lưu lượng máy chủ bình thường. Gói tháng ở Amsterdam kèm 5 TB; khi trả theo giờ, băng thông được tính theo số GB đã dùng, và biểu đồ trong console cho bạn thấy mức sử dụng.

Dựng VPN Amsterdam của riêng bạn

Một máy chủ nhỏ ở Amsterdam cùng khoảng hai mươi phút cài đặt là bạn có VPN WireGuard riêng, do chính mình kiểm soát. Xem giá hiện hành trên trang bảng giá hoặc triển khai ngay từ console Cloudj; bạn có thể nạp số dư bằng chuyển khoản ngân hàng bằng VND.

Triển khai máy chủ hoặc mua proxy

Chọn vị trí trong console, xem giá trực tiếp và thanh toán từ số dư tài khoản.