[EP.37] How to Configure Wireguard Site to Site VPN (RouterOS v7)
ข้อกำหนด
- จะต้องเป็น MikroTik RouterOS 7 ขึ้นไป (ใน LAB นี้ใช้ RouterOS 7.9.2 Stable)
- ฝั่ง HQ จะต้องได้รับ Public IP จาก ผู้ให้บริการอินเตอร์เน็ต เท่านั้น เพราะ ฝั่ง Branch จะต้อง Remote Dynamic DNS มายังฝั่ง HQ
วิธีการ Config Wireguard ฝั่ง HQ (สำนักงานใหญ่)
- Config รับเน็ตแบบ PPPoE Client (เพื่อรับ Public IP จากผู้ให้บริการ)
- เปิดใช้งาน Dynamic DNS ของ RouterOS ฝั่ง HQ
- ไปที่ IP > Cloud
- ติ๊ก DDNS Enabled
- กด Apply และ OK
3. สร้าง WireGuard Interface และกำหนดค่า IP Address ให้กับ Interface ของ WireGuard ฝั่ง HQ
3.1) สร้าง WireGuard Interface
- ไปที่เมนู WireGuard แท็ป WireGuard
- กด +
- กด OK เลย
Copy Public Key ฝั่ง HQ เก็บเอาไว้บน Notepad: RcFCMbValwwogEB2JKvFchpRcuYI7xCn0Z62nAJxP2U=
3.2) กำหนดค่า IP Address ให้กับ Interface ของ WireGuard (ฝั่ง HQ)
- ไปที่เมนู IP > Addresses
- กด +
- Address: 172.16.0.1/24 (คือการสร้างขา Local Address นั้นเอง โดยการกำหนดค่า IP Address ท่านสามารถเลือกใช้ Private IP Address ได้ตามใจชอบเลย)
- Network: 172.16.0.0
- Interface: wireguard1
- กด OK
4. ทำการ Peer ระหว่าง HQ และ Branch (ฝั่ง HQ)
4.1) Peer ระหว่าง HQ และ Brach
- ไปที่เมนู WireGuard แท็ป Peers
- กด +
- Interface: เลือก wireguard1
- Public Key: เอา Public key ฝั่ง Brach มาใส่ (vu3BCMVOy3kFARv3dc7yB9GPwKsL7cONxOmbohLIumA)
- Allowed Address: คือการอนุญาตให้ Address ไหนวิ่งผ่าน Wireguard บ้าง ซึ่งมี 2 Address คือ 172.16.0.2/32 (ซึ่งเป็น Address Wireguard ฝั่ง Remote หรือ Branch นั่นเอง) และ 192.168.12.0/24 (ซึ่งเป็น Network ฝั่ง Branch ที่มี PC-Branch อยู่)
5. ทำ Routing ฝั่ง HQ ไปหา ฝั่ง Branch
- ไปที่เมนู IP > Routes
- กด +
- Dst. Address: ป้อน Network เป้าหมายที่ต้องการ Route ไปหาฝั่ง Branch (192.168.12.0/24)
- Gateway: ป้อนขา Wireguard Remote Address ของฝั่ง Branch (172.16.0.2)
- กด Apply และ OK
วิธีการ Config Wireguard ฝั่ง Branch (สาขาย่อย)
- ฝั่ง Branch ไม่จำเป็นต้องมี Public WAN IP สามารถรับเน็ตได้ทุกรูปแบบ เช่น PPPoE-Client, DHCP Client หรือ Static IP ก็ได้
2. สร้าง WireGuard Interface และกำหนดค่า IP Address ให้กับ Interface ของ WireGuard ฝั่ง Branch
2.1) สร้าง WireGuard Interface
- ไปที่เมนู WireGuard แท็ป WireGuard
- กด +
- กด OK เลย
Copy Public Key ฝั่ง Branch เก็บเอาไว้บน Notepad: vu3BCMVOy3kFARv3dc7yB9GPwKsL7cONxOmbohLIumA=
2.2 กำหนดค่า IP Address ให้กับ Interface ของ WireGuard (ฝั่ง Branch)
- ไปที่เมนู IP > Addresses
- กด +
- Address: 172.16.0.2/24 (คือการสร้างขา Remote Address นั้นเอง โดยการกำหนดค่า IP Address)
- Network: 172.16.0.0
- Interface: wireguard1
- กด OK
3. ทำการ Peer ระหว่าง Branch และ HQ (ฝั่ง Branch)
3.1) Peer ระหว่าง Branch และ HQ
- ไปที่เมนู WireGuard แท็ป Peers
- Interface: เลือก wireguard1
- Public Key: เอา Public key ฝั่ง HQ มาใส่ (RcFCMbValwwogEB2JKvFchpRcuYI7xCn0Z62nAJxP2U)
- Endpoint: ให้นำ Dynamic IP หรือ Public WAN IP ของฝั่ง HQ มาใส่
- Endpoint Port: 13231 (default port ฝั่ง HQ)
- Allowed Address: คือการอนุญาตให้ Address ไหนวิ่งผ่าน Wireguard บ้าง ซึ่งมี 2 Address คือ 172.16.0.1/32 (ซึ่งเป็น Address Wireguard ฝั่ง Local หรือ HQ นั่นเอง) และ 192.168.20.0/24 (ซึ่งเป็น Network ฝั่ง HQ ที่มี Server-HQ อยู่)
- Persistent Keepalive: 00:00:10
- กด Apply และ OK
4. ทำ Routing ฝั่ง Branch ไปหา ฝั่ง HQ
- ไปที่เมนู IP > Routes
- กด +
- Dst. Address: ป้อน Network เป้าหมายที่ต้องการ Route ไปหาฝั่ง HQ (192.168.20.0/24)
- Gateway: ป้อนขา Wireguard Local Address ของฝั่ง HQ (172.16.0.1)
- กด Apply และ OK
5. Script สำหรับ ตัดและต่อ Tunnel Wireguard ใหม่ เมื่อ Wireguard ทั้ง 2 สาขาไม่เชื่อมต่อกัน (ควรมี Script นี้ เมื่อท่านทำ Wireguard VPN Site to Site!!) * ติดตั้ง Script นี้ เฉพาะฝั่ง Branch เท่านั่น *
- ไปที่เมนู System > Scripts
- กด +
- Name: ToggleWGPeer
- Policy: ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon
- Source:
:local wgcheckip LOCAL_IP_GATEWAY_WIREGUARD_HEADQUARTER
:local endpointip xxxyyy.sn.mynetname.net
#:log info "wg check-ip $wgcheckip "
:if ([/ping $wgcheckip interval=1 count=5] =0) do={
:log info "WG down $wgcheckip"
/interface/wireguard/peers/disable [find endpoint-address=$endpointip];
:delay 60
/interface/wireguard/peers/enable [find endpoint-address=$endpointip];
:log info "WG up again $wgcheckip"
}
- ตรง LOCAL_IP_GATEWAY_WIREGUARD_HEADQUARTER ให้ป้อน Local Wireguard Address ฝั่ง HQ (172.16.0.1)
- ตรง xxxyyy.sn.mynetname.net ให้นำ Dynamic IP หรือ Public WAN IP ของฝั่ง HQ มาใส่
- กด Apply และ OK
6. ตั้งค่า Schduler สำหรับ สั่งรัน Script ทุกๆ 2 นาที เพื่อตรวจเช็คการเชื่อมต่อ Tunnel
- ไปที่เมนู System > Scheduler
- กด +
- Name: ScheduleWGToggle
- Start Time: startup
- Interval: 00:02:00
- Policy: ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon
- Source:
/system script run ToggleWGPeer
- กด Apply และ OK
ผลลัพธ์
ฝั่ง Branch สามารถติดต่อกับฝั่ง HQ ได้ และ ฝั่ง HQ สามารถติดต่อกับฝั่ง Branch ได้