ทำ Load Balancing โดยใช้ Router MikroTik 1


เกริ่นนำ

ที่บ้านพึ่งเปลี่ยนมาใช้เน็ต Fiber Optic แต่บริการ ADSL เดิมก็ยังไม่ได้ยกเลิก เพราะอยากลองก่อนว่าเจ้า Fiber ใหม่นี้มันใช้งานได้ดีจริงหรือไม่ ช่วงเปลี่ยนผ่านนี้ที่บ้านเลยมีเน็ตต่ออยู่สองสาย คือ ของใหม่ 30/3 Mbps และของเก่า 15/1 Mbps เลยเกิดไอเดียขึ้นว่าอยากลองรวมทั้งสองเส้นเข้าด้วยกัน และบังเอิญมากว่าที่บ้านใช้ router ของ MikroTik อยู่ ซึ่งความสามารถขั้นเทพอยู่แล้ว ผมเลยลองเปิดเน็ตศึกษาดู สรุปว่าทำได้ครับ รวมกันออกมาแล้วใช้ Speed test ทดสอบพบว่ารวมความเร็วได้ทั้งฝั่ง download และ upload ดังภาพ

speedtest 47 Mbps

ขั้นตอน

กว่าจะทำได้ก็ต้องงมอยู่กว่าครึ่งวัน เพราะไม่เคย config เจ้า RouterOs บนตัว MikroTik แบบลึกๆ แถมตัวอย่างส่วนใหญ่ที่เจอก็จะใช้กับ router รุ่นที่ไม่มี wifi ในตัว แต่ของที่บ้านผมเป็นรุ่น RB2011UiAS-2HnD-IN ซึ่งมี wifi มาด้วย โจทย์ของผมเป็นดังภาพครับ

Load balance diagram

จริงๆ ภาพข้างต้นเป็นไดอะแกรมคำตอบมากกว่าโจทย์ เพราะเป็นลักษณะหลังจากที่ตั้งค่าเสร็จแล้ว  โดยหลักๆ จะมี WAN ออกเน็ตสองช่องทาง กำหนดเลขไอพีให้อยู่คนละวงกัน (192.168.1.0 กับ 192.168.2.0) โดยทั้งสองต่อเข้ากับ Ethernet พอร์ทของ MikroTik ช่องที่ 1 และ 2 ส่วน อุปกรณ์ในบ้านอื่นๆ ที่ต่อออกเน็ตผ่านสาย LAN ก็เสียบช่อง Ethernet 3 – 10 และมี Wifi คอยต่อกับอุปกรณ์ที่เหลือ โดยกำหนดให้อยู่ในวงเดียวกัน 192.168.3.0 ทั้ง LAN และ Wifi

