0320 | มาทำ Load Balance โดยใช้ Mikrotik กัน

ก่อนอื่นต้องขอบอกไว้ก่อนว่า ผมเองเพิ่งได้เรียนรู้การทำ Load balance เมื่อสัปดาห์ที่แล้วนี้เอง โดยการเปิดดูตัวอย่างในอินเตอร์เน็ต แล้วนำมาปรับใช้อีกที โดยต้นแบบผมนำมาจากที่นี่ครับ https://www.facebook.com/vrproservices/videos/649531178567245/ ซึ่งก็มีการดัดแปลงนิดหน่อย หากมีอะไรผิดพลาด หรือทำผิดตรงไหนไปก็ขออภัยด้วยครับ แนะนำดู VDO ให้จบก่อนครับ เพื่อความเข้าใจ

โจรย์ของผมคือ มีเน็ต 2 เส้น ต่อแบบ PPPoE และต้องการให้อินเตอร์เน็ต 2 เส้นรวมกัน ซึ่งจริงๆมันก็ไม่ได้รวมกัน มันแค่กระจายออกไปได้ทั้ง 2 wan พร้อมกัน เมื่อมีการเชื่อมต่อมากกว่า 1 connection แต่เอาเป็นว่า ขอเรียกว่าให้มันรวมกันก็แล้วกันครับ และจะต้องออกเพียง 1 wan เมื่อเข้าเว็บไซต์ธนาคาร หรือเชื่อมต่อไปยัง port ที่กำหนด หน้าตา load balance ของผมก็จะออกมาหน้าตาแบบด้านล่างนี้ ซึ่งตั้งแต่ใช้งานมา สามารถใช้งานได้ตรงกับความต้องการ และยังไม่เจอปัญหาใดๆครับ

ก่อนอื่นให้สร้าง Interface List สำหรับ LAN และ WAN เอาไว้ก่อน เพื่อให้ง่ายต่อการใช้งาน รวมถึง ไปเพิ่ม Address Lists สำหรับ IP Address ภายในเอาไว้ด้วยครับ

การสร้าง Interface List ให้ไปที่ Interfaces -> Interface List จากนั้นกดที่ Lists เพื่อสร้างชื่อ List ขึ้นมาก่อน โดยการกดที่เครื่องหมาย + และตั้งชื่อตามต้องการ โดยสร้าง 2 อัน สำหรับ LAN และ WAN

กลับมาที่หน้า Interface List กดเครื่องหมาย + และเพิ่ม Interface เข้าไปใน List ตามต้องการ สำหรับของผมมีเน็ต 2 เส้น จึงจะมี WAN 2 interface ส่วน LAN ผมเพิ่ม interface bridge เข้าไปเลย เนื่องจากผมได้กำหนดให้แต่ละ interface ether ต่างๆ แยกไปอยู่ในแต่ละ bridge อยู่แล้ว จะได้ไม่ต้องเพิ่มหลาย interface

ต่อไป เป็นการเพิ่ม IP Address ของ LAN ภายใน โดยไปที่ IP -> Firewall -> Address Lists แต่ต่อไปนี้ผมจะเขียนเป็นสำสั่งให้ครับ เนื่องจากถ้าให้ทำทีละขั้นตอนจะยาวเกินไป

เพิ่มเติม : ก่อนจะไปดู code กัน การ copy code ให้เอาเม้าส์มาวางไว้ในส่วนของ code แล้วจะมีปุ่มให้กด view source ขึ้นมา แนะนำให้กดปุ่มนี้ แล้วจะมี popup ขึ้นมาให้ดู code สบายๆ แล้วค่อย copy อีกทีครับ

ในตัวอย่างด้านล่าวนี้ ผมมี IP ทั้งหมด 3 วง ก่อนนำไปใช้ ให้ปรับแก้ไขให้ตรงกับระบบของตัวเองก่อนนะครับ

/ip firewall address-list
add address=192.168.10.0/24 list=LAN-IP
add address=192.168.20.0/24 list=LAN-IP
add address=192.168.100.0/24 list=LAN-IP

