ในบทก่อนเราตั้ง PPPoE Server บน Mikrotik แล้วเพิ่มลูกค้าด้วย /ppp secret ทีละคน — ซึ่งพอลูกค้าหลักร้อยจะเริ่มไม่ไหว ทั้งเพิ่ม/ลบ user เอง ทั้งไล่ตัด-คืนสัญญาณเอง บทความนี้จะพาเปลี่ยนมาให้ Mikrotik ตรวจสอบผู้ใช้จาก RADIUS แทน เพื่อรวมศูนย์การจัดการ + ผูกกับระบบบิลลิ่งให้ "จ่ายเงิน→เปิดเน็ต / ค้างจ่าย→ตัดเน็ต" ทำงานเองอัตโนมัติ
เหมาะกับ: คนที่ตั้ง PPPoE Server เป็นแล้ว • Mikrotik RouterOS v6/v7 • RADIUS server (เช่น FreeRADIUS) ที่ลูกค้าเริ่มเยอะจนจัดการด้วยมือไม่ไหว
RADIUS ช่วยอะไร (เข้าใจใน 1 นาที)
RADIUS ทำหน้าที่ AAA ให้ระบบเน็ตของคุณ:
- Authentication — ตรวจ username/password ของลูกค้าตอน dial PPPoE
- Authorization — บอก Mikrotik ว่าลูกค้าคนนี้ได้ ความเร็ว/IP/แพ็กเกจ อะไร
- Accounting — เก็บ log ว่าใครออนไลน์ตอนไหน ใช้เน็ตไปเท่าไร (ฐานของบิล + ดูสถานะ)
[ลูกค้า] --PPPoE--> [Mikrotik = NAS/RADIUS client] --1812/1813--> [RADIUS server] <--> [DB บิลลิ่ง/CRM]
จุดเปลี่ยนสำคัญคือ user ไม่ได้อยู่บน Mikrotik อีกต่อไป แต่อยู่ในฐานข้อมูลกลาง (RADIUS/บิลลิ่ง) — เปิด/ปิด/เปลี่ยนแพ็กเกจทำที่เดียว มีผลกับทุก Mikrotik ในระบบ
NAS (Network Access Server) = อุปกรณ์ที่รับลูกค้าเข้ามาแล้วถาม RADIUS — ในที่นี้คือ Mikrotik
สิ่งที่ต้องมีก่อน
- Mikrotik ที่ตั้ง PPPoE Server ใช้งานได้แล้ว
- RADIUS server ที่เข้าถึงกันได้ (สมมติ IP
10.0.0.5) — บทนี้ยกตัวอย่าง FreeRADIUS - เปิดพอร์ตระหว่าง Mikrotik ↔ RADIUS: 1812 (auth), 1813 (accounting), 3799 (CoA/disconnect)
- ตั้ง shared secret ไว้ 1 ชุด (รหัสลับที่ Mikrotik กับ RADIUS ต้องตรงกัน)
ขั้นที่ 1 — เพิ่ม Mikrotik เป็น client บน RADIUS
ฝั่ง RADIUS ต้อง "รู้จัก" Mikrotik ก่อน ไม่งั้นจะเมิน request ทิ้ง ใน FreeRADIUS แก้ไฟล์ clients.conf:
client mikrotik-core {
ipaddr = 10.0.0.1 # IP ของ Mikrotik (ฝั่งที่คุยกับ RADIUS)
secret = THAIISP_SECRET # ต้องตรงกับที่ตั้งใน Mikrotik
nas_type = other
shortname = core-rt
}
แล้ว reload: systemctl restart freeradius (หรือ freeradius -X เพื่อรันโหมด debug ดู log สด ๆ ตอนทดสอบ)
ขั้นที่ 2 — สร้างผู้ใช้ + กำหนดความเร็วแพ็กเกจ
ทดสอบเร็ว ๆ ด้วยไฟล์ users (โปรดักชันจริงควรเก็บใน SQL/บิลลิ่ง):
cust001 Cleartext-Password := "Secret#001"
Framed-Pool = "pppoe-pool",
Mikrotik-Rate-Limit = "50M/100M"
Framed-Pool= ชื่อ IP pool บน Mikrotik (จากบท PPPoE) ที่จะแจก IP ให้Mikrotik-Rate-Limit = "50M/100M"= จำกัดความเร็ว อัปโหลด/ดาวน์โหลด (มุมลูกค้า) — รูปแบบเดียวกับrate-limitใน/ppp profile- หลายแพ็กเกจ → ตั้งคนละค่า
Mikrotik-Rate-Limitต่อ user (หรือดึงจากตารางแพ็กเกจในบิลลิ่ง)
💡 ข้อดีของจ่ายความเร็วจาก RADIUS: เปลี่ยนแพ็กเกจลูกค้า = แก้ค่าเดียวในระบบ ไม่ต้องไปแตะ Mikrotik เลย
ขั้นที่ 3 — ชี้ Mikrotik ให้ใช้ RADIUS
บน Mikrotik เพิ่ม RADIUS server (service = ppp เพราะเราใช้กับ PPPoE):
/radius
add service=ppp address=10.0.0.5 secret=THAIISP_SECRET timeout=300ms
เปิดรับ CoA/Disconnect จาก RADIUS (ใช้ตอนตัด-คืนสัญญาณ):
/radius incoming
set accept=yes port=3799
ขั้นที่ 4 — เปิดให้ PPP ใช้ RADIUS + เก็บ accounting
/ppp aaa
set use-radius=yes accounting=yes interim-update=5m
use-radius=yes= ตรวจ user จาก RADIUS (ถ้าไม่เจอใน/ppp secretจะถาม RADIUS)accounting=yes= ส่ง Acct-Start/Stop/Interim ไปที่พอร์ต 1813 → บิลลิ่งรู้ว่าใครออนไลน์ + ใช้ไปกี่ไบต์interim-update=5m= อัปเดตสถานะทุก 5 นาที (เห็น online/ปริมาณเน็ตแบบ near real-time)
เมื่อใช้ RADIUS แล้ว ลูกค้าใน
/ppp secretเดิมไม่จำเป็นอีก — ย้ายไปจัดการที่ระบบกลางได้เลย (จะเก็บ secret ฉุกเฉินไว้ 1–2 ตัวสำหรับ admin ก็ได้)
ขั้นที่ 5 — ทดสอบ
ให้ลูกค้า (หรือเราเตอร์ทดสอบ) dial PPPoE ด้วย cust001 / Secret#001 แล้วดู:
/ppp active print
/radius monitor 0
ฝั่ง RADIUS ถ้ารัน freeradius -X จะเห็น Access-Accept พร้อม attribute ที่ส่งกลับ ถ้าได้ Access-Reject ให้ไล่ดูสาเหตุในตารางท้ายบทความ
ตัด-คืนสัญญาณอัตโนมัติด้วย CoA (หัวใจของการเก็บเงิน)
นี่คือเหตุผลที่เราเปิด /radius incoming ไว้ — RADIUS (หรือบิลลิ่ง) สามารถ "สั่ง" Mikrotik ได้ทันทีโดยไม่ต้องรอลูกค้า re-connect:
- Disconnect-Request → เตะลูกค้าออกจากเซสชัน (เช่น พอครบกำหนดค้างจ่าย)
- CoA (Change of Authorization) → เปลี่ยนค่ากลางคัน เช่นลดความเร็ว/ย้ายเข้า "หน้าแจ้งเตือนค้างจ่าย" โดยไม่ตัดขาด
ตัวอย่างสั่ง disconnect ด้วย radclient (ส่งไปพอร์ต 3799 ของ Mikrotik):
echo "User-Name=cust001" | radclient -x 10.0.0.1:3799 disconnect THAIISP_SECRET
พอลูกค้าจ่ายเงิน บิลลิ่งก็อัปเดตสถานะใน RADIUS → ครั้งหน้าที่ต่อก็ได้แพ็กเกจปกติคืน วงจร "ค้างจ่าย→ตัด / จ่ายแล้ว→คืน" จึงทำงานเองโดยไม่ต้องนั่งเฝ้า
รายละเอียดการวางกฎตัด-คืน + กันลูกค้าหลุดมั่ว อ่านต่อบท ระงับ/คืนสัญญาณเน็ตลูกค้าค้างจ่าย แบบอัตโนมัติ (บทถัดไป)
RADIUS attribute ที่ใช้บ่อยกับ Mikrotik
| Attribute | ใช้ทำอะไร |
|---|---|
Mikrotik-Rate-Limit |
จำกัดความเร็ว (อัปโหลด/ดาวน์โหลด + burst ได้) |
Framed-Pool |
เลือก IP pool ที่จะแจกให้ลูกค้า |
Framed-IP-Address |
จ่าย IP คงที่ (fixed IP) ให้ลูกค้ารายนั้น |
Mikrotik-Address-List |
ใส่ลูกค้าเข้า address-list (เอาไปทำ firewall/บล็อกได้) |
Acct-Interim-Interval |
กำหนดรอบส่ง accounting จากฝั่ง RADIUS |
แก้ปัญหาที่เจอบ่อย
| อาการ | สาเหตุ/วิธีแก้ |
|---|---|
| ลูกค้า login ไม่ผ่าน (Access-Reject ทุกคน) | secret ไม่ตรง ระหว่าง Mikrotik กับ clients.conf • user/password ผิด |
| RADIUS เงียบ ไม่ตอบเลย (timeout) | Mikrotik ไม่ได้อยู่ใน clients.conf • ไฟร์วอลล์บล็อกพอร์ต 1812/1813 • address ผิด |
| login ผ่าน แต่ความเร็วไม่จำกัด | ลืมส่ง Mikrotik-Rate-Limit • dictionary ของ Mikrotik ไม่ถูกโหลดใน FreeRADIUS |
| ความเร็วสลับ (อัปเป็นดาวน์) | สลับค่า Mikrotik-Rate-Limit เป็น ดาวน์/อัป แล้วทดสอบใหม่ |
| สั่ง disconnect แล้วไม่มีอะไรเกิด | ลืม /radius incoming set accept=yes • ส่งผิดพอร์ต (ต้อง 3799) • secret ไม่ตรง |
| บิลไม่เห็นปริมาณเน็ต/สถานะ online | ลืม accounting=yes • พอร์ต 1813 ถูกบล็อก |
สรุป
ย้ายจาก /ppp secret มาเป็น RADIUS = ยกการจัดการผู้ใช้ขึ้นมาไว้ศูนย์กลาง แล้วผูกกับบิลลิ่งให้ตรวจสิทธิ์ จ่ายความเร็ว เก็บ accounting และตัด-คืนสัญญาณได้อัตโนมัติ — นี่คือกระดูกสันหลังของ "เน็ตหมู่บ้านที่เก็บเงินเองได้" เมื่อสเกลโตขึ้น
แต่การรัน FreeRADIUS เอง (ดูแล server, เขียน SQL schema, ผูกกับบิล, ทำ CoA, กันล่ม) ก็เป็นงานไม่เบา — ถ้าอยากข้ามขั้นนั้นไปเลย:
💡 ไม่อยากดูแล RADIUS server เอง? thaiISP มาพร้อม CloudRADIUS (RADIUS แบบ managed) ผูกกับบิลลิ่ง/CRM ในตัว — จ่ายเงินผ่านไลน์/พร้อมเพย์ + ตรวจสลิป แล้วเปิด-ปิด-คืนสัญญาณลูกค้าอัตโนมัติ ไม่ต้องแตะ config เอง — ดูระบบ →
