Knowledge BaseMikroTik Hotspot Captive Portal — สำหรับ Cafe / Hotel + Voucher
intermediate

MikroTik Hotspot Captive Portal — สำหรับ Cafe / Hotel + Voucher

ตั้งค่า MikroTik Hotspot ให้ Guest ต้องล็อกอินก่อนใช้ Wi-Fi พร้อม Walled-Garden, Voucher Batch และ Branding หน้า Login ครบจบในบทความเดียว

A
Apinan
C9NETWORK Editor
19 พฤษภาคม 2569
11 นาที
0cafecaptive-portalhotelhotspotmikrotikvoucherwifi

1. ใช้ Hotspot ทำอะไรได้บ้าง#

MikroTik Hotspot คือระบบ Captive Portal ที่บังคับให้ผู้ใช้ผ่านหน้า Login ก่อนเข้าถึง Internet บน RouterOS ใช้ได้หลากหลาย Scenario:

  • Cafe / Co-working Space — แจก Voucher รายชั่วโมง จำกัด Bandwidth ต่อ Session
  • Hotel / Resort — Login ด้วยหมายเลขห้อง, บันทึก Log ตาม PDPA / พ.ร.บ. คอมพิวเตอร์
  • Event / Conference — ควบคุมจำนวน Concurrent User, กำหนด Expiry ตามวันงาน
  • ร้านอาหาร / โรงพยาบาล — อนุญาตเฉพาะ Social Media หรือ Line ก่อน Login (Walled-Garden)

ระบบ Hotspot บน RouterOS ทำงานบน Layer 7 ผ่าน HTTP Redirect — ไม่ต้องพึ่ง Controller ภายนอก Router จัดการ DHCP, Authentication, Accounting และ Bandwidth Shaping ได้ในตัวเดียว

2. Pre-requisites#

ก่อนเริ่ม Setup ตรวจสอบให้ครบ:

รายการ รายละเอียด
RouterOS 7.x (แนะนำ 7.14 ขึ้นไป)
License Level 4+ (Hotspot ใช้ได้ตั้งแต่ Level 4)
Interface สำหรับ Guest ether หรือ Bridge แยกจาก Management Network
IP Plan ตัวอย่าง: 192.168.88.0/24 → Guest Pool
DNS ใช้ Router เป็น DNS Proxy หรือ Upstream 1.1.1.1
ℹ️ Note

แนะนำให้แยก VLAN หรือ Interface Guest Network ออกจาก LAN หลักทุกครั้ง เพื่อป้องกัน Guest เข้าถึงอุปกรณ์ภายในองค์กร

DHCP Plan ตัวอย่าง:

Network   : 192.168.99.0/24
Gateway   : 192.168.99.1  (Router ether2-guest)
Pool      : 192.168.99.10 - 192.168.99.254
DNS       : 192.168.99.1

3. รัน Hotspot Setup Wizard#

ผ่าน Winbox#

  1. เปิด Winbox → เชื่อมต่อ Router
  2. ไปที่ IP → Hotspot → Hotspot Setup
  3. เลือก Interface ที่ต้องการเปิด Hotspot (เช่น ether2-guest หรือ bridge-guest)
  4. กรอก IP Address ของ Interface: 192.168.99.1/24
  5. กำหนด DHCP Pool: 192.168.99.10 - 192.168.99.254
  6. เลือก DNS: ติ๊ก "Use this router as DNS" หรือกรอก Upstream DNS
  7. กำหนด DNS Name สำหรับ Hotspot เช่น wifi.myhotel.local
  8. เลือก Certificate: none (สำหรับ HTTP) หรือ Upload Certificate (สำหรับ HTTPS)
  9. กด Next จน Wizard เสร็จ — Hotspot Server, DHCP Server และ NAT Rule จะถูกสร้างอัตโนมัติ

ผ่าน CLI (RouterOS Terminal)#

routerosrouteros
/ip hotspot setup
hotspot interface: ether2-guest
local address of network: 192.168.99.1/24
masquerade network: yes
address pool of network: 192.168.99.10-192.168.99.254
select certificate: none
ip address of smtp server: 0.0.0.0
dns servers: 1.1.1.1,8.8.8.8
dns name: wifi.myhotel.local
name of local hotspot user: admin
password for the user: (กรอก Password)
Tip

