[EP.37] How to Configure Wireguard Site to Site VPN (RouterOS v7)

Krittin Srithong
techblogclub
Published in
4 min readJun 6, 2023

--

Scenario

ข้อกำหนด

  1. จะต้องเป็น MikroTik RouterOS 7 ขึ้นไป (ใน LAB นี้ใช้ RouterOS 7.9.2 Stable)
  2. ฝั่ง HQ จะต้องได้รับ Public IP จาก ผู้ให้บริการอินเตอร์เน็ต เท่านั้น เพราะ ฝั่ง Branch จะต้อง Remote Dynamic DNS มายังฝั่ง HQ

วิธีการ Config Wireguard ฝั่ง HQ (สำนักงานใหญ่)

  1. Config รับเน็ตแบบ PPPoE Client (เพื่อรับ Public IP จากผู้ให้บริการ)
  2. เปิดใช้งาน 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 เลย
หลังจากกดปุ่ม OK จะสังเกตุได้ว่า WireGuard จะสร้าง Private Key และ Public Key ขึ้นมาให้เราอัตโนมัติ
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 (สาขาย่อย)

  1. ฝั่ง 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 ได้

PC-Branch (192.168.12.254) สามารถ ping ไปหา Server-PC (192.168.20.7)ได้

--

--

Krittin Srithong
techblogclub

Hi, I’m Krittin. I am studying in bachelor of Computer Enginnering. I have MikroTik Certificates as following MTCNA, MTCSE, MTCUME. (medium.com/techblogclub)