คำตอบสั้น ๆ: ตั้ง Site-to-Site VPN ด้วย WireGuard ให้ทั้งวงแลนสำนักงานเข้าถึงเครือข่ายภายในของ Cloud Server ได้ตรง ครอบคลุม AllowedIPs, IP Forwarding, Firewall และ NAT
คู่มือนี้อธิบาย Site-to-Site ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
Site-to-Site VPN คือการเชื่อมเครือข่ายสองแห่งเข้าหากันผ่านอุโมงค์ที่เข้ารหัส เช่น วงแลนของสำนักงานกับเครือข่ายภายในของ Cloud Server ทำให้เครื่องทุกเครื่องในออฟฟิศเรียก IP ภายในของเซิร์ฟเวอร์บนคลาวด์ได้ตรง โดยไม่ต้องติดตั้งโปรแกรม VPN ทีละเครื่อง เหมาะกับองค์กรที่ย้ายระบบบัญชี ERP ไฟล์เซิร์ฟเวอร์ หรือฐานข้อมูลขึ้นคลาวด์ แต่ยังอยากให้พนักงานใช้งานเหมือนอยู่ในวงแลนเดียวกัน
คู่มือนี้ใช้ WireGuard ต่อจาก คู่มือติดตั้ง WireGuard แบบเครื่องต่อเครื่อง แต่เปลี่ยนจากการเชื่อมเครื่องเดียวเป็นการ Route ทั้ง Subnet เมื่อจบคุณจะมีอุโมงค์ Site-to-Site ที่ฝั่งสำนักงานเป็นผู้เริ่มเชื่อมต่อ เปิดเฉพาะทราฟฟิกที่จำเป็นผ่าน Firewall และรู้วิธีให้เซิร์ฟเวอร์อื่นบนคลาวด์ตอบกลับมาหาออฟฟิศได้
สิ่งที่ต้องเตรียม
- Cloud Server หนึ่งเครื่องทำหน้าที่ VPN Gateway (Ubuntu 22.04/24.04, Debian 12 หรือ AlmaLinux/Rocky Linux 9) มี Public IP
203.0.113.10และการ์ดเครือข่ายภายในeth1=10.10.0.5ตรวจชื่อการ์ดจริงด้วยip -br addr - อุปกรณ์ฝั่งสำนักงานที่รัน WireGuard ได้ เช่น เครื่อง Linux ขนาดเล็กในวงแลน (ตัวอย่าง
192.168.50.2) หรือ Router ที่รองรับ WireGuard ในตัว และสิทธิ์แก้ Route บน Router หลักของออฟฟิศ - แผน IP ที่ไม่ซ้อนกัน: ออฟฟิศ
192.168.50.0/24, คลาวด์10.10.0.0/24, อุโมงค์10.99.0.0/30 - ช่องทางสำรองเข้าเครื่อง เช่น Console ผ่านหน้าเว็บของผู้ให้บริการ เพราะขั้นตอนนี้แก้ Firewall และ Routing
ขั้นตอนที่ 1: ติดตั้ง WireGuard และสร้างคีย์ทั้งสองฝั่ง
ทำซ้ำบนทั้ง Cloud Server และ Gateway ของสำนักงาน โดยตั้งชื่อไฟล์คีย์ให้ต่างกัน (cloud.key กับ office.key)
# Ubuntu / Debian
sudo apt update && sudo apt install -y wireguard
# AlmaLinux / Rocky Linux 9
sudo dnf install -y wireguard-tools
sudo -i
cd /etc/wireguard && umask 077
wg genkey | tee cloud.key | wg pubkey > cloud.pub
exit
แลกเปลี่ยนเฉพาะไฟล์ .pub ระหว่างสองฝั่ง ไฟล์ .key ห้ามออกจากเครื่อง
ขั้นตอนที่ 2: ตั้งค่าฝั่ง Cloud Server
สร้าง /etc/wireguard/wg0.conf หัวใจของ Site-to-Site อยู่ที่ AllowedIPs ของ Peer ซึ่งต้องใส่ทั้ง IP อุโมงค์ของอีกฝั่งและ Subnet ของสำนักงาน wg-quick จะสร้าง Route ไป 192.168.50.0/24 ผ่าน wg0 ให้เอง
[Interface]
Address = 10.99.0.1/30
ListenPort = 51820
PrivateKey = <เนื้อหาของ cloud.key>
[Peer]
# office-bangkok
PublicKey = <เนื้อหาของ office.pub>
AllowedIPs = 10.99.0.2/32, 192.168.50.0/24
ฝั่งคลาวด์ไม่ใส่ Endpoint เพราะ IP สาธารณะของออฟฟิศอาจเปลี่ยนได้ ให้ออฟฟิศเป็นผู้เริ่มเชื่อมต่อ จากนั้นเปิด IP Forwarding เพื่อให้เครื่องส่งต่อแพ็กเก็ตระหว่าง wg0 กับ eth1 ได้
sudo chmod 600 /etc/wireguard/wg0.conf
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-site-to-site.conf
sudo sysctl --system
sudo systemctl enable --now wg-quick@wg0
ขั้นตอนที่ 3: ตั้งค่าฝั่งสำนักงาน
บน Gateway ของออฟฟิศ สร้าง wg0.conf ที่กลับด้านกัน AllowedIPs ฝั่งนี้คือ Subnet ของคลาวด์ ส่วน PersistentKeepalive ช่วยให้ NAT ของ Router ออฟฟิศไม่ตัดอุโมงค์ที่เงียบ แล้วเปิด IP Forwarding และ wg-quick@wg0 แบบเดียวกับขั้นตอนที่ 2
[Interface]
Address = 10.99.0.2/30
PrivateKey = <เนื้อหาของ office.key>
[Peer]
PublicKey = <เนื้อหาของ cloud.pub>
Endpoint = 203.0.113.10:51820
AllowedIPs = 10.99.0.1/32, 10.10.0.0/24
PersistentKeepalive = 25
ถ้า Gateway ไม่ใช่ Router หลักของออฟฟิศ ให้เพิ่ม Static Route บน Router หลัก: ปลายทาง 10.10.0.0/24 ส่งไป Gateway 192.168.50.2 เครื่องลูกในวงแลนไม่ต้องแก้อะไร เพราะส่งทุกอย่างไป Router อยู่แล้ว หากใช้ Router ที่มี WireGuard ในตัว เช่น MikroTik RouterOS 7 หรือ OPNsense ให้กรอกค่าชุดเดียวกัน (Private Key, Public Key ของคลาวด์, Endpoint และ Allowed Address 10.10.0.0/24) แล้วเพิ่ม Route ไปที่ Interface WireGuard
ขั้นตอนที่ 4: เปิด Firewall และอนุญาตการ Forward บนคลาวด์
ก่อนแก้ Firewall ให้เปิด SSH ค้างไว้หนึ่งหน้าต่าง และทดสอบด้วยหน้าต่างใหม่ทุกครั้ง บน Ubuntu/Debian ที่ใช้ UFW การ Forward ถูกปิดเป็นค่าเริ่มต้น จึงต้องเพิ่มกฎ route ทั้งสองทิศ
# Ubuntu / Debian (UFW)
sudo ufw allow from 198.51.100.20 to any port 51820 proto udp
sudo ufw route allow in on wg0 out on eth1
sudo ufw route allow in on eth1 out on wg0
# AlmaLinux / Rocky Linux 9 (firewalld)
sudo firewall-cmd --permanent --zone=public --add-port=51820/udp
sudo firewall-cmd --permanent --zone=internal --add-interface=wg0
sudo firewall-cmd --permanent --zone=internal --add-interface=eth1
sudo firewall-cmd --permanent --zone=internal --add-forward
sudo firewall-cmd --reload
198.51.100.20 คือ IP สาธารณะของออฟฟิศ ถ้า IP เปลี่ยนบ่อยให้เปิด UDP 51820 แบบไม่จำกัดต้นทางแทน ซึ่งยังปลอดภัยพอสมควร เพราะ WireGuard ไม่ตอบแพ็กเก็ตที่ไม่มีคีย์ถูกต้องเลย ถ้า Gateway ฝั่งออฟฟิศเปิด Firewall ไว้ ให้เพิ่มกฎ route ระหว่าง wg0 กับการ์ดแลนแบบเดียวกัน สำหรับ firewalld ให้ตรวจกฎเดิมของ eth1 ก่อนย้ายเข้าโซน internal ถ้ามีหน่วยงานใช้ Security Group ของแพลตฟอร์มด้วย ให้เปิด UDP 51820 ที่นั่นเช่นกัน