หลักการทำงาน

  • Ethernet Port ของ MikroTik ทุกช่องสามารถแยกวง IP ได้ อันนี้ผมรู้อยู่แล้วแต่พอวันนี้ได้ลองใช้จริงก็รู้สึกว่ามันเจ๋งมาก สามารถกำหนดเลข IP ให้กับแต่ละพอร์ทได้อย่างอิสระ
  • พอร์ทที่ไม่จำเป็นต้องแยกวง IP ก็สามารถกำหนดให้มันเชื่อมโยงกันได้โดยการสร้างสิ่งที่เรียกว่า Bridge เช่นในกรณีผม ผมสร้าง Bridge ชื่อ bridge-local แล้วกำหนดว่าพอร์ท ethernet ที่ 3 -10 รวมทั้ง Wireless Lan เชื่อมโยงกันหมดและอยู่ในวง IP 192.168.3.0
  • สร้าง DHCP server ขึ้นมาเพื่อแจก IP ให้กับทุกอุปกรณ์ที่ต่ออยู่กับ bridge-local
  • สร้างกฏ Firewall และ IP routing เพื่อทำ Load Balancing โดย Load Balancing นั้นมีหลายแบบ ทีแรกทำออกมาแล้วเป็นแบบ Backup คือใช้ได้ทีละเส้น ถ้าเส้นไหนตายก็จะเปลี่ยนไปใช้อีกเส้น ทำออกมาแล้วเล่นเอางง ตัวอย่างที่ไปดูมาเขาเรียกมันว่า Load Balancing แต่ผมว่าแบบนี้ไม่ใช่ละ ค้นไปค้นมาเจออีกแบบที่เรียกว่า PCC (per-connection-classifier) ผมไม่ได้เจาะลึกมาก แต่หลักการโดยรวมคือในการแบ่งโหลดนั้น router จะพยายามจำด้วยว่าลูกข่ายใช้งานเน็ตเส้นใดสำหรับบริการหนึ่งๆ และจะพยายามใช้เส้นเดิมเสมอ เช่นว่าถ้ามือถือเครื่องหนึ่งเข้าหน้า web ข่าว web หนึ่ง เจ้า router จะพยายามใช้เน็ตเส้นเดียวกันเสมอในการเข้า web นั้นๆ ซึ่งคิดว่าน่าจะทำเพื่อป้องกันปัญหา connection หาย เพราะบางบริการเช่น https หรือ streaming อาจมีปัญหาได้ถ้า request มาจากหลายช่องทาง (เหตุผลลึกๆ จริงๆ คืออะไรคงต้องไปถามผู้ชำนาญด้านเครือข่ายเอานะครับ) แต่ถ้าเป็นบริการเช่นการโหลดบิตมันจะสามารถใช้ทั้งสองเส้นได้ เพราะ peer สามารถต่อได้จากทั้งสองช่องทาง ผมลองพิสูจน์แล้วดังรูป
    torrent download 45M

วิธีตั้งค่า

  1. Backup ระบบ – จากแหล่งความรู้ที่พบมา เขาแนะนำว่าให้ทำการ reset configuration ซึ่งแปลว่า config เดิมจะหายหมด ผมแนะนำให้ทำ backup ไว้ก่อน โดยเข้าโปรแกรม Winbox และเลือก Files แล้วกดปุ่ม Backup ในหน้าต่างที่ปรากฏขึ้นมา หลังจากนั้นก็ลากไฟล์จากหน้าต่างนี้ไปวางบนคอมพิวเตอร์ของท่าน
  2. Reset Configuration – เข้าเมนู System / Reset Configuration แล้วทำเครื่องหมายถูกในตัวเลือกทั้งสามตัวบนหน้าต่างที่ปรากฏขึ้น แล้วจึงกดปุ่ม Reset Configuration ซึ่ง router จะรีเซ็ทตัวเอง
    load balance reset config
  3. เมื่อ router บูทขึ้นมาใหม่แล้ว ก็ให้ต่อผ่าน Winbox อีกครั้ง (router จะไม่มีเลข IP ต้องให้ winbox มันหาเลข MAC Address ให้โดยการกดปุ่ม browse ที่มีสัญลักษณ์จุดสามตัว)
  4. เลือกเมนู New Terminal แล้วทำการวาง script ต่อไปนี้ลงไป

รายละเอียดของขั้นตอนที่ 1-4 สามารถดูเพิ่มเติมได้จากอ้างอิงที่สองครับ (ดูท้ายเอกสาร) เขาอธิบายเป็นขั้นเป็นตอนไว้ละเอียด

ขั้นต่อไปคือการตั้งค่า ซึ่งแม้จะสามารถตั้งค่าจาก UI ของ MikroTik ได้ แต่ขั้นตอนมันเยอะ จึงขอใช้เป็น Script ดีกว่า โดย Script ที่เอามานี้ได้จากการโหลดตัวอย่างจากหลายๆ ที่มารวมกันแล้วดัดแปลงเองอีกนิดหน่อย พึ่งลองทำครั้งแรกมีงงๆ อยู่นานเหมือนกันกว่าจะทำได้

ผมแบ่ง script ออกเป็นส่วนๆ หวังว่าคงทำให้พอเข้าใจได้ง่ายขึ้น โดยรวมแล้วมีขั้นตอนดังนี้

  1. เปิดใช้และ ตั้งชื่อ interface ต่างๆ บน router  ถ้าใครใช้ router รุ่นอื่นที่มีพอร์ทไม่เหมือนกันก็ปรับเปลี่ยนตามนะครับ
  2. เปิดใช้และตั้งค่า Wifi โดยให้แทนค่า SSID_NAME และ PASSWORD ตามที่ต้องการ
  3. สร้าง Bridge เพื่อรวมพอร์ท Ethernet ที่ไม่ได้ต่อ WAN และ wifi เข้าด้วยกัน
  4. กำหนดเลข IP ให้กับพอร์ทต่างๆ เลขเหล่านี้คงต้องเปลี่ยนให้ตรงกับสถานการณ์เครือข่ายที่นำไปใช้
  5. สร้าง DHCP Server [Update: ขอเปลี่ยน IP DHCP server ตัวแรกเป็น 61.91.37.22 ครับ ตัวเดิมที่ใส่ไว้ทีแรกอยู่ในอิหร่าน (มาได้ไง!?) ทำให้มีปัญหา เช่น ใช้ Youtube ไม่ได้ เพราะ Youtube นึกว่าเครือข่ายเราอยู่ในอิหร่าน]
  6. ทำ Routing และ Load Balancing – ข้อนี้ผมก๊อบมานะครับ ดูๆ แล้วผมเองยังไม่ค่อยเข้าใจเหมือนกัน ผมแต่งนิดเดียวจากต้นฉบับโดยกำหนดให้ Load Balancing ใช้งานกับอุปกรณ์ที่ต่ออยู่กับ Bridge ทั้งหมด
# 1.setup the interfaces, renaming a few

/interface set "ether1" name="WAN1"
/interface set "ether2" name="WAN2"
/interface set "ether3" name="Local"
/interface set "ether4" disabled=no 
/interface set "ether5" disabled=no 
/interface set "ether6" disabled=no 
/interface set "ether7" disabled=no 
/interface set "ether8" disabled=no 
/interface set "ether9" disabled=no 
/interface set "ether10" disabled=no 

# 2. wireless configuration

/interface wireless
set [ find default-name=wlan1 ] band=2ghz-b/g/n channel-width=\
    20/40mhz-ht-above country=thailand disabled=no distance=indoors l2mtu=\
    2290 mode=ap-bridge ssid=SSID_NAME wireless-protocol=802.11
/interface wireless security-profiles
set [ find default=yes ] authentication-types=wpa2-psk mode=dynamic-keys \
    wpa-pre-shared-key=SSID_NAME wpa2-pre-shared-key=PASSWORD

# 3. bridge configuration

/interface bridge 
	add admin-mac=4C:5E:0C:33:BA:B2 auto-mac=no l2mtu=1598 name=bridge-local
/interface bridge port
	add bridge=bridge-local interface=Local
	add bridge=bridge-local interface=wlan1
	add bridge=bridge-local interface=ether4
	add bridge=bridge-local interface=ether5
	add bridge=bridge-local interface=ether6
	add bridge=bridge-local interface=ether7
	add bridge=bridge-local interface=ether8
	add bridge=bridge-local interface=ether9
	add bridge=bridge-local interface=ether10

# 4. assign ip addresses

/ip address
add address=192.168.1.2/24 network=192.168.1.0 broadcast=192.168.1.255 interface=WAN1
add address=192.168.2.2/24 network=192.168.2.0 broadcast=192.168.2.255 interface=WAN2
add address=192.168.3.1/24 network=192.168.3.0 broadcast=192.168.3.255 interface=Local

# 5. setup DHCP / DNS

