Kết nối Site-to-Site VPN giữa 2 cụm Proxmox VE bằng WireGuard: Nhanh, nhẹ và cực kỳ ổn định

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

Bối cảnh: Khi 2 giờ sáng và hệ thống Backup Site-to-Site “đình công”

2 giờ sáng, điện thoại mình rung bần bật. Hệ thống giám sát báo tin dữ: Cụm Proxmox tại chi nhánh (Site B) không thể đẩy bản backup về Server chính (Site A). Kiểm tra nhanh, mình thấy đường truyền OpenVPN cũ bị treo cứng. Latency vọt lên hơn 1.500ms khiến mọi kết nối timeout liên tục.

Lúc đó, mình nhận ra việc duy trì một hệ thống VPN cồng kềnh, cấu hình phức tạp là một sai lầm. Mình cần thứ gì đó nhẹ hơn, nhanh hơn và phải thực sự ổn định. Đó là lý do mình chuyển toàn bộ hạ tầng sang WireGuard.

Trên hệ thống Lab với 12 VM, mình đã test thử và kết quả thật kinh ngạc. Tốc độ truyền tải tăng từ 45Mbps (OpenVPN) lên mức kịch khung đường truyền 300Mbps. Trong khi đó, mức chiếm dụng CPU giảm từ 15% xuống chỉ còn chưa đầy 2%. Dưới đây là cách mình đã thiết lập để hai mạng nội bộ Proxmox “thông nòng” hoàn toàn.

Bước 1: Chuẩn bị và Cài đặt

Để dễ hình dung, mình sẽ sử dụng thông số thực tế từ kịch bản triển khai của mình:

  • Site A (Trụ sở): IP WAN: 1.2.3.4 | Mạng nội bộ: 192.168.10.0/24 | IP WireGuard: 10.0.0.1
  • Site B (Chi nhánh): IP WAN: 5.6.7.8 | Mạng nội bộ: 192.168.20.0/24 | IP WireGuard: 10.0.0.2

Vì Proxmox chạy trên nền Debian nên việc cài đặt rất đơn giản. Bạn hãy chạy lệnh sau trên cả hai node:

apt update && apt install wireguard -y

Tiếp theo, hãy bật tính năng IP Forwarding. Bước này cho phép Proxmox đóng vai trò router, chuyển tiếp gói tin giữa card VPN và mạng nội bộ. Nếu thiếu nó, các máy ảo (VM) bên trong sẽ không thể thấy nhau.

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

Bước 2: Khởi tạo cặp khóa (Key Pairs)

WireGuard sử dụng cơ chế khóa công khai để bảo mật. Trên mỗi node, bạn hãy tạo bộ khóa riêng và lưu trữ cẩn thận. Tuyệt đối không chia sẻ Private Key ra ngoài.

mkdir -p /etc/wireguard && cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey

Sau khi chạy lệnh, mỗi Site sẽ có một file privatekeypublickey riêng biệt.

Bước 3: Cấu hình Site-to-Site thực tế

Cấu hình tại Site A (Server chính)

Tạo file /etc/wireguard/wg0.conf với nội dung sau:

[Interface]
PrivateKey = <Private_Key_Site_A>
Address = 10.0.0.1/24
ListenPort = 51820

# Định tuyến để máy ảo Site B thấy máy ảo Site A
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o vmbr0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o vmbr0 -j MASQUERADE

[Peer]
PublicKey = <Public_Key_Site_B>
AllowedIPs = 10.0.0.2/32, 192.168.20.0/24
Endpoint = 5.6.7.8:51820
PersistentKeepalive = 25

Cấu hình tại Site B (Chi nhánh)

Tương tự cho Site B:

[Interface]
PrivateKey = <Private_Key_Site_B>
Address = 10.0.0.2/24
ListenPort = 51820

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o vmbr0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o vmbr0 -j MASQUERADE

[Peer]
PublicKey = <Public_Key_Site_A>
AllowedIPs = 10.0.0.1/32, 192.168.10.0/24
Endpoint = 1.2.3.4:51820
PersistentKeepalive = 25

Điểm mấu chốt: Dòng AllowedIPs phải chứa dải IP của mạng đối phương. Đây là cách WireGuard biết gói tin nào cần được đẩy vào đường ống VPN.

Bước 4: Kích hoạt và kiểm tra thành quả

Đã đến lúc khởi động hệ thống. Bạn hãy chạy lệnh sau trên cả hai máy:

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0

Để kiểm tra trạng thái, mình thường dùng lệnh “quốc dân”:

wg show

Nếu thấy dòng latest handshake xuất hiện kèm dung lượng data transfer, nghĩa là kết nối đã thông. Cuối cùng, hãy thử ping từ một VM ở Site A (192.168.10.50) sang VM ở Site B (192.168.20.100). Nếu phản hồi dưới 10ms (tùy khoảng cách địa lý), bạn đã thành công.

Bước 5: Kinh nghiệm xử lý sự cố thực tế

Đôi khi tunnel báo “up” nhưng dữ liệu không qua được. Kinh nghiệm của mình là hãy kiểm tra ngay pve-firewall. Proxmox có tường lửa mặc định khá gắt gao, đôi khi nó sẽ chặn các gói tin từ dải IP lạ.

Hãy đảm bảo bạn đã mở cổng 51820/UDP trên cả hai đầu Router. Ngoài ra, hãy kiểm tra bảng định tuyến bằng lệnh:

ip route show

Bạn phải thấy dòng 192.168.x.0/24 dev wg0. Nếu không có, WireGuard chưa nạp được cấu hình AllowedIPs. Một mẹo nhỏ cho ai dùng IP động: Hãy sử dụng DDNS và điền domain vào phần Endpoint. WireGuard sẽ tự động cập nhật IP mới mỗi khi kết nối lại.

Việc triển khai WireGuard không chỉ giúp mình bớt lo lắng mỗi đêm trực mà còn tối ưu hóa tài nguyên server đáng kể. Nếu bạn đang quản lý nhiều chi nhánh, đây chắc chắn là giải pháp ổn định và hiệu quả nhất hiện nay.

Share: