1. Tổng quan.
WireGuard là một giao thức VPN hiện đại, đơn giản, nhanh và bảo mật. Bài viết này hướng dẫn cách thiết lập kết nối VPN Site-to-Site sử dụng WireGuard, với một ví dụ minh họa giữa hai địa điểm A và B.
2. Các bước thực hiện.
- Điều kiện tiên quyết
- Cấu hình máy ảo
- Hệ điều hành và mạng
- Cấu hình WireGuard
- Kết nối và kiểm tra
- Cấu hình định tuyến giữa các site
3. Điều kiện tiên quyết
- Địa chỉ IP công khai hoặc Dynamic DNS trên kết nối WAN
- Hypervisor tại mỗi site để tạo máy ảo Linux (không bắt buộc)
- Quyền quản lý cấu hình router tại mỗi site để thiết lập port forwarding và static routes
- Có thể sử dụng máy tính vật lý chạy Linux thay vì máy ảo
4. Cấu hình máy ảo
Bạn có thể dùng máy tính cũ hoặc Raspberry Pi thay vì máy ảo. Nếu dùng máy ảo, đề xuất cấu hình:
- 2 vCPU
- 4GB RAM
- 15GB dung lượng ổ cứng
- Mạng bridge
5. Hệ thống này phù hợp với.
- Khoảng 20 thiết bị tại site B truy cập máy chủ tại site A
- Kết nối Internet tại site A có upload 250Mbps
- Dung lượng trao đổi ~900GB/ngày
Tải ISO bản tối giản của một distro Linux và cài đặt hệ điều hành cơ bản. Hướng dẫn này sử dụng CentOS 8, áp dụng cho các distro dựa trên RHEL8 như Rocky Linux, Oracle Linux, v.v. Hãy gán IP tĩnh cho interface của máy ảo.
6. Hệ điều hành và setup network.
Tham khảo sơ đồ.
![](https://wiki.hoanghd.com/wp-content/uploads/2025/02/image-9.png)
Sau khi cài đặt hệ điều hành, cập nhật hệ thống và cài đặt kho EPEL:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
dnf --enablerepo=elrepo-kernel install kernel-ml
grub2-set-default 0
reboot
Sau khi reboot, kiểm tra module WireGuard:
modinfo wireguard
Cài đặt công cụ WireGuard:
dnf install wireguard-tools
Bật tính năng chuyển tiếp IPv4 và tắt IPv6:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p
systemctl restart NetworkManager
Thêm firewall rules:
firewall-cmd --add-port=15380/tcp
firewall-cmd --add-port=15380/udp
firewall-cmd --zone=public --add-masquerade
firewall-cmd --runtime-to-permanent
7. Cấu hình WireGuard
Tạo public key và private key:
wg genkey | tee privatekey | wg pubkey > publickey
Di chuyển key vào thư mục WireGuard:
mv publickey /etc/wireguard/
mv privatekey /etc/wireguard/
Tải configuration file:
git clone https://github.com/a4649/wireguard-site-to-site.git
Cấu hình Site A:
- Thay thế
site-A-private-key
trongwg0.conf
bằng nội dung của/etc/wireguard/privatekey
- Thay thế
site-B-public-key
bằng nội dung của/etc/wireguard/publickey
ở máy Site B - Copy file vào thư mục WireGuard:
cp -v wireguard-site-to-site/site-A/wg0.conf /etc/wireguard/
Ví dụ config wg0.conf của Site A.
[Interface]
Address = 10.10.10.1/30
ListenPort = 15300
PrivateKey = site-A-private-key
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;
[Peer]
PublicKey = site-B-public-key
AllowedIPs = 10.10.10.2/32, 192.168.20.0/24
Cấu hình Site B:
- Thay thế
site-B-private-key
trongwg0.conf
bằng nội dung của/etc/wireguard/privatekey
- Thay thế
site-A-public-key
bằng nội dung của/etc/wireguard/publickey
ở máy Site A - Thay thế
site-A-WAN_IP_ADDRESS
bằng IP công khai của Site A - Copy file vào thư mục WireGuard:
cp -v wireguard-site-to-site/site-B/wg0.conf /etc/wireguard/
Ví dụ config wg0.conf của Site B.
[Interface]
Address = 10.10.10.2/30
PrivateKey = site-B-private-key
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;
[Peer]
PublicKey = site-A-public-key
AllowedIPs = 10.10.10.1/32, 192.168.10.0/24
Endpoint = site-A-WAN_IP_ADDRESS:15300
Kết nối và kiểm tra
Khởi động WireGuard tại cả hai site:
wg-quick up wg0
Kiểm tra trạng thái kết nối:
wg show
Để tự động khởi động khi máy ảo boot:
systemctl enable wg-quick@wg0.service
Kiểm tra từ Site A:
tracepath 192.168.20.200
Kiểm tra từ Site B:
tracepath 192.168.10.200
Cấu hình định tuyến giữa các site
Cấu hình static route vào router/gateway của bạn để chuyển lưu lượng giữa hai site. Ví dụ tại Site A:
- Linux Server:
ip route add 192.168.20.0/24 via 192.168.10.200 dev eth0
- Windows Server:
route -P ADD 192.168.20.0 MASK 255.255.255.0 192.168.10.200
- Router Cisco:
ip route 192.168.20.0 255.255.255.0 192.168.10.200
- Unifi Gateway:
Settings > Routing & Firewall > Static Routes
Với hướng dẫn trên, bạn có thể thiết lập thành công kết nối VPN Site-to-Site sử dụng WireGuard. 🚀
Tham khảo https://github.com/a4649/wireguard-site-to-site/tree/main