หลัง Wizard เสร็จ ลอง Connect Wi-Fi Guest แล้วเปิด Browser — ควรถูก Redirect ไปหน้า Login อัตโนมัติ ถ้ายังไม่ Redirect ลอง Clear DNS Cache หรือ Flush Browser Cache ก่อน

4. Configure Walled-Garden#

Walled-Garden คือรายการ Domain/IP ที่อนุญาตให้ Guest เข้าถึง ก่อน Login เหมาะสำหรับ:

  • Google Maps — แสดงแผนที่หน้าร้าน
  • Line / Facebook — สแกน QR Code รับ Voucher
  • PromptPay / Payment Gateway — ชำระเงินก่อน Login

ตั้งค่าผ่าน Winbox#

ไปที่ IP → Hotspot → Walled Garden → กด +

routerosrouteros
# อนุญาต Google Maps และ Google Services
/ip hotspot walled-garden
add dst-host=*.google.com action=allow
add dst-host=*.googleapis.com action=allow
add dst-host=*.gstatic.com action=allow

# อนุญาต Line
add dst-host=*.line.me action=allow
add dst-host=*.line-scdn.net action=allow

# อนุญาต Facebook
add dst-host=*.facebook.com action=allow
add dst-host=*.fbcdn.net action=allow

# อนุญาต 2C2P / PromptPay (ตรวจสอบ Domain จาก Payment Provider)
add dst-host=*.2c2p.com action=allow

Walled-Garden IP (สำหรับ IP เฉพาะ)#

routerosrouteros
/ip hotspot walled-garden ip
add dst-address=203.150.0.0/16 action=accept comment="CAT/TOT PromptPay Range"
⚠️ ข้อควรระวัง

Walled-Garden ที่กว้างเกินไป (เช่น allow ทั้ง *.com) จะทำให้ Hotspot ไม่มีประสิทธิภาพ — กำหนดเฉพาะ Domain ที่จำเป็นจริงๆ เท่านั้น

5. สร้าง User Profile#

User Profile กำหนด Policy ให้กับกลุ่มผู้ใช้ เช่น เวลาใช้งานสูงสุด, Bandwidth และจำนวน Session

สร้าง Profile สำหรับ Cafe (2 ชั่วโมง, 10/2 Mbps)#

routerosrouteros
/ip hotspot user profile
add name="cafe-2h" \
    session-timeout=2h \
    idle-timeout=30m \
    rate-limit="10M/2M" \
    shared-users=1 \
    add-mac-cookie=yes
Parameter ค่า ความหมาย
session-timeout 2h หมดอายุหลัง Login ครบ 2 ชั่วโมง
idle-timeout 30m Logout อัตโนมัติถ้าไม่มี Traffic 30 นาที
rate-limit 10M/2M Download 10 Mbps / Upload 2 Mbps
shared-users 1 1 Account ใช้ได้ 1 Device พร้อมกัน

สร้าง Profile สำหรับ Hotel (24 ชั่วโมง, 20/5 Mbps)#

routerosrouteros
/ip hotspot user profile
add name="hotel-24h" \
    session-timeout=1d \
    idle-timeout=2h \
    rate-limit="20M/5M" \
    shared-users=2

6. Generate Voucher Batch#

สร้าง User แบบ Batch ผ่าน Script#

RouterOS ไม่มีฟีเจอร์ Voucher GUI ในตัว แต่ใช้ Script สร้าง User พร้อมกัน 100 รายการได้:

routerosrouteros
:local count 1;
:while ($count <= 100) do={
  :local username ("cafe-" . $count);
  :local password [ /tool fetch url="http://127.0.0.1" as-value output=none; \
    :return ([:tostr $count] . "x" . [:pick [/rndstr length=6] 0 6]) ];
  /ip hotspot user add name=$username password=$count profile=cafe-2h;
  :set count ($count + 1);
}
Tip

สำหรับการผลิต Voucher จริงในระดับ Production แนะนำใช้ UserManager (Package แยก) ที่มีหน้า Web UI สำหรับพิมพ์ Voucher เป็น PDF ได้โดยตรง — ดาวน์โหลดจาก mikrotik.com/download แล้ว Upload ผ่าน System → Packages

สร้าง Voucher แบบง่ายผ่าน Winbox#

  1. IP → Hotspot → Users → กด +
  2. กรอก Name (Voucher Code) และ Password
  3. เลือก Profile: cafe-2h
  4. กด OK — Export รายการเป็น CSV ผ่าน File → Export