จากนั้นเรามาเพิ่ม IP Address ของธนาคารก่อนเลยแล้วกันครับ โดย IP ของธนาคารนั้นผมจะไม่ได้ใส่เป็นเลข IP ลงไป แต่จะใส่เป็น URL ลงไป โดยตัว Mikrotik จะหา IP ให้เองครับ เผื่อธนาคารเปลี่ยน IP จะได้ไม่ต้องมาแก้ไข ส่วนใครใช้ธนาคารอื่น หรือเว็บอื่นที่อยากบังคับให้ออกแค่ WAN เดียว ก็มาใส่เพิ่มเข้าไปได้เลยครับ

/ip firewall address-list
add address=ibanking.bangkokbank.com list=IP-Banking
add address=www.krungsrionline.com list=IP-Banking
add address=www.mebytmb.com list=IP-Banking
add address=online.kasikornbankgroup.com list=IP-Banking

คราวนี้มาที่ Mangle ซึ่งของผมอาจจะดูแปลกๆ งงๆ จากต้นฉบับ แต่ผมลองปรับใช้ตามนี้ดู ผลจากการใช้งาน สามารถใช้งานได้ดีครับ

ในส่วนตรงนี้ ถ้าก่อนหน้านี้ตั้งชื่อ Interface List ทั้ง LAN, WAN และรวมถึง Address List ตามของผม ก็สามารถใช้งานได้เลย จะมีก็ส่วนของชื่อ PPPoE เท่านั้นครับที่ชื่ออาจจะไม่เหมือนกัน หรือใครจะไปแก้ไขชื่อก่อนก็ได้ครับ

/ip firewall mangle
add action=accept chain=prerouting dst-address-list=LAN-IP
add action=mark-connection chain=prerouting comment=Mark-WAN1 connection-mark=no-mark in-interface=pppoe-out1-3BB new-connection-mark=WAN1_conn passthrough=yes
add action=mark-connection chain=prerouting comment=Mark-WAN2 connection-mark=no-mark in-interface=pppoe-out2-TOT new-connection-mark=WAN2_conn passthrough=yes

ต่อไปเป็นการทำ PCC ส่วนนี้มีความสำคัญ โดยในส่วนแรกนี้ ผมต้องการให้ port ที่ผมกำหนดให้ออก WAN เดียวเท่านั้น โดยเลือกเป็น both-addresses ครับ โดยมันจะจับคู่กันทั้ง IP ต้นทาง และปลายทาง แล้วให้ออกตาม WAN ที่มันจะ mark ให้ อาจจะ 1 หรือ 2 ก็แล้วแต่ตัว mikrotik จะจัดการให้ โดยตัวอย่างด้านล่างนี้ ผมต้องการให้ port 21,35000-35999,22 และเป็น protocol tcp ออก WAN เดียว หากใครใช้ port อื่นก็แก้ไขได้เลยครับ หรือถ้าอยากใช้ทั้ง udp และ tcp ก็ไม่ต้องใส่ในส่วนนี้ก็ได้ครับ

add action=mark-connection chain=prerouting comment=Mark-PCC1-1Session connection-mark=no-mark dst-address-type=!local dst-port=21,35000-35999,22 in-interface-list=LAN-List new-connection-mark=WAN1_conn passthrough=yes per-connection-classifier=both-addresses:2/0 protocol=tcp
add action=mark-connection chain=prerouting comment=Mark-PCC2-1Session connection-mark=no-mark dst-address-type=!local dst-port=21,35000-35999,22 in-interface-list=LAN-List new-connection-mark=WAN2_conn passthrough=yes per-connection-classifier=both-addresses:2/1 protocol=tcp

ต่อไป อันนี้สำหรับธนาคาร คือ เราจะให้ IP ที่เรากำหนดไว้ ออก WAN เดียว โดยการตั้งค่า PCC ก็เหมือนด้านบนครับ แค่เปลี่ยนเงื่อนไขจาก port มาเป็น IP แทน ซึ่งบางคนอาจสงสัยว่า ทำไมไม่เพิ่ม port 443 เข้าไปในด้านบนเลย ก็เพราะว่า ผมต้องการให้บางเว็บที่ใช้ port 443 สามารถออกได้พร้อมกันทั้ง 2 WAN ครับ

