08 May 2010

ตั่งค่าระบบ Traffic shaping บน m0n0wall อย่างชาญฉลาด

เนื่องจากบทความต้นฉบับนั้นไม่มีภาพแล้วและผมเองก็หาภาพจากที่อื่นไม่ได้นะครับ ส่วนที่เป็นภาพจะปล่อยว่างไว้ตามเดิมนะครับ

สวัสดีครับ ^^ พบกันอีกครั้งกับบทความภาคต่อซึ่งกว่าจะออกแสนยาวนาน รอกันจนขี้เกลือขึ้นหมดแล้วแฮ่ๆ ขอบคุณสำหรับท่านที่ยังรอครับก็เป็นเวลาเกือบหนึ่งเดือนเต็มๆ ที่ผมหายหน้าหายตาไป ถึงแม้จริงๆ ก็ไม่ได้ไปไหนไกลครับยังคงสถิตอยู่ในบอร์ด เอดีเอสเอลไทยแลนด์เหมือนเดิม เพียงแต่จะแค่เข้ามาดูและตอบบ้างเล็กน้อยเท่านั้น ก็คงจะแก้ตัวเป็นอย่างอื่นไปไม่ได้ พูดได้อย่างเดียวว่าติด เรื่องส่วนตัวไม่ส่วนตัวเกือบหนึ่งเดือนเต็มๆ ทั้งเรื่องเรียน ด้วยเรื่องงานพิเศษและอีกสารพัด (แก้ตัวได้เนียนมาฮ่าๆ) ด้วยเหตุนี้ผมเลยไม่ได้ค่อยมีเวลาว่างและสมองว่างๆมาคิดเขียนอะไรที่มีสาระสักเท่าไหร่ และก็ได้ตัดสินใจเขียนใหม่อยู่หลายต่อหลายครั้ง เพราะดูแล้วจากข้อมูลที่หามาหลายแหล่งนั้นผมก็เข้าใจแต่ก็ไม่รู้จะอธิบายให้เหมาะอย่างไรดีรวมถึงการทำรูปประกอบซึ้ง ผมเองก็ห่วยเรื่องวาดรูปเป็นหนี้เดิมอยู่แล้ว ดันต้องมาเขียนรูปประกอบให้คนอื่นเข้าใจยิ่งไปกันใหญ่ วาดเองยังงงเองเลย ส่วนอะไรที่ผิดพลาดในบทความนี้ ท่านผู้รู้ช่วยให้คำแนะนำด้วยนะครับหลายๆ ท่านคงประสบปัญหาอาการ "แล็ก" (Lag) ของเกมส์ออนไลน์ เมื่อน้องที่เล่นอยู่อีกเครื่องเปิดเว็บขณะที่ตัวเองกำลังมันส์กับเกม FPSหรือน้องขอท่านจะกลายร่างทันที เมื่อตัวท่านเองเปิดเว็บเพื่อทำรายงาน ในขณะที่น้องเล่นเกมออนไลน์ และยิ่งไปกว่านั้นหากใครที่เปิดร้าน เกมส์+อินเทอร์เน็ต คงไม่มีลูกค้ากลับมาใช้บริการอีกเป็นแน่ หากปล่อยให้เกมเกิดอาการแล็ก โดยสาเหตุเพียงแค่คนในร้านเปิดเว็บทำให้ในปัจจุบันนี้ร้านส่วนใหญ่จะติดตั่ง ADSL ไว้ถึง 2 คู่สาย เพื่อแยกเกมและบริการอื่นๆ ออกจากกันหรือที่หนักกว่านั้น คือบางร้านนั้นไม่ยอมให้ลูกค้าเล่นอินเทอร์เน็ตเลย หากที่กล่าวมาทั้งหมดนี้ได้เป็นส่วนหนึ่งของปัญหาที่ท่านกำลังประสพอยู่ ระบบ Traffic shapingออพชั่นจาก m0n0wall ตัวเก่งนี้ อาจจะเป็นทางเลือกที่จะช่วยท่านได้ครับ

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