7. Branding Login Page#

ไฟล์ HTML ของหน้า Login อยู่ใน Flash/Internal Storage ของ Router ที่ Path /flash/hotspot/

Upload ผ่าน Winbox#

  1. เปิด Files ใน Winbox
  2. Navigate ไปที่ hotspot/ folder
  3. ลาก login.html ที่แก้ไขแล้วมา Drop ใน Winbox Files

ตัวแปรสำคัญใน login.html#

htmlhtml
<!-- URL Login Form -->
<form action="$(link-login-only)" method="post" name="login">
  <input type="hidden" name="dst" value="$(link-orig)">
  <input type="text" name="username" placeholder="Username">
  <input type="password" name="password" placeholder="Password">
  <button type="submit">เชื่อมต่อ Wi-Fi</button>
</form>

<!-- แสดง Error Message -->
$(if error)<p style="color:red">$(error)</p>$(endif error)

เพิ่ม Logo ร้าน#

htmlhtml
<img src="logo.png" alt="Cafe Logo" style="width:200px; margin:20px auto; display:block;">

อัปโหลดไฟล์ logo.png ไว้ใน /flash/hotspot/ folder เดียวกัน

ℹ️ Note

RouterOS รองรับ HTML/CSS/JavaScript ทั่วไปในหน้า Login — ใช้ Bootstrap หรือ Tailwind ได้ แต่ต้อง Bundle ไว้ใน Router เพราะ Guest ยังไม่ได้ Login จึง Fetch จาก CDN ภายนอกไม่ได้ (ใช้ Walled-Garden เพื่อ Allow CDN แทน)

8. Security Hardening#

ปิด Winbox และ SSH จาก Guest Network#

routerosrouteros
/ip firewall filter
add chain=input in-interface=ether2-guest dst-port=8291 protocol=tcp \
    action=drop comment="Block Winbox from Guest"
add chain=input in-interface=ether2-guest dst-port=22 protocol=tcp \
    action=drop comment="Block SSH from Guest"
add chain=input in-interface=ether2-guest dst-port=80,443,8080 protocol=tcp \
    action=drop comment="Block WebFig from Guest"

Rate-Limit Failed Login (ป้องกัน Brute Force)#

routerosrouteros
/ip hotspot
set [find] login-by=cookie,http-chap
routerosrouteros
/ip firewall filter
add chain=input in-interface=ether2-guest protocol=tcp dst-port=80 \
    connection-limit=10,32 action=drop \
    comment="Limit HTTP connections per IP (anti-brute-force)"

ป้องกัน Guest-to-Guest Traffic#

routerosrouteros
/ip firewall filter
add chain=forward in-interface=ether2-guest out-interface=ether2-guest \
    action=drop comment="Block Guest-to-Guest"
⚠️ ข้อควรระวัง

อย่าลืมตั้ง Hotspot → Server → HTTPS และ Upload Certificate ถ้าต้องการให้หน้า Login แสดง HTTPS — Browser สมัยใหม่จะแจ้งเตือน "Not Secure" บน HTTP Login Page ซึ่งทำให้ Guest ไม่ไว้วางใจ

9. Monitor และ Report#

ดู Active Session แบบ Real-time#

routerosrouteros
/ip hotspot active print

ผลลัพธ์แสดง: Username, IP, MAC, Uptime, Bytes In/Out

ดู Top User (ใช้ Bandwidth สูงสุด)#

routerosrouteros
/ip hotspot active print detail

ดู Log การ Login/Logout#

routerosrouteros
/log print where topics~"hotspot"

ผ่าน Winbox#

ไปที่ IP → Hotspot → Active — เห็น Session ทั้งหมด สามารถ Disconnect User ได้ด้วยการคลิกขวา → Remove

สำหรับ Report รายวัน/รายเดือน ติดตั้ง UserManager Package เพิ่มเติม ซึ่งมี Dashboard แสดง Traffic Usage, Session History และส่งออกเป็น CSV ได้


หากต้องการให้ C9NETWORK ออกแบบและติดตั้งระบบ MikroTik Hotspot สำหรับ Cafe, Hotel หรือ Co-working Space ของคุณ ครอบคลุมตั้งแต่ Network Design, VLAN Planning, Voucher System ไปจนถึง Branding Login Page — ติดต่อทีมงานเพื่อรับข้อเสนอที่ตรงกับความต้องการของคุณได้เลย