add action=mark-connection chain=prerouting comment=Mark-PCC1-Banking connection-mark=no-mark dst-address-list=IP-Banking dst-address-type=!local in-interface-list=LAN-List new-connection-mark=WAN1_conn passthrough=yes per-connection-classifier=both-addresses:2/0
add action=mark-connection chain=prerouting comment=Mark-PCC2-Banking connection-mark=no-mark dst-address-list=IP-Banking dst-address-type=!local in-interface-list=LAN-List new-connection-mark=WAN2_conn passthrough=yes per-connection-classifier=both-addresses:2/1

ต่อไปจะเป็นการกำหนด PCC แบบ both-addresses-and-ports ซึ่งมันจะจับคู่ทั้ง IP ต้นทาง ปลายทาง และ Port ต้นทาง ปลายทาง ซึ่งปกติการใช้งาน ตอนที่เราเปิดเว็บหนึ่ง port ต้นทางของเรา จะสร้างขึ้นมาหลาย port ตาม connection วิธีนี้ จะทำให้เมื่อเราเข้าเว็บๆหนึ่ง ก็อาจจะออกได้หลาย WAN ครับ ซึ่งมันจะทำให้เน็ตรวมกัน เมื่อ speedtest แล้วจะเห็นว่า เน็ตมันรวมกัน

add action=mark-connection chain=prerouting comment=Mark-PCC1 connection-mark=no-mark dst-address-type=!local in-interface-list=LAN-List new-connection-mark=WAN1_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/0
add action=mark-connection chain=prerouting comment=Mark-PCC2 connection-mark=no-mark dst-address-type=!local in-interface-list=LAN-List new-connection-mark=WAN2_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/1

ต่อไปเป็นการ mark routing ครับ

add action=mark-routing chain=prerouting comment=Mark-Routing1 connection-mark=WAN1_conn in-interface-list=LAN-List new-routing-mark=to_WAN1 passthrough=yes
add action=mark-routing chain=prerouting comment=Mark-Routing2 connection-mark=WAN2_conn in-interface-list=LAN-List new-routing-mark=to_WAN2 passthrough=yes

add action=mark-routing chain=output comment=Mark-Output1 connection-mark=WAN1_conn new-routing-mark=to_WAN1 passthrough=yes
add action=mark-routing chain=output comment=Mark-Output2 connection-mark=WAN2_conn new-routing-mark=to_WAN2 passthrough=yes

ต่อไป สร้าง NAT ให้ออกเน็ตได้กันครับ อย่าลืมเปลี่ยนชื่อ interface ถ้าชื่อไม่ตรงกัน

/ip firewall nat
add action=masquerade chain=srcnat out-interface=pppoe-out1-3BB
add action=masquerade chain=srcnat out-interface=pppoe-out2-TOT

ต่อไปเป็นการทำ Route ครับ ให้ไปที่ IP -> Routes กดเครื่องหมาย + แล้วเพิ่มข้อมูลดังนี้

WAN 2

สำหรับ WAN 2 ก็ทำเช่นเดียวกันครับ เปลี่ยนแค่ Gateway และ Routing Mark เท่านั้นครับ

ส่วนอันนี้ผมไม่แน่ใจว่าคืออะไร เอาเป็นว่าตามนี้แล้วกันครับ 😀

WAN 1

WAN 2 ก็เช่นเดียวกัน เปลี่ยนแค่ Distance จาก 1 เป็น 2 ครับ

ทดสอบการใช้งาน

ดาวน์โหลด สามารถออกได้เต็มทั้ง 2 WAN ครับ

ในส่วนของอัพโหลด ก็เช่นกัน


เสร็จแล้วครับ หากเขียนแล้วอ่านไม่เข้าใจ หรือส่วนไหนผมเข้าใจผิดไป ก็ขออภัยด้วยครับ เพิ่งได้ศึกษามาเพียงอาทิตย์กว่าๆแค่นั้นเองครับ แต่จากการใช้งาน สามารถใช้งานได้ไม่มีปัญหาครับ