ระบบเครือข่ายอินเทอร์เน็ต นั้นหลายท่านคงทราบดีแล้วว่าเกิดจากเครือข่ายหลายๆ เครือข่ายมาประกอบกันและแน่นอนว่าแต่ละเครือข่ายนั้นมีความเร็วไม่เท่ากันขึ้นอยู่กับจุดประสงค์ สภาพแวดล้อมและงบประมาณ ปัญหาที่เกิดขึ้นถ้าจะมองก็คือ การส่งข้อมูลจากเครื่อข่ายที่มีความเร็วสูงไปยังเครือข่ายที่มีความเร็วต่ำกว่าจะต้องมีระบบควมคุมที่ดีเพื่อไม่ให้ ขอมูลส่งเร็วเกินกว่าที่เครือข่ายจะรับได้หรือเกิดการชนกันระหว่างที่ส่งข้อมูลข้ามเครือข่ายที่มีความเร็วไม่เท่ากัน ระบบที่ว่านี้มีอยู่แล้วเป็นมาตรฐาน แต่หากว่ามาตรถฐานนี้อาจไม่เอื่ออำนวยกับความต้องการในปัจจุบันเมื่อคอมพิวเตอร์มีประสิทธิภาพสูงขึ้นสามารถใช้งานโปรแกรมได้หลายงาน พร้อมๆ กันและต้องการการค่าหน่วงเวลาที่ใช้ในการส่งข้อมูลในเครือข่าย (Response time) ที่ต่ำมากๆ โดยเฉพาะเกมส์ทั้งหาย มาตรฐานที่ใช้อยู่จึงอาจทำให้เกิดปัญหาขึ้นมาหากไม่ได้ทำการปรับแต่งให้เหมาะสม ระบบที่กล่าวนั้นมีอยู่ด้วยกัน 3 ระบบซึ่งจะทำงานร่วมกันคือ


1.Congestion control (ระบบควมคุมความแออัด) *
2.Flow control (ระบบควมคุมการไหล) *
3.Error control (ระบบควมคุมความผิดพลาด)

อินเทอร์เน็ตที่เราใช้บริการทั่วไปในปัจจุบัน Bandwidth ของระบบไม่ได้เท่ากันตั่งแต่ต้นทางจนถึงปลายทาง ตัวอย่างเช่น จาก ISP ไปยังDSLAM จาก DSLAM ไปยังผู้ใช้ตามบ้าน จุดที่เกิดปัญหาขึ้นคือจุดที่มี Bandwidth ต่ำที่สุดหรือจุดที่ถูกควมคุม Bandwidth เพราะจะมีการแออัดของข้อมูลค่อนข้างมากเมื่อใช้อย่างเต็มที่

Image

จากรูปจะเห็นได้ว่าเมื่อข้อมูลส่งจากต้นทาง (Source) ไปปจนถึงปลายทางจะเกิดคอขวดที่ลิงค์ปลายทางเนื่อจากมี Bandwidth ที่ต่ำกว่าเมื่อเกิดการแออัด (Congestion) แล้ว ข้อมูลที่ยังส่งไม่ได้จะถูกเก็บรออยู่ใน Buffer ของอุปกรณ์ในจุดที่เกิดการแออัดของข้อมูล เพื่อรอส่งเมื่อเครือข่ายว่าง การเก็บข้อมูลใน Buffer นั้นไม่เพียงแต่จะทำให้เกิดการหน่วงเวลาขึ้นแต่หากเมื่อต้นทางยังคงส่ง ข้อมูลเข้ามาจน Buffer เต็มก็จะเกิดการสูญเสียข้อมูล (Loss) แต่โดยปรกติอุปกรณ์จะแจ้งไปยังต้นทางให้ชะลอการส่งข้อมูลเพื่อรอให้ Buffer ว่างเสียก่อนหรือหากอยู่ในขั่นเลวร้ายคือข้อมูลเกิดการสูญหายระหว่างทาง อุปการณ์ปลายทาง (Destination) จะต้องส่งคำร้องขอข้อมูลใหม่ซึ่งไม่เพียงแต่จะเสียเวลายังเสีย Bandwidth อีกด้วย ถึงแม้การทำงานที่กล่าวมาทั้งหมดนั้นจะทำให้เกิดการหน่วงเวลาขอข้อมูลแต่ก็ เป็นระบบการควบคุมคุณภาพของบริการ (Quality control) ซึ่งเป็นก็เป็นสิ่งสำคัญที่ขาดไม่ได้เช่นกัน

Image

แล้ว Traffic shaper จะช่วยอะไรได้ ?Traffic shaper เป็นระบบที่เข้ามาช่วยควมคุมกันรับส่งขอมูลให้เกิดการแออัดน้อยที่สุดโดยการ ส่งคำร้องขออุปกรณ์ต้นทางหรือปลายทางให้ส่งข้อมูลในความเร็วที่กำหนดตามกฎ (Rules) ที่ตั่งไว้แทนค่ามาตรฐาน

ระบบ Traffic shaping ของ m0n0wall มีระบบจัดการย่อยๆ รวมอยู่ด้วยกันสองระบบคือ
1.Queues (ระบบคิว)
2.Pipes (ระบบท่อ)

ทั้งสองระบบนี้จะทำงานร่วมกัน โดยการกำหนดกฎ (Rules) ไว้ จากรูปจะเห็นได้ว่าขั่นตอนการทำงานจะแบ่งออกเป็น 3 ขั่นตอนเมื่อ Packet ข้อมูล ถูกส่งเข้าไปในระบบ

Image

1.เทียบค่า Packet ข้อมูล ว่าตรงกับกฏ (Rules) ที่ตั่งไว้หรือไม่รวมทั้งหาเส้นทางคิว (Pipe queue) ที่อ้างอิงในกฎ
2.เมื่อได้รับ Packet ข้อมูล จาก Pipe queue แล้วจัดสัดส่วน Bandwidth โดยเทียบว่ามีค่าน้ำหนัก (Weight) เท่าไหร่แล้วส่งไปยังระบบ Pipes
3.ข้อมูลจะผ่านเข้า Pipes และถูกความคุมตามที่ความเร็วที่กำหนด

ดูง่ายๆนะครับแต่จริงๆ ยากเพราะ Rules ที่กำหนดนั้นมีความละเอียดจริงๆ ซึ่งบางอันก็ยังใช้ไม่ได้ (หรือผมกำหนดผิดก็ไม่รู้)ก่อนเราจะเริ่มลงมือเล่นกับมันเราต้องลองวางแผนการตั่งกฎกันก่อน หยิบกระดาษขึ้นมาหนึ่งแผ่นครับแล้วลองนึกว่าเราอยากทำอะไรกับมันดีส่วนในบทความนี้ ผมจะบอกตัวอย่างหลักๆ ให้ 3 แบบแล้วกันครับ ส่วนที่นอกเหนือจากนี้ให้ลองเอาไปประยุคต์กันดูเอง

ตัวอย่างที่ 1 [จำกัด Bandwidth HTTP และ FTP (Port 80,21) รวมกันอยู่ที่ 870/128Kbps และนอกเหนือจากนั้น 870/307Kbps]สำหรับท่านที่เปิดร้านเกมส์ คงจะไม่ค่อยสนใจระบบคิวเท่าไหร่นักแต่คงจะมุ่งไปที่การจำกัด Bandwidth ของ Port ที่ชอบกระซวกBandwidth ไปหมดอย่าง Port 80,21 (http,ftp) วิธีทำแบบนี้จะง่ายขึ้นมาหน่อย คือเราไม่ต้องไปตั่ง Rules ทุก Port ที่ใช้แค่จำกัดเพียงไม่กี่ Port

ขั้นตอนการตั่งค่านั้นเราจะตั่งจากระบบ Pipes -> Queues และสุดท้ายคือตั่งกฏ เพราะมันจะอ้างอิงถึงกันแบบย้อนกลับผมหยิบกระดาษของผมลองที่เขียนขึ้นมาดู มันเขียนไว้ว่า...

ISP
Name: BuddyBB
Comment: Possibly suck

Bandwidth
Upstream: 512 Kbps :: Without congestion : (512/100) * 85 = 435 Kbps
Downstream:: 2048 Kbps :: Without congestion : (2048/100) * 85 = 1740 Kbps

Pipes description
+Pipe #1
Bandwidth: 128
Mask: source
Desc: www_total_upload

+Pipe #2
Bandwidth: 307 (435 - 128)
Mask: source
Desc: other_total_upload

+Pipe #3
Bandwidth: 870 (1740/2)
Mask: destination
Desc: www_total_download


+Pipe #4
Bandwidth: 870 (1740/2)
Mask: destination
Desc: other_total_download


Queues description
+NONE

Traffic shaping rules
-------------------------------------- Upstream rules
+Rules #1
Target: www_total_upload
Interface: WAN
Protocol: TCP
Source port: any
Destination port: 80
Direction: Out
Desc: HTTP upload

+Rules #2
Target: www_total_upload
Interface: WAN
Protocol: TCP
Source port: any
Destination port: 21
Direction: Out
Desc: FTP upload

+Rules #3
Target: other_total_upload
Interface: WAN
Protocol: any
Source port: any
Destination port: any
Direction: Out
Desc: Other upload
--------------------------------------- Downstream rules
+Rules #4 (1)
Target: www_total_download
Interface: WAN
Protocol: TCP
Source port: 80
Destination port: any
Direction: In
Desc: HTTP download

+Rules #5 (2)
Target: www_total_download
Interface: WAN
Protocol: TCP
Source port: 21
Destination port: any
Direction: In
Desc: FTP download

+Rules #6 (3)
Target: other_total_download
Interface: WAN
Protocol: any
Source port: any
Destination port: any
Direction: In
Desc: Other download


หรือให้เขียนเป็นรูปก็ได้แบบนี้เหละครับ

Image

ครับก็งงไปตามๆ กัน ดูรูปประกอบไปด้วยครับจะงงครบสูตร (ขำ :P) ไม่ต้องไปกลัวอะไรครับเรามา ลุยต่อกันเลย (เดี๋ยวมันจะเริ่มเข้าหัวเอง)ให้ไปที่หน้า m0n0wall จากนั้นเลือกเมนู 'Traffic shaping' (สำหรับท่านที่เคยเล่นไว้แล้ว แต่ไม่ได้ผล กรุณาลบออกให้หมดนะครับ)จากนั้นคลิกไปที่แถบ 'Pipes' ที่เราจะเริ่มตั่งค่าเป็นอันดับแรกที่นี่ครับ ระบบนี้อย่างที่บอกไปแล้วมันคือระบบจำกัด Bandwidthและค่าที่อยู่ในกระดาษของผมก็อยู่ในหัวข้อ "Pipes description" ซึ่งมีอยู่ 4 ท่อด้วยกัน จุดประสงค์ก็คือสร้างท่อ Bandwidth ขนาดรวมกันไม่เกิน 1740/435 Kbps เพื่อจำกัด Bandwidth ร่วมกับ Rules และค่านี้สามารถเปลี่ยนแปลงทีหลังได้

ทำไมถึงไม่ใช้ 2048/512 ล่ะ? เพราะว่าการส่งข้อมูลนั้นไม่ได้ส่งแค่ DATA อย่างเดียวครับมันยังต้องส่งข้อมูลจ่าหน้าถึงผู้รับด้วย เจ้าขอมูลนี้ให้เรียกว่า Overhead หรือ Header ก็ไม่ผิดทำให้การส่งข้อมูลจริงๆ นั้นลดลงได้อีก ผมเลยทำการหา 85%ของ Bandwidth ที่มีเพื่อจำกัดข้อมูลจริงที่จะส่ง และหลีกเลี้ยงการเกิด Congestion ในระบบครับ(สำหรับท่านที่ไม่พอใจ 85% ลองเพิ่มเป็น 90% ก็ได้ครับ)

Image

การสร้างท่อก็มีอะไรยากครับ เมื่อเข้ามาตามรูปแล้วให้คลิกที่เครื่องหมาย "+" เพื่อสร้างท่อตามที่เขียนในกระดาษไว้

Image

::Bandwidth::
ค่าความกว่าง Bandwidth ที่เราจะกำหนดลงในท่อที่จะสร้าง
::Mask::
คือค่าที่จะตันสินให้ระบบสร้าง Virtual pipe (ท่อเสมือน) ขึ้นมาซึ่งผมเองยังไม่ค่อยแน่ใจการทำงานของมันเช่นกันค่านี้มีอยู่ 2 อย่างด้วยกัน คือ Source และ Destination การระบุค่านี้ง่ายๆ โดยคิดได้จากทิศทางของข้อมูลที่เราจะส่งผ่านท่อตัวอย่างเช่นถ้าท่อนี้สำหรับ Upload ก็ให้ระบุเป็น 'Source' ในทางกลับกันหากเป็นท่อ Download ให้ระบุเป็น 'Destination'
::Desc::
รายระเอียด แต่ผมจะเรียกมันว่า 'ชื่อ' แล้วกันครับ

กรอกค่าที่อยู่ในกระดาษลงไปจนครบแล้วกด 'Save' และทำแบบเดิมจนครบ 4 ท่อ

