Wednesday, February 12, 2025

WireGuard Site-to-Site VPN

-

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ơ đồ.

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 trong wg0.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 trong wg0.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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories