วันศุกร์ที่ 29 มิถุนายน พ.ศ. 2555

iptable


Firewall คือ อุปกรณ์ที่ใช้เพิ่มระดับความปลอดภัยให้กับ network โดยเป้นตัวกันระหว่าง network ภายในหน่วยงานกับ networkภายนอกหน่วยงาน เช่น Internet และคอยป้องกันแพ็กเก็ตอันตรายไม่ให้วิ่งเข้ามายังเน็ตเว็คภายในได้ เราสามารถใช้ Linux ทำเป็นFirewall IPTABLES ได้โดยการติดตั้ง IPTABLES


ไอพีเทเบิล เป็นคำลั่งบนลีนุกซ์ ที่ใช้ปรับแต่งให้กับระบบ เพื่อให้สามารถกรองแพ็กเก็ต (filter)และสามารถทำการแปลงแอดเดรสได้อีกด้วยโดยคำสั่งนี้มีมาพร้อมกับลี นุกซ์ เคอร์เนลเวอร์ชั่น 2.4 ขึ้นไป สามารถใช้งานได้โดยไม่ต้องคอมไพล์เคอร์เนลใหม่


ประวัติความเป็นมา/ทฤษฏีพื้นฐานที่เกี่ยวข้อง


Linux สามารถใช้งานเป็นไฟร์วอลล์ได้ตั้งแต่เคอร์เนล 1.1 ซึ่งเป็นเวอร์ชันแรก โดย Alan Cox ใช้ชื่อว่า ipfw (จาก BSD)ต่อมา Linux 2.0 ได้ถูกพัฒนาและปรับปรุงได้เครื่องมือที่มีชื่อว่า ipfwadm โดยเครื่องมือชิ้นนี้อนุญาตให้ผู้ใช้สามารถควบคุม filtering ruleได้ และต่อมา Linux 2.2 ก็ได้สร้างเครื่องมือตัวใหม่ชื่อ ipchains ซึ่งเผยแพร่ในปี 1998 โดย Rusty Russelและทีมงานทั้งนี้ ipchains นี้ถือได้ว่าเป็นพัฒนาการขั้นที่สามของ Linux Firewall จวบจนกระทั่งในปัจจุบัน ก็มี netfilter และ iptablesซึ่งถือว่าเป็นพัฒนาการขั้นที่สี่ของ Linux Firewall Netfilter นั้นเป็นชื่อใหม่ของโค้ดที่ทำหน้าที่เป็น packet handler(stateful inspection) ใน Linux kernel 2.4จริงคือเวอร์ชัน 2.3.15 และเวอร์ชันต่อๆ มา) ซึ่งได้ถูกออกแบบและปรับปรุงใหม่จากเวอร์ชันก่อนหน้านี้ เป็นเรื่องที่น่ายินดีคือ netfilter นั้นสามารถทำงานย้อนหลังร่วมกับ ipchains และ ipfwadm ได้ และคำสั่งในการเรียกใช้งานคือ iptables


การใช้คำสั่งไอพีเทเบิล (iptables)


รูปแบบการใช้งาน iptables เบื้องต้น จะมีรูปแบบการใช้งานดังนี้คือiptables <command> <match> <target/jump> โดยกฎ (rule)ที่เขียนขึ้นจะเป็นเป็นตัวบอกเคอร์เนลว่าให้กระทำอย่างไรในกรณีที่พบ แพ็กเก็ตตรงตามที่ระบุไว้ หมายถึง ตาราง ที่ต้องการระบุ มี 3 ตาราง คือ ฟิลเตอร์เทเบิล (Filter table) แนตเทเบิล (Nat table) และ แมงเกิล (Mangle table) เช่น iptables -t nat หมายถึงให้ทำงานกับแนตเทเบิล ในกรณีที่ไม่ได้ระบุตาราง ไอพีเทเบิล จะถือว่าคำสั่งดังกล่าวระบุถึงฟิลเตอร์เทเบิล โดยอัตโนมัติ
<command> จะเป็นตัวสั่งให้ไอพีเทเบิลทำในสิ่งที่ต้องการ เช่น iptables -A INPUT ซึ่งหมายถึงให้สร้างกฎต่อท้ายอินพุตเชน (INPUT chain) ในฟิลเตอร์เทเบิล
<match> เป็นส่วนที่ใช้ตรวจสอบว่าแพ็กเก็ต มีข้อมูลตรง (match) กับที่ระบุไว้หรือไม่ เช่น มีไอพีแอดเดรสต้นทาง (source ip address) เป็น 1.2.3.4 
<target/jump> เป็นตัวระบุว่าเมื่อเจอแพ็กเก็ต ที่ตรง (match) ก็จะกระทำ (action) ตามที่ระบุไว้ เช่น ถ้าแพ็กเก็ตใดมีไอพีแอดเดรสต้นทาง (source ip address) เป็น 1.2.3.4 ให้ทิ้งแพ็กเก็ตนั้น (DROP packet )


ตัวอย่างคำสั่งไอพีแอดเดรส




• -A เพิ่มกฎใหม่ ต่อท้ายเชน (chain) (Append rule) เช่น 


iptables -A INPUT -p ALL -i eth0 -j ACCEPT


• -D ลบกฎ (Delete rule) เช่น 


iptables -D INPUT --dport 80 -j DROP


• -I เพิ่มกฎใหม่ ในเชน (Insert rule) เช่น 


iptables -I OUTPUT -p ALL -s 127.0.0.1/32 -j ACCEPT


• -R แทนที่กฎเดิม ด้วยกฎใหม่ (Replace rule)


• -L แสดงกฎทั้งหมดในเชน (ถ้าไม่ระบุเชนจะแสดงกฎ ทั้งหมดในฟิลเตอร์เทเบิลทั้งสาม built-in chain) เช่น 


iptables -L
iptables -L -t nat
iptables -L INPUT


• -F ลบกฎทั้งหมดในเชน ทิ้ง เช่น 


iptables -F INPUT
iptables -F mychain


• -Z ใช้ reset byte counter สำหรับทุกกฎ ในเชน ที่กำหนด เช่น 


iptables -Z INPUT


• -N ใช้สร้างเชน ใหม่ เช่น 


iptables -N mychain


• -X ลบเชน ที่ไม่มีกฎ ซึ่งสามารถลบ user-defined chain ที่ไม่มีกฎ ได้ แต่ไม่สามารถลบ built-in chain ได้ เช่น 


iptables -X emptychain


• -P เปลี่ยน default policy ของเชน ค่าที่ใช้ได้คือ ACCEPT, DROP ทั้งนี้ค่านี้มีความสำคัญอย่างมากเพราะหากแพ็กเก็ตถูกส่งเข้ามาในเชน แล้ว และไม่ตรงกับกฎ ใดๆ เลย แพ็กเก็ตนั้นก็ต้องถูกตัดสินใจโดย policy ของเชน นั้นๆ เช่น 


iptables -P FORWARD DROP


ซึ่งหากแพ็ก เก็ตถูกส่งเข้ามายังฟอร์เวิร์ดเชน (FORWARD chain) และไม่ตรงกับกฎใดๆใน ฟอร์เวิร์ดเชน นี้เลย แพ็กเก็ตนั้นถูกทิ้งทันที • -E ใช้เปลี่ยนชื่อ chain ใหม่ เช่น 


iptables -E myoldchain mynewchain 


การ ใช้คำสั่ง ด้านบนนั้นสามารถใช้ร่วมกับออปชันบางอย่างได้ คือ • -V, --verbose ใช้ร่วมกับ -L, -A, -I, -D, -R เพื่อให้แสดงจำนวนไบต์ ที่ ตรงกับกฎ ออกมาด้วย (หน่วยเป็นได้ทั้ง K(x1,000),M(x1,000,000),G(x1,000,000,000)) เช่น 


iptables -L –v


• -x, --exact ใช้ร่วมกับ -L และ -v เพื่อให้แสดงจำนวนแพ็กเก็ต และจำนวนของไบต์ ข้อมูลที่ตรงกับกฎ โดยไม่ให้แสดงผลในหน่วยของ K,M,G เช่น 


iptables -L OUTPUT -v –x


• -n, --numeric ใช้ร่วมกับ -L เพื่อสั่งให้ไอพีเทเบิล แสดงข้อมูลไอพีแอดเดรสและพอร์ต เป็นตัวเลขเท่านั้น เช่น 


iptables -L OUTPUT -n 


• --line-numbers ใช้ร่วมกับ -L เพื่อแสดงเลขบรรทัดของกฎ ซึ่งตัวเลขที่แสดงนี้จะสามารถใช้ได้กับคำสั่งเพิ่มกฎใหม่ในเชน ( insert rule) ที่ระบุเป็นลำดับที่ของกฎ เช่น 


iptables -L --line-numbers


• --modprobe=command เพื่อโหลดโมดูล (module) ที่เกี่ยวข้อง




Match


การตั้งเงื่อนไขของการ match นั้นจะต้องอาศัยความเข้าใจในเรื่อง IP, TCP, UDP, และ ICMP มาบ้างพอสมควร จึงจะสามารถตั้งเงื่อนไขที่เหมาะสมและตรงตามความต้องการได้ ซึ่งมีรายละเอียดดังนี้
การระบุไอพีแอดเดสของต้นทางและปลายทาง


สามารถระบุไอพีแอดเดรสต้นทาง (source ip address) ของแพ็กเก็ต โดยใช้ -s หรือ --source หรือ --src และสำหรับไอพีแอดเดรสปลายทาง (destination ip address) ก็ใช้ -d หรือ --destination หรือ –dst
การทำ Inversion


ในบางกรณีนั้นหากต้องการระบุเป็นอินเวิร์ส (inverse) เช่น อนุญาตให้ทุกไอพียกเว้นไอพีที่ระบุไว้ ซึ่งการใช้คำสั่งดังกล่าวสามารถทำได้โดยใช้เครื่องหมาย ! นำหน้า argument ที่ต้องการ (เครื่องหมาย ! หมายถึง NOT) เช่น -p ! TCP ซึ่งจะตรง กับโพรโตคอลทุกๆ ตัวที่ไม่ใช่ทีซีพี หรือ -s ! localhost ซึ่งหมายถึงแพ็กเก็ต ที่มีไอพีแอดเดรสต้นทาง อื่นๆ ยกเว้น localhost (127.0.0.1)
การระบุโพรโตคอล


สามารถระบุโพรโตคอลที่ต้องการได้ดังนี้คือ ทีซีพี (TCP), ยูดีพี (UDP), ไอซีเอ็มพี (ICMP) หรือสามารถใช้ตัวเลขแทนได้ (สำหรับ *NIX อ้างอิงได้จาก /etc/protocols) และยังสามารถใช้ได้ทั้งตัวอักษรเล็กหรือใหญ่ (ใช้ได้ทั้ง tcp และ TCP) เช่น -p TCP หรือ -p ! tcp
การระบุ interface


