Cài đặt máy chủ WireGuard trên Linux (wg0, NAT, Peers)
12 phút đọc - 22 tháng 6, 2026

Hướng dẫn thiết lập máy chủ WireGuard thực tế trên Linux: khóa, wg0.conf, NAT, quản lý peer bằng syncconf và các lệnh khắc phục sự cố mà các quản trị viên hệ thống thực sự sử dụng.
Hãy chạy máy chủ WireGuard khi bạn muốn truy cập riêng tư vào cơ sở hạ tầng được lưu trữ mà không để lộ các cổng quản trị ra internet công cộng. Nó sử dụng xác thực khóa công khai, chạy bên trong nhân Linux từ phiên bản 5.6 trở lên và hoạt động ẩn sau khi được khởi động. Bài viết này đề cập đến khi nào nên sử dụng máy chủ WireGuard, cách khởi động wg0cũng như cách duy trì hoạt động ổn định của các nút kết nối hàng ngày.
Khi nào nên sử dụng máy chủ WireGuard
Có ba mô hình bao quát hầu hết các cấu hình: truy cập từ xa, kết nối giữa các máy chủ và định tuyến giữa các địa điểm.
Đối với truy cập từ xa, hãy chạy máy chủ trên VPS hoặc máy chủ chuyên dụng và định tuyến lưu lượng quản trị qua đường hầm. Đặt AllowedIPs trên mỗi máy đối tác vào mạng con quản lý riêng (ví dụ như 10.0.0.0/24) để chỉ lưu lượng dành cho các hệ thống nội bộ mới sử dụng đường hầm. Tất cả các lưu lượng khác vẫn đi qua kết nối cục bộ của người dùng. Nếu người dùng kết nối từ mạng gia đình hoặc mạng di động, hãy thêm PersistentKeepalive = 25 trên phía máy khách để ngăn các phiên NAT bị ngắt kết nối.
Đối với các kết nối giữa các máy chủ, hãy giữ AllowedIPs hẹp. Thông thường là một /32 hoặc một mạng con backend nhỏ. Điều này giúp tránh kéo lưu lượng không liên quan vào đường hầm và giữ cho việc định tuyến dễ dự đoán.
Kết nối site-to-site thì khác. Máy chủ WireGuard đóng vai trò là cổng giữa các mạng con, do đó phải bật chuyển tiếp IP và các quy tắc NAT phải gửi lưu lượng truy cập trả về qua giao diện đúng.
| Mẫu | AllowedIPs phạm vi | Phù hợp nhất | Độ phức tạp khi thiết lập |
|---|---|---|---|
| Truy cập từ xa | Mạng con riêng, ví dụ: 10.0.0.0/24 | Quyền truy cập của quản trị viên và nhà phát triển | Thấp |
| Từ máy chủ đến máy chủ | Các địa chỉ IP cụ thể hoặc mạng con phía sau | Kết nối máy chủ điểm-điểm | Thấp đến trung bình |
| Giữa các site | Toàn bộ mạng LAN từ xa, ví dụ: /24 | Định tuyến từ cổng đến cổng | Trung bình đến cao |
| Truy cập dịch vụ riêng | Chỉ mạng con nội bộ (đường hầm chia tách) | Cách ly dịch vụ phía sau | Trung bình |
Cài đặt máy chủ
Máy chủ lưu trữ khóa riêng, lắng nghe trên UDP 51820 theo mặc định, và kết thúc đường hầm. Cấu hình cơ bản này áp dụng cho cả ba mẫu trên.
Khóa và wg0.conf
Tạo cặp khóa máy chủ:
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.keyBảo mật khóa riêng:
sudo chmod 600 /etc/wireguard/server_private.keyKhóa riêng vẫn được lưu trữ trên máy chủ. Khóa công khai là thứ bạn cung cấp cho các máy chủ khác.
Tạo /etc/wireguard/wg0.conf:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o <PUBLIC_IFACE> -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o <PUBLIC_IFACE> -j MASQUERADE
[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.8.0.2/32Tìm giao diện ra ngoài để chèn vào <PUBLIC_IFACE> bằng:
ip -o -4 route show to default | awk '{print $5}'Chuyển tiếp, tường lửa và NAT
Mở cổng lắng nghe:
sudo ufw allow 51820/udpKích hoạt chuyển tiếp IP bằng cách thêm dòng này vào /etc/sysctl.conf:
net.ipv4.ip_forward = 1Áp dụng mà không cần khởi động lại:
sudo sysctl -pTệp PostUp và PostDown các dòng trong wg0.conf sẽ thêm và xóa quy tắc NAT masquerade khi giao diện được kích hoạt hoặc ngừng hoạt động. Nếu không có chúng, lưu lượng truy cập trả về từ mạng LAN sẽ không bao giờ quay trở lại máy đối tác.
Việc kích hoạt đường hầm
wg-quick sẽ xử lý giao diện, định tuyến và các PostUp/PostDown các hook trong một lệnh duy nhất:
sudo wg-quick up wg0Để khởi động tự động sau khi khởi động lại hệ thống, hãy kích hoạt đơn vị systemd:
sudo systemctl enable --now wg-quick@wg0Kiểm tra trạng thái bằng:
sudo wg showMột dòng lệnh gần đây latest handshake xác nhận đường hầm đang hoạt động. Nếu dòng này trông cũ hoặc trống rỗng, hãy kiểm tra tường lửa, các khóa ở cả hai bên và máy đối tác AllowedIPs.
Thêm và xóa các đối tác
Mỗi đối tác cần có cặp khóa riêng. Hãy tạo cặp khóa này trên máy khách, sau đó thêm khóa công khai của đối tác vào wg0.conf vào một [Peer] với một AllowedIPs mục gán địa chỉ IP đường hầm cho nó.
Sử dụng /32 cho một thiết bị duy nhất:
AllowedIPs = 10.8.0.3/32Điều này ngăn một thiết bị không chiếm dụng các địa chỉ đã được gán cho thiết bị khác. Đối với truy cập đường hầm phân chia, chỉ liệt kê các mạng con riêng tư cần đi qua đường hầm, ví dụ AllowedIPs = 10.8.0.0/24.
Áp dụng các thay đổi cấu hình mà không làm gián đoạn các phiên đang hoạt động:
sudo wg syncconf wg0 <(wg-quick strip wg0)Việc xóa một thiết bị đối tác cũng được thực hiện theo cách tương tự. Xóa [Peer] khối của nó khỏi wg0.conf và chạy syncconf lại.
Khắc phục sự cố
Nếu một thiết bị ngang hàng kết nối được nhưng không thể truy cập bất kỳ thứ gì ở phía bên kia, nguyên nhân thường là một trong bốn điều sau:
- Chức năng chuyển tiếp IP bị tắt
- Thiếu quy tắc NAT masquerade
- Giao diện ra ngoài trong quy tắc NAT không chính xác
AllowedIPskhông bao gồm địa chỉ đích
Kiểm tra chuyển tiếp:
cat /proc/sys/net/ipv4/ip_forwardNên trả về 1. Nếu trả về 0, thì thay đổi sysctl chưa được áp dụng hoặc chưa được lưu.
Kiểm tra quy tắc NAT và giao diện ra ngoài:
sudo iptables -t nat -L POSTROUTING
ip route get 1.1.1.1Lệnh thứ hai hiển thị tên giao diện ra ngoài thực tế, chẳng hạn như ens3, enp1s0, hoặc eth0. Tên này phải trùng khớp với giao diện trong quy tắc MASQUERADE.
Nếu quá trình bắt tay (handshake) bị thiếu, hãy kiểm tra xem cổng UDP 51820 đã được mở tại tường lửa và tại bất kỳ nhà cung cấp dịch vụ cấp trên nào, đồng thời cả hai bên đều có khóa công khai chính xác của bên kia.
Đối với các máy ngang hàng nằm sau NAT dân dụng hoặc di động có tính năng ngắt các phiên UDP không hoạt động, hãy thiết lập PersistentKeepalive = 25 trên máy khách.
Việc xoay vòng khóa và khóa chia sẻ trước
Đối với các đường hầm duy trì hoạt động trong nhiều tháng, hãy xoay vòng khóa khoảng một lần mỗi năm. Tạo một cặp khóa mới, cập nhật cả hai đầu và áp dụng bằng wg syncconf. Không nên tái sử dụng một khóa riêng tư cho hai đối tác. Điều này sẽ gây ra xung đột định tuyến và làm gián đoạn việc truyền tải giữa chúng.
Để có thêm một lớp bảo mật bên trên xác thực khóa công khai, hãy thêm một khóa chia sẻ trước cho mỗi đối tác:
wg genpskThêm kết quả vào PresharedKey = <PSK> vào [Peer] khối ở cả hai đầu. WireGuard kết hợp PSK vào quá trình bắt tay, do đó kẻ tấn công dù bằng cách nào đó xâm phạm được một trong các khóa bất đối xứng vẫn không thể giải mã lưu lượng mà không có khóa này.
Các lệnh hữu ích trong sinh hoạt hàng ngày:
| Lệnh | Mục đích |
|---|---|
wg show | Đối tác, quá trình bắt tay, bộ đếm lưu lượng |
wg show wg0 transfer | Bộ đếm byte cho wg0 |
wg show all dump | Kết quả có thể phân tích bằng máy cho các skript giám sát |
wg syncconf wg0 <(wg-quick strip wg0) | Áp dụng các thay đổi cấu hình mà không làm mất các phiên |
wg genpsk | Tạo khóa chia sẻ trước |
Nếu bạn cần một máy chủ ổn định, có thể truy cập công khai để kết thúc các đường hầm WireGuard và định tuyến lưu lượng truy cập riêng tư vào hạ tầng của bạn, hãy xem qua các gói VPS không giới hạn băng thông của FDC.

Mỏi mắt do sử dụng thiết bị kỹ thuật số: Cách bảo vệ thị lực trong thế giới ngập tràn màn hình
Cả ngày chỉ nhìn vào màn hình? Hãy tìm hiểu cách giảm mỏi mắt do sử dụng thiết bị kỹ thuật số với các kỹ thuật và công cụ đã được chứng minh hiệu quả. Hướng dẫn này rất cần thiết cho những người làm việc từ xa, các nhà phát triển và bất kỳ ai làm việc trong lĩnh vực công nghệ.
4 phút đọc - 21 tháng 5, 2025
Tại sao việc sở hữu một VPS mạnh mẽ và không giới hạn băng thông lại quan trọng
8 phút đọc - 9 tháng 5, 2025

Bạn có thắc mắc hoặc cần giải pháp tùy chỉnh?
Các tùy chọn linh hoạt
Phạm vi toàn cầu
Triển khai ngay lập tức
Các tùy chọn linh hoạt
Phạm vi toàn cầu
Triển khai ngay lập tức