/ip hotspot user profile
set [ find default=yes ] idle-timeout=none keepalive-timeout=2m \
    mac-cookie-timeout=3d
/ip pool
add name=dhcp ranges=192.168.3.10-192.168.3.254
/ip dhcp-server
add address-pool=dhcp disabled=no interface=bridge-local lease-time=10m name=\
    default
/ip dhcp-server network
add address=192.168.3.0/24 dns-server=\
    192.168.3.1 gateway=192.168.3.1

/ip dns set allow-remote-requests=yes cache-max-ttl=1w cache-size=5000KiB max-udp-packet-size=512 servers=61.91.37.22,8.8.8.8


# 6. the PCC load-balancing script

/ip firewall mangle
add chain=input in-interface=WAN1 action=mark-connection new-connection-mark=WAN1_conn
add chain=input in-interface=WAN2 action=mark-connection new-connection-mark=WAN2_conn

add chain=output connection-mark=WAN1_conn action=mark-routing new-routing-mark=to_WAN1
add chain=output connection-mark=WAN2_conn action=mark-routing new-routing-mark=to_WAN2

add chain=prerouting dst-address=192.168.1.0/24 action=accept in-interface=bridge-local
add chain=prerouting dst-address=192.168.2.0/24 action=accept in-interface=bridge-local

add chain=prerouting dst-address-type=!local in-interface=bridge-local per-connection-classifier=both-addresses-and-ports:2/0 action=mark-connection new-connection-mark=WAN1_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=bridge-local per-connection-classifier=both-addresses-and-ports:2/1 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes

add chain=prerouting connection-mark=WAN1_conn in-interface=bridge-local action=mark-routing new-routing-mark=to_WAN1
add chain=prerouting connection-mark=WAN2_conn in-interface=bridge-local action=mark-routing new-routing-mark=to_WAN2

/ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-mark=to_WAN1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.1 routing-mark=to_WAN2 check-gateway=ping

add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.1 distance=2 check-gateway=ping

/ip firewall nat
add chain=srcnat out-interface=WAN1 action=masquerade
add chain=srcnat out-interface=WAN2 action=masquerade

เมื่อกำหนดเสร็จและไม่เกิดข้อผิดพลาดอะไรท่านก็จะพบว่า router ทำ load balancing ให้เรียบร้อย ดังแสดงในภาพ

load balance traffic

สรุป

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

วันนี้นอกจากจะได้เล่นเน็ตแรงขึ้นแล้ว ยังได้เห็นว่า MikroTik เป็นสุดยอดอุปกรณ์ router (สำหรับยาจก) จริงๆ แพงกว่า router บ้านทั่วไป 3-4 เท่า แต่ในแง่ของความสเถียรและความสามารถแล้วยังนับว่าถูกกว่าอุปกรณ์จากเจ้าใหญ่ทุกเจ้ามาก ประทับใจจริงๆ

ว่าแต่แบบนี้ผมจะทำใจยกเลิกเน็ตเก่าได้ไหมนะ

อ้างอิง

  1. Mikrotik DUAL WAN Load Balancing using PCC method. Complete Script ! by zaiB – Script ของผมใช้จากที่นี่เป็นหลัก
  2. ทำ Load Balance เน็ต 2 สายด้วย MikroTik RB750, RB751U, RB450G – อธิบายดีครับ แต่ผมเอามาลองแล้วมันทำงานเป็น Backup ไม่ใช่ load balancing
  3. ติดตั้ง MikroTik แบบ 2 PPPOE to 1 LAN (LoadBalance+HS) – อันนี้อ่านเพื่อเรียนรู้ แต่ไม่ได้เอาของเขามาใช้
  4. Load Balancing Mikrotik documentation – เอกสารจาก Mikrotik เอง ไว้อ้างอิง

ผู้เขียน

 

 

 

 


Leave a comment

Your email address will not be published. Required fields are marked *

One thought on “ทำ Load Balancing โดยใช้ Router MikroTik