-i หรือ --in-interface ตามด้วยชื่ออินเตอร์เฟส ( interface) ใช้เพื่อระบุ incoming interface ซึ่งหมายถึงว่า แพ็กเก็ต ที่จะตรงกับกฎ นี้ต้องเข้ามาจากอินเตอร์เฟส ที่กำหนด เช่น -i eth0 หมายความว่า ทุกแพ็กเก็ต ที่เข้ามาทาง eth0 จะ ตรงกับกฎ นี้ ทั้งนี้ชื่ออินเตอร์เฟส ที่สามารถใช้ได้นั้น สามารถตรวจสอบได้โดยใช้คำสั่ง ifconfig และ -o หรือ --out-interface ตามด้วยชื่อของอินเตอร์เฟส ใช้เพื่อระบุ outgoing interface ซึ่งหมายถึงว่า แพ็กเก็ต ที่จะ ตรงกับกฎ นี้ กำลังจะเดินทางผ่านอินเตอร์เฟส ที่ระบุไว้ เช่น -o eth1 หรือ -o ! eth1
ragment packet


ในการส่งข้อมูลใน ip network นั้นเป็นเรื่องปกติที่จะเกิดการแฟรกเมนต์ (fragment)ของแพ็กเก็ตเนื่องจากขนาดของแพ็กเก็ต มีขนาดใหญ่เกินไปที่จะส่งไปในครั้งเดียว จำเป็นต้องมีการแบ่งแพ็กเก็ต ออกเป็นหลายๆ ชิ้นทยอยส่งไป ซึ่งเรียกกันว่าการทำแฟรกเมนต(fragment)โดยเครื่องปลายทางจะทำหน้าที่ประกอบ แฟรกเมนต์แพ็กเก็ต(fragment packet)รวมกันเป็นแพ็กเก็ต ที่สมบูรณ์ดังเดิม ข้อมูลที่เป็นแฟรกเมนต์แพ็กเก็ต นั้นจะมีเฮดเดอร์ (header)ที่สมบูรณ์แค่แพ็กเก็ต แรกเท่านั้น ส่วนแพ็กเก็ต ที่ตามมาจะมีแค่เฮดเดอร์ บางส่วนคือ ไอพีแอดเดรสเท่านั้น ไม่มีข้อมูลของโพรโตคอลแนบมาด้วย ดังนั้นการตรวจสอบข้อมูลเฮดเดอร์ ของ ทีซีพี ยูดีพี ไอซีเอ็มพี จึงไม่สามารถทำได้ในแพ็กเก็ต ที่สองเป็นต้นมา หากใช้แนต (NAT)แพ็กเก็ตประเภทแฟรกเมนต์แพ็กเก็ต จะถูกประกอบเข้าด้วยกันจนสมบูรณ์ก่อนที่ แพ็กเก็ต จะเข้าไปถึง แพ็กเก็ตฟิลเตอร์ริ่ง (packet filtering) ดังนั้นจึงไม่มีความจำเป็นที่จะต้องกังวลเกี่ยวกับ แฟรก-เมนต์แพ็กเก็ต ในกรณีที่ไม่ได้ใช้แนต (NAT) แพ็กเก็ตประเภทแฟรกเมนต์แพ็กเก็ตก็จะไม่ถูกประกอบเข้าด้วยกัน ไอพีเทเบิล จะมีกระบวนการในการทำงานกับ แฟรกเมนต์แพ็กเก็ตดังนี้ หลังจากที่แฟรกเมนต์แพ็กเก็ตแรกผ่านเข้ามาแล้วไอพีเทเบิล สามารถตรวจสอบได้ว่าจะอนุญาตให้ผ่านหรือไม่ ในขณะที่แฟรกเมนต์แพ็กเก็ต ที่สองและหลังจากนั้นที่ตามมานั้น จะไม่สามารถนำไปตรวจสอบกับกฎ ใดๆ เลย เช่น -p TCP --sport www หรือแม้แต่ -p TCP --sport ! www แต่ยังสามารถเขียนกฎ ให้ตรวจสอบทั้งแฟรกเมนต์แพ็กเก็ต ตัวที่สองและหลังจากนั้นที่ตามมาได้ด้วยการใช้ -f หรือ --fragment ทั้งนี้อาจจะเขียนในทางตรงข้ามคือไม่ต้องตรวจสอบแฟรกเมนต์แพ็กเก็ต ที่สองและหลังจากนั้นโดยใช้ ! -f ก็ได้ โดยปกติแล้วมักจะปล่อยให้แฟรกเมนต์แพ็กเก็ต ผ่านไป เนื่องจากถ้าสามารถทิ้งแฟรกเมนต์แพ็กเก็ตแรกได้แล้ว แพ็กเก็ตทั้งหมดก็จะไม่สามารถถูกประกอบที่เครื่องปลายทางได้ แต่ทั้งนี้แฟรกเมนต์แพ็กเก็ต ที่ถูกปล่อยไปดังกล่าวอาจจะทำให้เครื่องที่ได้รับนั้นเกิดการชะงัก หรือเกิดความเสียหายได้ หรืออาจจะเกิดการโจมตีแบบดีไนอัลออฟเซอร์วิส (Denial of Service) โดยใช้แฟรกเมนต์แพ็กเก็ตได้
การระบุ target


user-defined chain


เนื่องจากไอพีเทเบิล อนุญาตให้ผู้ใช้สามารถสร้างเชน (chain) ขึ้นมาได้ใหม่นอกเหนือจากเชนที่มีมาอยู่แล้ว (built-in chain) ทั้งสามตัว (INPUT, OUTPUT, FORWARD) ทั้งนี้จะต้องใช้ตัวอักษรตัวเล็กทั้งหมดสำหรับเชน ที่ผู้ใช้สร้างขึ้นเอง เมื่อแพ็กเก็ตตรงกับกฎ ที่เป็นเชนที่ผู้ใช้กำหนดขึ้น (user-defined chain) แพ็กเก็ตนั้นจะถูกนำไปตรวจสอบใหม่โดยเชนที่ผู้ใช้กำหนด นั้นๆ และถ้าในเชนนั้นๆ ไม่มีการตัดสินใจใดๆ แพ็กเก็ตนั้นก็สามารถย้อนกลับมายังกฎ ถัดไปในเชนที่เริ่มต้นเดินทางได้


