MikroTik Site-to-Site IPsec VPN (RouterOS 7) — Step by Step
คู่มือตั้งค่า IPsec VPN เชื่อมสองสาขาบน MikroTik RouterOS 7 พร้อมตัวอย่าง config จุดพลาดที่พบบ่อย และเทคนิคดีบั๊กแบบมืออาชีพ
1. ทำไม Site-to-Site VPN ยังจำเป็นในปี 2026#
หลายคนคิดว่ายุคของ SD-WAN และ Zero Trust มาถึงแล้ว IPsec VPN แบบ site-to-site คงตกยุค แต่สำหรับ SMB ไทยที่ใช้ MikroTik เป็น edge router ทั้งสองฝั่ง การทำ IPsec tunnel ยังเป็นวิธีที่ "คุ้มค่า เสถียร และควบคุมเองได้" มากที่สุด ไม่ต้องจ่ายค่า license รายเดือน ไม่ต้องพึ่ง cloud controller ของ vendor และใช้งานร่วมกับ firewall ค่ายอื่นได้ เช่น FortiGate, Cisco ASA หรือ pfSense
กรณีใช้งานที่พบบ่อยคือเชื่อมสำนักงานใหญ่กับสาขา เพื่อให้ระบบ ERP, share file server หรือกล้อง CCTV NVR เข้าถึงกันได้ผ่าน private IP โดยไม่ต้อง expose ออก public internet บทความนี้จะปูพื้น IPsec บน RouterOS 7 (ซึ่งเปลี่ยน syntax และ default behavior บางอย่างจาก v6) แล้วลงมือตั้งค่า tunnel ระหว่าง Office A และ Office B ให้จบในที่เดียว
2. รู้จัก IPsec แบบเข้าใจจริง#
IPsec ไม่ใช่ Protocol เดียว แต่เป็น "framework" ที่ประกอบด้วยหลายชิ้นส่วน ก่อนลงมือ config ควรเข้าใจ 5 องค์ประกอบหลักให้ครบ
- IKE (Internet Key Exchange) — Protocol เจรจาคีย์ ทำงาน 2 phase
- Phase 1 สร้าง secure channel สำหรับสื่อสารระหว่างกัน (ใช้ DH group, encryption, hash)
- Phase 2 ตกลงคีย์ที่จะนำไปเข้ารหัส data จริง
- RouterOS 7 รองรับทั้ง IKEv1 (main/aggressive mode) และ IKEv2 ซึ่งแนะนำให้ใช้เพราะเร็วกว่า รองรับ NAT-T ในตัว และ rekey ได้ราบรื่นกว่า
- ESP (Encapsulating Security Payload) — Protocol ห่อหุ้มและเข้ารหัส packet จริง (protocol number 50)
- Peer — นิยามปลายทาง remote router ที่จะเชื่อมด้วย ระบุ address, exchange-mode, profile
- Proposal — ชุด algorithm สำหรับ Phase 2 (เช่น aes-256-cbc + sha256 + PFS group)
- Policy — กฎที่บอกว่า traffic ระหว่าง subnet ไหนถึงไหนต้องเข้ารหัส (selector คล้าย ACL)
- Identity — วิธี authenticate peer (PSK, certificate, EAP)
จุดสำคัญที่หลายคนพลาดคือ policy ของทั้งสองฝั่งต้อง mirror กัน กล่าวคือ src-address ของฝั่ง A ต้องตรงกับ dst-address ของฝั่ง B พอดี มิฉะนั้น Phase 2 จะ negotiate ไม่ผ่าน แม้ Phase 1 จะ established แล้วก็ตาม
3. ตัวอย่าง Config: Office A เชื่อม Office B#
สมมติ topology ดังนี้
- Office A — Public IP:
203.0.113.10, LAN:10.10.10.0/24 - Office B — Public IP:
198.51.100.20, LAN:10.20.20.0/24 - ใช้ IKEv2 + AES-256 + SHA256 + DH group 19 (ECP256) + PSK
3.1 ฝั่ง Office A#
# Phase 1 profile
/ip ipsec profile
add name=to-officeB dh-group=ecp256 enc-algorithm=aes-256 \
hash-algorithm=sha256 nat-traversal=yes lifetime=1d
# Phase 2 proposal
/ip ipsec proposal
add name=to-officeB enc-algorithms=aes-256-cbc \
auth-algorithms=sha256 pfs-group=ecp256 lifetime=8h
# Peer
/ip ipsec peer
add name=officeB address=198.51.100.20/32 profile=to-officeB \
exchange-mode=ike2
# Identity (PSK)
/ip ipsec identity
add peer=officeB auth-method=pre-shared-key \
secret="U3eC9N3tw0rk!ChangeMe2026"
# Policy
/ip ipsec policy
add peer=officeB tunnel=yes action=encrypt \
src-address=10.10.10.0/24 dst-address=10.20.20.0/24 \
proposal=to-officeB
# สำคัญ: ยกเว้น NAT สำหรับ traffic ที่จะเข้า tunnel
/ip firewall nat
add chain=srcnat action=accept \
src-address=10.10.10.0/24 dst-address=10.20.20.0/24 \
comment="bypass NAT for IPsec to OfficeB"
# ย้าย rule นี้ขึ้นไปบนสุด (ก่อน masquerade) — RouterOS ไม่มี place-before flag ใน add
/ip firewall nat move [find comment="bypass NAT for IPsec to OfficeB"] 0
3.2 ฝั่ง Office B (mirror config)#
/ip ipsec profile
add name=to-officeA dh-group=ecp256 enc-algorithm=aes-256 \
hash-algorithm=sha256 nat-traversal=yes lifetime=1d
/ip ipsec proposal
add name=to-officeA enc-algorithms=aes-256-cbc \
auth-algorithms=sha256 pfs-group=ecp256 lifetime=8h
/ip ipsec peer
add name=officeA address=203.0.113.10/32 profile=to-officeA \
exchange-mode=ike2
/ip ipsec identity
add peer=officeA auth-method=pre-shared-key \
secret="U3eC9N3tw0rk!ChangeMe2026"
/ip ipsec policy
add peer=officeA tunnel=yes action=encrypt \
src-address=10.20.20.0/24 dst-address=10.10.10.0/24 \
proposal=to-officeA
/ip firewall nat
add chain=srcnat action=accept \
src-address=10.20.20.0/24 dst-address=10.10.10.0/24 \
comment="bypass NAT for IPsec to OfficeA"
/ip firewall nat move [find comment="bypass NAT for IPsec to OfficeA"] 0
3.3 เปิด port ที่ firewall#
อย่าลืม allow UDP/500 (IKE), UDP/4500 (NAT-T) และ protocol 50 (ESP) ที่ chain input ทั้งสองฝั่ง
/ip firewall filter
add chain=input action=accept protocol=udp dst-port=500,4500 \
comment="IPsec IKE/NAT-T"
add chain=input action=accept protocol=ipsec-esp \
comment="IPsec ESP"
4. จุดพลาดยอดฮิตที่ทำให้ tunnel ไม่ขึ้น#
Pitfalls ที่เจอบ่อยในงานจริง
- ลืมใส่ NAT bypass — หากไม่มี rule
acceptใน srcnat ที่อยู่ ก่อน masquerade traffic จาก LAN จะโดน masquerade ก่อนถึง policy ทำให้ src-address ไม่ match policy selector ผลคือ packet หลุดออก WAN แบบ plain text. RouterOS ไม่รองรับplace-beforeในaddcommand ต้องใช้/ip firewall nat move ... 0ย้ายตำแหน่งภายหลัง - Policy ไม่ mirror กัน — หากฝั่ง A ใส่
/24แต่ฝั่ง B ใส่/16Phase 2 จะขึ้น errorpayload malformedหรือno proposal chosen - NAT-T ไม่ทำงานเมื่อมี ISP NAT — หากฝั่งใดฝั่งหนึ่งอยู่หลัง CGNAT ต้องเปิด
nat-traversal=yesทั้งคู่ และเปิด UDP/4500 ผ่านได้ทุก hop - MTU/MSS ทำให้เว็บช้าหรือ TCP hang — ESP เพิ่ม overhead ~50-70 bytes ควร clamp MSS ที่ 1360 ด้วย
/ip firewall mangle add chain=forward protocol=tcp tcp-flags=syn action=change-mss new-mss=1360 ipsec-policy=out,ipsec - เวลาเครื่องไม่ตรง — IPsec ไวต่อ clock skew มาก หาก NTP ไม่ sync จะเจอ cert/SA fail แบบหาสาเหตุยาก ควรตั้ง
/system ntp clientให้ Router ทุกตัว - FastTrack กิน packet — หากเปิด FastTrack connection ไว้ packet อาจ bypass IPsec policy. อย่าแก้ FastTrack rule โดยตรง — ให้เพิ่ม rule
accept2 ตัวใน chainforwardที่ผูกipsec-policy=in,ipsecและipsec-policy=out,ipsecแล้วย้ายไป ก่อน fasttrack-connection rule เช่น/ip firewall filter add chain=forward action=accept ipsec-policy=out,ipsec(ทำซ้ำสำหรับ in) แล้วmoveขึ้นบนสุด — วิธีนี้ traffic IPsec จะข้าม FastTrack ส่วน traffic อื่นยัง fast-path ได้
5. เครื่องมือดีบั๊กที่ควรมีติดมือ#
Debug Toolkit สำหรับ IPsec บน RouterOS 7
- ดูสถานะ SA แบบ realtimerouterosrouteros
/ip ipsec active-peers print /ip ipsec installed-sa print /ip ipsec policy print stats - เปิด log เฉพาะ topic ที่เกี่ยวข้อง (อย่าเปิด debug ทั้งหมด เพราะ log จะท่วม)routerosrouteros
/system logging add topics=ipsec,!packet action=memory /log print where topics~"ipsec" - ตรวจสอบว่า packet เข้า policy จริงหรือไม่ ดูที่ column
ph2-stateหากเป็นestablishedแสดงว่า tunnel up - ใช้
/tool snifferfilterprotocol=ipsec-espที่ WAN interface เพื่อยืนยันว่ามี ESP ออกจริง - หาก Phase 1 ไม่ขึ้น ให้ตรวจ
exchange-mode,dh-group,enc-algorithmทั้งสองฝั่งให้ตรงกันทุก field - คำ error ที่ควรจำ:
no proposal chosen= algorithm ไม่ตรงกัน,payload malformed= PSK หรือ identity ผิด,invalid hash info= นาฬิกาไม่ตรงหรือ PSK ไม่ตรง
6. สรุป + Pre-Production Checklist#
IPsec บน RouterOS 7 ดูซับซ้อน แต่เมื่อเข้าใจโครงสร้าง profile → proposal → peer → identity → policy แล้วจะ replicate ไปสาขาอื่นได้รวดเร็ว หัวใจของการ deploy แบบไม่มีปัญหาคือ "ทำให้ทั้งสองฝั่ง mirror กันแบบ pixel-perfect" และ "อย่าลืม NAT bypass"
Checklist ก่อน go-live
- กำหนด IP plan ไม่ให้ทับซ้อนระหว่างสาขา (LAN ห้ามชนกัน)
- ตั้ง NTP client + timezone ให้ Router ทุกตัว
- ใช้ IKEv2 + AES-256 + SHA256 + DH group 19 ขึ้นไป
- PSK ยาวอย่างน้อย 20 ตัวอักษร ผสม case/number/symbol (หรือใช้ certificate หากเป็น production จริง)
- เปิด
nat-traversal=yesทั้งสองฝั่ง - เพิ่ม srcnat
acceptrule แล้วmoveขึ้นก่อน masquerade - Allow UDP/500, UDP/4500, protocol ESP ที่ input chain
- Clamp MSS เป็น 1360 สำหรับ traffic ใน tunnel
- ทดสอบ ping ข้าม subnet จากทั้งสองฝั่ง พร้อมตรวจ
installed-saว่ามี SA เข้ารหัสจริง - เปิด logging topic
ipsecไว้ที่ memory เพื่อใช้ debug ภายหลัง - บันทึก PSK, peer address และ subnet ลง password manager ของทีม
เมื่อทำตาม checklist ครบ tunnel จะเสถียรระดับวิ่งได้เป็นเดือนโดยไม่ต้องแตะ และเมื่อมีปัญหาก็มี log + sniffer ช่วยไล่ได้ในไม่กี่นาที นี่คือเหตุผลที่ MikroTik + IPsec ยังเป็นมาตรฐานทองสำหรับ SMB ไทยมาจนถึงทุกวันนี้