Image

เมื่อทำครบแล้วก็กดปุ่ม 'Apply' ครับมันจะขึ้นมาหลังจากสร้างท่อแรกเลย ไม่จำเป็นต้องกดทุกครั้งนะครับ สร้างให้เสร็จก่อนแล้วค่อยกดก็ยังไม่สาย

Image

จากนั้นก็เลื่อนมาคลิกที่แถบ Rules ครับการกำหนด Rule นั้นทำโดยการคลิกที่เครื่องหมาย "+" แบบเดียวกับการสร้างท่อค่าตามในกระดาษที่ผมเขียนเลยครับ

Image

::Target::
จุดหมาย เมื่อตรงกับ Rule ข้อนี้แล้วจะให้ส่งไปยังท่อ (Pipe) ที่สร้างไว้ท่อไหน
::Interface::
Interface ที่จะให้ Rule นี้มีผลครับ (ให้เป็น WAN เสมอ)
::Protocol::
Protocol ที่ Packet ข้อมูลนั้นใช้ แต่หลักๆ ที่ใช้ก็คือ TCP และ UDP
::Source port::
Port ต้นทาง
::Destination port::
Port ปลายทาง

EX: เมื่อเราติดต่อ Server adslthailand เพื่อเข้าหน้า Forum เครื่องของเราจะส่งคำร้องไปที่ Port 80 ของ Serverในทิศทาง Out (Upload) การเชื่อมต่อจะเป็นแบบนี้ครับ
[Source port : Any] -> [Destination port : 80]
และเมื่อเราได้รับข้อมูลจาก Port 80 ของ Serverในทิศทาง In (Download) การเชื่อมต่อจะเป็นแบบนี้ครับ
[Source port : 80] -> [Destination port : Any]

::Direction::
ทิศทางของข้อมูล
::Desc::
ส่วนนี้พิมพ์ให้เป็นชื่อที่เข้าใจได้

ก็ใส่ค่าตามที่ผมเขียนไว้ในกระดาษในหัวข้อ "Traffic shaping rules" ได้เลยครับ 'Save' และทำแบบเดียวกันให้ครบ 6 Rules อ๋อในรูปตัวอย่างนั้น ผมได้ตัดบางส่วนออกนะครับเพราะมันไม่ได้ใช้ หากเจอก็ไม่ต้องไปตั่งค่าอะไรครับ ปล่อยอย่างที่มันเป็นอยู่ไว้แบบนั้นเหละครับ(หากพลาดไปเล่นมันก็กด Black กลับไปใหม่ครับ)

Image

เมื่อทำเสร็จแล้วก็ตรวจดูว่าตรงกับในรูปก่อนก็ได้ครับเพราะส่วนนี้มีราย ละเอียดมากเหลือเกินหากผิดไปแล้วเวลาทดสอบมันไม่ง่ายครับ แน่ใจแล้วก็คลิก 'Apply' ได้เลย

Image

หายใจลึกๆ ครับแล้วติ๊กตรงช่อง 'Enable traffic shaper' กด 'Save' แล้ว... ลุยทดสอบมันโดยไปหา Website ดาวน์โหลดไฟล์สักไฟล์หาที่ๆ แรงที่สุด แล้วโหลดไฟล์ดูครับ ให้แน่ใจนะครับว่าโหลดจาก Port 80 หรือ 21 แล้วดูค่าความเร็วครับ ^.^

Image

นี้ก็เป็นผลที่ได้จากการทดสอบ Rule ที่ผมร่างไว้ในกระดาษเป็นไปได้สวยงามครับ สำหรับอีกสองวิธีและคำอธิบายเพิ่มเติมที่เหลือผมขออภัยจริงๆ ครับ จะมาลงให้ในอีก 2 วันครับ เนื่องจากไม่มีเวลาทดสอบมากนักและติดงานนิดหน่อยครับ สำหรับใครที่ไม่พอใจกับ Bandwidth ที่ได้ให้ไปแก้ได้ตามใจชอบในแถบ Pipes นะครับโดยกด 'e' เพื่อแก้ใข เมื่อเรียบร้อยก็คลิก 'Apply' เป็นอันเสร็จพิธีครับ

ขอบคุณที่ติดตามครับ
MaXZerker

ที่มา : http://www.adslthailand.com/forum/viewtopic.php?t=21302

0 comments:

Post a Comment