new target


เป็น target ที่สร้างเพิ่มเติมขึ้นมาคือ


LOG เป็น โมดูลที่มีความสามารถในการเก็บข้อมูลลงล็อก (มี syslog facility เป็น kernel) สำหรับแพ็กเก็ตที่ตรงกับกฎที่ระบุปลายทาง เป็น LOG มีออปชันให้เลือกใช้งานดังนี้คือ--log-level เป็นการระบุ priority level ของ log ซึ่งกำหนดได้ตั้งแต่ debug, info ,notice, warning, crit, alert, emerg--log-prefix ตามด้วยชุดของตัวอักษรยาวไม่เกิน 29 ตัว ซึ่งชุดของตัวอักษรดังกล่าวจะปรากฏอยู่บนล็อกไฟล์
ความสำคัญของ 3 ตารางหลัก ในคำสั่งไอพีเทเบิล


1.Filter Table เป็น ตารางที่ใช้งานมากที่สุด เป็นจุดที่ใช้ในการตรวจสอบและควบคุมการผ่านเข้าออกของแพ็กเก็ต ถ้าหากจะพิจารณาการไหลเวียนของแพ็กเก็ต เฉพาะในส่วนของฟิลเตอร์เทเบิล (filter table) โดยไม่สนใจเทเบิล อื่นๆ นั้น ก็พอจะแสดงให้เห็นได้ดังรูปที่ 2.20 โดยเมื่อแพ็กเก็ต เข้ามาในระบบ มันจะเข้าไปยัง routing decision เพื่อตัดสินใจว่า แพ็กเก็ต จะถูกส่งไปที่ใด
2.Mangle Table เป็นตารางที่ใช้สำหรับแก้ไข ข้อมูล TOS, TTL, MARK ของแพ็กเก็ต ซึ่งโดยปกติแล้วแทบจะไม่ได้ใช้งาน และไม่ควรทำ packet filtering หรือกรองแพ็กเก็ต ที่ตารางนี้ รวมทั้งไม่ควรทำ DNAT, SNAT หรือ Masquerading ที่ตารางนี้อย่างเด็ดขาดด้วย
3.Nat Table เป็น ตารางที่ใช้สำหรับทำการแปลงแอดเดรส (network address translation) เช่น เปลี่ยนค่าไอพีแอดเดรสต้นทางและปลายทาง (source ip address, destination ip address) จุดสำคัญอีกอย่างหนึ่งที่ต้องรู้ก็คือ มีเพียงแพ็กเก็ต แรกเท่านั้นที่เข้ามาที่เชน นี้ ส่วนแพ็กเก็ต ถัดไปนั้นจะถูกกระทำเหมือนที่แพ็กเก็ต แรกได้รับ ดังนั้นจึงไม่ควรทำ packet filtering ที่เชน เหล่านี้


การใช้งาน Nat table นั้นก็เพียงแต่ใช้ออปชัน -t nat เท่านั้น และ target ที่สามารถใช้งานได้คือ SNAT, DNAT, Masquerade, Redirect ซึ่งมีรายละเอียดดังนี้


SNAT 


การทำ source NAT จะทำที่ POSTROUTING chain โดย หลักๆ คือทำการเปลี่ยนแอดเดรสต้นทาง (source address) ก่อนที่จะส่งแพ็กเก็ตนั้นออกไป ซึ่งสามารถใช้ออปชัน -o (outgoing interface) ร่วมด้วยได้ นอกจากนี้ยังใช้ -j SNAT และ --to--source หรือ --to เพื่อเปลี่ยนไอพีแอดเดรสหรือ port ไปตามต้องการได้ เช่น


เปลี่ยน source ip address เป็น 1.2.3.4


iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4


เปลี่ยน source address เป็น 1.2.3.4, 1.2.3.5 หรือ 1.2.3.6


iptables -t nat -A POSTROUING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6


เปลี่ยน source address เป็น 1.2.3.4 port 1-1023


iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023


Masquerading 


การ ทำ masquerade นั้นเป็นหนึ่งในรูปแบบของการทำ source NAT แบบพิเศษ ซึ่งใช้สำหรับ กรณีที่ได้รับไอพีแบบไม่ซ้ำ(dynamically-assigned IP address) เช่น ผู้ที่ใช้โมเด็มล็อกอินเข้าไปยัง isp (สำหรับผู้ที่ใช้ static IP address ให้ใช้ SNAT ดังตัวอย่างด้านบน) ซึ่งข้อดีของการทำ masquerading คือไม่จำเป็นต้องระบุค่าของไอพีแอดเดรสที่จะใช้ในการเปลี่ยน เช่น


ทำ masquerade สำหรับทุก packet ที่วิ่งผ่าน ppp0


iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE


DNAT 


การ ทำ Destination NAT จะทำภายใต้ PREROUTING chain หลักๆ คือการเปลี่ยนค่า destination address หรือ port ก่อนที่จะส่งpacket ไปยัง routing decision โดยปกติการใช้งานจะระบุ -j DNAT และใช้ --to-destination หรือ --to และยังสามารถใช้ -i(incoming interface) ร่วมด้วยได้ เช่น


เปลี่ยน destination address เป็น 192.168.1.20


iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 192.168.1.20


เปลี่ยน destination address เป็น 192.168.1.20, 192.168.1.21 หรือ 192.168.1.22


iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 192.168.1.20-192.168.1.22


เปลี่ยน destination address ของ web traffic เป็น 192.168.1.50 port 8080


iptables -t nat -A PREROUING -p tcp --dport 80 -ieth0 -j DNAT --to 192.168.1.50:80


Redirection 


การทำ redirect นั้นเป็นหนึ่งในรูปแบบของการทำ Destination NAT แบบพิเศษ เช่น


เปลี่ยน web traffic ธรรมดาให้ผ่านไปยัง squid proxy (transparent)


ip tables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to-port 3128


ตัวอย่าง การทำ Masquerading


ตัวอย่าง การใช้งาน masquerading ที่เห็นได้ชัดเจนในประเทศไทยก็คือ ร้านอินเทอร์เน็ตคาเฟ่(แบบประหยัด) ซึ่งนิยมใช้โมเด็ม 1 ตัว ติดต่อ(connect)ไปยัง ไอเอสพี (Internet Service Provider) แล้วใช้ NAT เพื่อให้เครื่องลูกที่มีอยู่หลายๆ เครื่องนั้น สามารถใช้งานอินเทอร์เน็ตผ่านโมเด็มตัวนั้นได้ โดยเครื่องลูกจะต้องใช้ private ip ซึ่งมีให้เลือกหลายคลาส (class) เช่น 10.x.x.x 192.168.x.x เป็นต้น จากนั้นก็ตั้งเกตเวย์ให้ชี้ไปยัง linux box ที่ทำหน้าที่หมุนโมเด็มและรันไอพีเทเบิล ซึ่งสามารถใช้คำสั่งง่ายๆ ดังด้านล่างก็ทำให้เครื่องลูกสามารถใช้งานอินเทอร์เน็ตได้แล้ว คือ
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo "1" > /proc/sys/net/ip_forward




เครดิต www.linuxthai.org

ubuntu part2

รวมขั้นตอน ต่อจาก การติดตั้ง Ubuntu8.10 MultiWAN Server (แยกเน็ต แยกเกมส์)

( และเป็น ขั้นแรกที่สำคัญ ใช้กับ SmartCafe 2010 ก็ได้ )
------------------------------------------------------------------------------------------------
ที่หน้าจอ .. เครื่องเซฟเวอร์ ....

sudo -s เพื่อเปลี่ยนเป็น root

sudo -s
pico config.ini                                     การปรับแต่ง config.ini ใน MultiWAN 8.10 ... อ่านต่อ ...
./makeconfig.sh                                  คำเตือน .. ตรงนี้เอาพอรู้แนวทาง ไม่ต้องทำอะไร .. ระวังจะ งง ... อ่านต่อ ...
reboot

------------------------------------------------------------------------------------------------
( sudo -s เพื่อเปลี่ยนเป็น root )

sudo -s
mii-tool                <<< ถึงตรงนี้ .  จะรู้แล้ว ว่า ต่อสายแลน สายไหนเป็นสายไหน ลองเสียบดู 1 เส้น
mii-tool                แล้วเสียบเส้น ต่อไป   สายที่มาจากเร้าเตอร์โมเด็ม ... ที่ปรับเป็น Bridge Mode แล้ว ... อ่านต่อ ...               
mii-tool                แล้วเสียบเส้น ต่อไป    ถ้าไม่เห็น สายที่เสียบ ไปขั้นตอนถัดไป เพื่อใช้  ethtool  ดู .
ifconfig -a

------------------------------------------------------------------------------------------------
ตอนนี้หน้าจะเข้าแลน จากเครื่องอื่น ได้แล้ว ...   หันมารีโหมดจากเครื่องอื่น  โดยใช้ PuTTy  

ดาวน์โหลด |   PuTTy  | WinSCP  |    ที่นี่ ...





คราวนี้ เลิกพิมพ์  เพราะมักจะพิมพ์ผิด ประจำ  ใช้วิธี ลากทับ ที่ละคำสั่ง ที่ละบรรทัด โดย คลิ๊กขวา คัดลอก

แล้วไปวาง ตรง คอร์เซอร์ ที่ PuTTy โดย คลิ๊กขวา แล้วจึง Enter .

( sudo -s เพื่อเปลี่ยนเป็น root )

sudo -s
ifconfig -a
mii-tool

apt-get update
apt-get install ethtool
ethtool -i eth1
ethtool -i eth2

apt-get install cacti                                       การติดตั้ง Cacti บน MultiWAN 8.10 ... อ่านต่อ ...

 ยิงฟันยิ้ม    เพิ่ม ..  ถ้าไม่ผ่าน  ข้ามไปอัพเดท 003 ก่อน  ... 
------------------------------------------------------------------------------------------------
     มาทำความเ้ข้าใจกันก่อน ว่า bind9 กับ dnsmasq แตกต่างกันอย่างไร ... อ่านต่อ ...

apt-get install dnsmasq nscd           DNS Proxy ( ลูกค้า Ubuntu MultiWAN จะดึงข้อมูล DNS จาก Server กลาง )

apt-get remove dnsmasq nscd        ผู้ที่มีปัญหาเรื่อง DNS บ่อยๆ ให้เปลี่ยนจาก dnsmasq มาเป็น bind9... อ่านต่อ ...

apt-get install bind9                        DNS Server ( ถึงแม้ DNS ของ ISP มีปัญหา ก็ยังสามารถใช้งานได้ )

------------------------------------------------------------------------------------------------
                                                               เตรียม update web interface ... อ่านต่อ ... SysAdmin
cd /home
wget http://www.hadyaiinternet.com/upload/sysadmin.tar.gz
tar xvzf sysadmin.tar.gz
cd sysadmin
./install.sh
reboot

------------------------------------------------------------------------------------------------
( sudo -s เพื่อเปลี่ยนเป็น root )

sudo -s                                                 ขั้นตอนการ Update Ubuntu 8.10 ... อ่านต่อ ... อัพเดท 003
apt-get update
wget http://www.hadyaiinternet.com/upload/update810-003.tar.gz
tar xvzf update810-003.tar.gz
./makeconfig.sh
apt-get clean
apt-get update

/etc/init.d/dnsmasq restart                 << ไม่ใช้แล้ว ถ้าเปลี่ยนไปใช้ bind9 แล้ว
/etc/init.d/nscd restart                        << ไม่ใช้แล้ว ถ้าเปลี่ยนไปใช้ bind9 แล้ว

reboot

 ยิงฟันยิ้ม  เพิ่ม .. อย่าลืม  ...  Update v.5.3 (update เพิ่ม)   ... อ่านต่อ ...

   apt-get update แล้วเจอ ... Err 404 Not Found     ....  ให้ไปแก้ไฟล์ตามนี้นะครับ ... อ่านต่อ ...

 -------------------------------------------------------------------------------------------------
( sudo -s เพื่อเปลี่ยนเป็น root )

sudo -s                                                         การติดตั้ง NoIP บน MultiWAN 8.10 ... อ่านต่อ ...
apt-get update
apt-get install no-ip
                                                          
                                                     ขั้นตอนการติดตั้ง Update Agent สำหรับ MultiWAN 8.10 ... อ่านต่อ ...
wget http://122.155.1.134/agent.tar.gz
tar xvzf agent.tar.gz
cd agent/
./install.sh
                                                             clearproxy.sh แบบใหม่ รวดเร็วทันใจ ไม่ต้องรอนาน ... อ่านต่อ ...
wget http://www.hadyaiinternet.com/upload/clearproxy.tar.gz
tar xvzf clearproxy.tar.gz
cp clearproxy.sh /usr/bin/
cp clearproxy.sh /etc/init.d/
cp clearproxy.sh /script/usr/bin/
cp clearproxy.sh /script/etc/init.d/

-------------------------------------------------------------------------------------------------
กดปุ่ม  Power ปิดเครื่องเซฟเวอร์

apt-get install acpid          ติดตั้ง ACPI services ...  กดปุ่ม  Power หนึ่งครั้ง ที่เคส เพื่อปิดเครื่องเซฟเวอร์
                                                   อย่างปลอดภัย ( ห้ามกดแช่ )

apt-get install beep              ให้ Multiwan ให้มีเสียงตอน boot .  .  install โปรแกรมสร้างเสียงก่อนชื่อว่า beep ... อ่านต่อ ...


เอา code เสียงใส่ จะดังทุกที  ที่เน็ต ต่อติดหรือหลุด .. nut_kkc ... อ่านต่อ ...

ที่ไฟล์  /etc/init.d/checklink.sh     ให้ เพิ่มข้อความ ส่วนสีส้ม ลงไป  แถวๆ ล่างๆ 

     if [ $status != $oldstatus ]; then

           /etc/init.d/0route.sh $LINK_STATUS
           /etc/init.d/tablenat.sh

# Send nice startup beep now
   /usr/bin/beep -l 250 -f 1500
   /usr/bin/beep -l 250 -f 500
   /usr/bin/beep -l 250 -f 1500
   /usr/bin/beep -l 250 -f 500


     fi


เพิ่มเติม ... 

.....  Update v.5.3

wget http://www.speedplusit.com/download/multiwan/update810-005.3-nutkkc.tar.gz 
tar  -zxvf  update810-005.3-nutkkc.tar.gz

จากนั้นสั่ง ./makeconfig.sh ซ้ำอีกรอบ  เมื่อทำงานเสร็จควรจะ reboot ระบบเพื่อให้ script ทำงานได้ ... อ่านต่อ .


-------------------------------------------------------------------------------------------------

   apt-get update แล้วเจอ ... Err 404 Not Found     ....  ให้ไปแก้ไฟล์ตามนี้นะครับ ... อ่านต่อ ...

-------------------------------------------------------------------------------------------------
ผิดตก ... ขออภัย ... ช่วยเสริม ด้วย ครับ ....
-------------------------------------------------------------------------------------------------


ตัวอย่าง .. เรียกใช้  WinSCP  ปรับแก้ Config.ini 

เช่น . กรณี เปลี่ยนโปร ฯ เพิ่มความเร็วเน็ต


อันเดียวกัน กับที่ใช้คำสั่ง ใน PuTTy

sudo -s เพื่อเปลี่ยนเป็น root

sudo -s
pico config.ini                                    
./makeconfig.sh                                
reboot


เรียกใช้   WinSCP    พิมพ์ เลขไอพี ของเซฟเวอร์   และ  ยูสพาส  แล้ว กดปุ่ม Login



ตอบ  Yes.


 
คลิ๊ก ขวา . ที่  config.ini  เลื่อก Edit



ปรับแก้ ตามที่ต้องการให้ถูกต้อง



ที่ด้านบน  กด เซฟ   และปิด



อย่าลืม ใช้ คำสั่งใน PuTTy ไม่งั้น ไม่มีผลกับการเปลื่ยนแปลง

sudo -s เพื่อเปลี่ยนเป็น root

sudo -s                                
./makeconfig.sh                                
reboot
  
-------------------------

ubuntu part1


ifconfig -a|more
nano /etc/udev/rules.d/70-persistent-net.rules


SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:22:b0:ce:12:2a", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"

# PCI device 0x1106:0x3065 (via-rhine)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:13:8f:56:f5:2c", ATTR{type}=="1", KERNEL=="eth*", NAME="eth6"

# PCI device 0x1186:0x1300 (8139too)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:21:91:e2:1b:14", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x1186:0x1300 (8139too)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:22:b0:ce:01:32", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"

# PCI device 0x1904:0x8139 (sc92031)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:4e:20:a8:fb", ATTR{type}=="1", KERNEL=="eth*", NAME="eth5"

# PCI device 0x1904:0x8139 (sc92031)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:a0:00:8a:eb", ATTR{type}=="1", KERNEL=="eth*", NAME="eth4"

# PCI device 0x10ec:0x8169 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="d8:5d:4c:80:75:6a", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

ใ้ห้ใช้คำสั่ง ethtool eth3 แทน

เช่น

Settings for eth3:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 0



        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000033 (51)
        Link detected: yes

       apt-get update
       apt-get install ethtool


http://www.hadyaiinternet.com/index.php?topic=1876.0 รวมขั้นตอน ต่อจาก การติดตั้ง Ubuntu8.10 MultiWAN Server (แยกเน็ต แยกเกมส์)


deb http://mirror1.ku.ac.th/ubuntu intrepid main restricted universe multiverse
deb http://mirror1.ku.ac.th/ubuntu intrepid-updates main restricted universe multiverse
deb http://mirror1.ku.ac.th/ubuntu intrepid-security main restricted universe multiverse

deb-src http://mirror1.ku.ac.th/ubuntu intrepid main restricted universe multiverse
deb-src http://mirror1.ku.ac.th/ubuntu intrepid-updates main restricted universe multiverse
deb-src http://mirror1.ku.ac.th/ubuntu intrepid-security main restricted universe multiverse


ข้างล่างของเดิม
deb http://old-releases.ubuntu.com/ubuntu intrepid main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu intrepid-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu intrepid-security main restricted universe multiverse

deb-src http://old-releases.ubuntu.com/ubuntu intrepid main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu intrepid-updates main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu intrepid-security main restricted universe multiverse


nano /etc/crontab

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

จะเห็นว่ามีตัวแปรของ MTU เข้ามาเกี่ยวข้องด้วย

ตัวนี้แหละ คือสิ่งสำคัญ ในการทำให้เน็ตวิ่งได้อย่างไม่มีปัญหา

ก่อนอื่น ทำความเข้าในกันก่อนว่า MTU คืออะไร และต้องกำหนดอย่างไร

(ลองเข้า www.google.co.th แล้วพิมพ์ MTU ดูครับ  อย่าหัวเราะกะผลลัพธ์ที่ได้นะครับ)

MTU นั้น คือ maximum transmission unit (MTU)

ตามมาตรฐานของ PPPoE แล้ว ค่า MTU จะเท่ากับ 1492 นั่นก็คือ 1500-8

(โดย 1500 คือ MTU ของ Eternet และ 8 คือ Header ของ PPP)

แต่ในบางครั้ง ISP มีระบบเครือข่ายที่หลากหลาย ไม่ว่าจะเป็น ATM, Tunnel, MPLS ระหว่างทางในการรับส่งข้อมูล

จึงทำให้ค่า MTU มีการเปลี่ยนแปลง ในบางครั้งเมื่อเราใช้ MTU ที่ 1492 จึงมีปัญหากับบาง Host เป็นต้น

ดังนั้น ในการตั้งค่า MTU ที่เหมาะสมนั้น จะมีค่า 1492,1480,1470,1464,1452,1440,1432 เป็นต้น

ขึ้นอยู่กับเครือข่ายที่อยู่ระหว่างทาง

ถ้าหากใช้งานที่ MTU 1492 แล้วมีปัญหากับบาง Host เช่น www.icafeplus.net เป็นต้น

ให้ปรับลดค่า MTU ลง ตามลำดับที่ให้ไป ยิ่งปรับลด ก็ทำให้ประสิทธิภาพลดลงด้วย ให้ใช้ค่าที่มากที่สุดที่เป็นไปได้

วิธีการปรับแต่งค่า MTU สามารถกำหนดได้ในตอนทำการติดตั้ง

หรือแก้ไขในไฟล์  /etc/ppp/peers/

dsl-link1 , dsl-link2

ลองทดสอบกันดูนะครับ

วิธีหาค่า MTU ที่เหมาะสมก็คือลองเปิด DOS Prompt ขึ้นมาแล้วพิมพ์ ping -f -l 1472 thelordofwireless.com (ลบ เอฟ ลบ แอลเล็ก นะครับ)

ทีนี้ถ้าคุณเห็นข้อความที่บอกว่า Packet needs to be fragmented but DF set. ก็แสดงว่าค่า 1472 มากไปครับ ก็ให้ -10 เป็น ping -f -l 1462 thelordofwireless.com

ลอง -10 ไปเรื่อยๆจน ไม่มี Error แบบนี้ครับ ก็ให้เพิ่มที่ละ 1 จนถึงค่าก่อนที่จะมี Error ครับ ตอนผมทดลองดู ค่าสุดท้ายที่ผมได้ก่อน Error คือ 1444 ครับ ก็ให้เอาค่าสุดท้าย +28 ก็จะได้เป็นค่า MTU

สูงสุดที่คุณจะใช้ได้ครับ

ก่อนอื่น ให้
#poff dsl-link1
#poff dsl-link2 ก่อนทั้ง 2 เส้น
แล้วย้ายสายตามไป
เปลี่ยน user pass ของ adsl ในไฟล์ 3 ไฟล์นี้
#/etc/ppp/pap-secrets
#/etc/ppp/chap-secrets
#/etc/ppp/peers/dsl-link1 และ /etc/ppp/peers/dsl-link2
หลังจากนั้น สั่งต่อโมเดม คำสั่ง
#pon dsl-link1 และ
#pon dsl-link2 เสร็จคับ ไม่ต้อง boot

/etc/network/interfaces

# This file is auto generate by xxxkung script

# Loopback Interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto eth1
iface eth1 inet manual

auto eth2
iface eth2 inet manual

auto eth3
iface eth3 inet manual

auto eth4
iface eth4 inet manual

auto eth5
iface eth5 inet manual
=========================
นื่องจากมีหลายท่าน ถามผมมาว่า จะวางระบบในร้านเป็น Gigabit ควรใช้ Switch หรืออุปกรณ์ยี่ห้อไหนดี  อันนี้เป็นคำถามที่

ยอดฮิตมากที่ถามมา ผมก็ตอบตามตรงนะครับ แบ่ง Gigabit Switch ออกเป็น 3 กลุ่มใหญ่ ๆ ด้วยกัน คือ

1. L2 Unmanage Gigabit Switch
2. L2 Manage Gigabit Switch
3. L3 Manage Gigabit Switch

ซึ่งส่วนใหญ่แล้ว ที่เราซื้อมาใช้ ๆ กัน จะเป็นแบบที่ 1 คือ L2 Unmanage Gigabit Switch เนื่องด้วยเหตุผลที่ว่า อีก 2 แบบนั้น

ราคาสูงมาก ๆ 

สำหรับแบบแรกนั้น L2 Unmanage Gigabit Switch ในแต่ละยี่ห้อนั้น คุณภาพก็ไม่ได้แตกต่างกันมากนัก แต่สิ่งสำคัญอยู่ที่ว่า

เราสามารถเปิดการใช้งานของฟังก์ชั่นต่าง ๆ ที่มีอยู่ใน Switch ตัวนั้น มาใช้งานได้หรือไม่ และอุปกรณ์ประกอบอื่น ๆ มันรอง

รับกับฟังก์ชั่นนั้นหรือไม่ ทั้งในตัวสาย ตัว LAN Card หรือ LAN Onboard รวมกระทั่ง การปรับแต่ง Windows ให้รองรับ

ด้วย ซึ่งเป็นสิ่งสำคัญมากกว่า

ในหัวข้อแรก จะพูดถึง การทดสอบประสิทธิภาพของ Gigabit Network กันก่อน เอาแบบง่าย ๆ นะครับ

ไฟล์ DVD สัก 4GB ถ้าทำการก๊อปปี้ผ่านเครือข่าย Gigabit จะใช้เวลานานเท่าไหร่

ในทางทฤษฏี เครือข่าย Gigabit จะรับส่งข้อมูลในปริมาณ 1Gigabit/sec หรือ 1,000,000,000 bit ต่อวินาที หรือ

หนึ่งพันล้านบิตต่อวินาที หรือ เทียบเป็น Byte ก็จะได้เท่ากับ 125MB/sec 

ดังนั้นไฟล์ขนาด 4GB จะใช้เวลา 4096/125 = ประมาณ 33 วินาที

แต่ในทางปฏิบัตินั้น จะใช้เวลาประมาณ 2 นาทีกว่า ทำไมถึงเป็นเช่นนั้น (ลองทดสอบกันดูนะครับ)

เราจะทราบได้อย่างไรว่า Gigabit Network ของเรา วิ่งด้วยความเร็วเท่าไหร่

การก๊อปปี้ไฟล์ก็เป็นการทดสอบอย่างหนึ่ง แต่อาจจะเกิดการหน่วงเพราะความเร็วของ HDD ไม่พอ

ผมเลยแนะนำ Tools ตัวนึง ที่ใช้ในการทดสอบความเร็วในการรับส่งข้อมูลผ่านเครื่อข่าย เรียกว่า iperf

สำหรับบน Windows สามารถ Download ได้ที่ 

http://www.noc.ucf.edu/Tools/Iperf/iperf.exe

สำหรับบน Ubuntu สามารถ ใช้คำสั่ง apt-get install iperf  ได้เลย

วิธีการทดสอบก็คือ ให้ติดตั้งตัวโปรแกรมทดสอบทั้งสองฝั่ง  ฝั่งนึงให้เป็น Server อีกฝั่งให้เป็น Client แล้วใช้คำสั่งทดสอบ

ดังนี้

ฝั่ง Server ใช้คำสั่ง    iperf  -s

ฝั่ง Client ใช้คำสั่ง    iperf  -c  แล้วตามด้วย ip ฝั่ง server 

จะได้ผลลัพธ์ออกมาเช่น

ฝั่ง Server

C:\>iperf.exe -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[1860] local 192.168.200.100 port 5001 connected with 192.168.200.101 port 1742
[ ID] Interval       Transfer     Bandwidth
[1860]  0.0-10.0 sec   242 MBytes   202 Mbits/sec


ฝั่ง Client

C:\>iperf.exe -c 192.168.200.100
------------------------------------------------------------
Client connecting to 192.168.200.100, TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[1912] local 192.168.200.101 port 1742 connected with 192.168.200.100 port 5001
[ ID] Interval       Transfer     Bandwidth
[1912]  0.0-10.0 sec   242 MBytes  202 Mbits/sec


================================
เพิ่มเติมให้ครับ
iftop -i ethX  ใช้ดู traffic ในวงขา Lan ครับ อันนี้จะมี IP ของในร้านให้เห็นครับว่าเค้าใช้งาน host ไหนอยู่
iftop -i ppp10X ใช้ดู traffic ในวงขา WAN ครับ อันนี้จะมี IP หรือ host ที่เรามีการใช้งาน Internet ให้เห็น
(X คือเลขของสายที่เราต้องการดู)


=============


iptraf
==============
ping -c 5 -I ppp101 203.144.244.1
=======================


 tail -f /var/log/messages
================







root@ubuntu:/# ls /etc/ppp/peers
dsl-link1  dsl-link2  dsl-link3  dsl-link4  provider
=====================