วันเสาร์ที่ 5 เมษายน พ.ศ. 2551

ดรีมบ็อกซ์วีพีเอ็น = foxvpn

foxvpn เป็นโปรแกรม vpn ที่ทำงานได้ในเครื่องดรีมบ็อกซ์ โดยมีคุณสมบัติเด่นๆ คือ


  1. ใช้งานง่าย ด้วยคอนฟิคที่เรียกว่า zero configuration คือไม่ต้องเซ็ทอะไรเลย ก็สามารถทำงานได้
  2. ไม่ต้องโหลด certificate ไม่ต้องทำ user/password พิเศษ
  3. ขนาดเล็ก มีขนาดพื้นฐานเพียง 200kb
  4. เสถียร จากการทดสอบก็ไม่พบปัญหาเรื่องความเสถียรของตัว vpn
  5. ปลอดภัย ด้วยการเข้ารหัสแบบ blowfish

foxvpn สามารถทำงานได้ทั้งในโหมดเซิฟเวอร์และโหมดไคลเอนท์ในตัวเดียวกัน ซึ่งรูปแบบการทำงานพื้นฐานได้แก่

แบบพื้นฐาน 1 เซิฟเวอร์ : 1 ไคลเอนท์

แบบมัลติไคลเอนท์ 1 เซิฟเวอร์ : หลายไคลเอนท์


แบบมัลติเซิฟเวอร์ 1 ไคลเอนท์ : หลายเซิฟเวอร์

แบบผสม หลายเซิฟเวอร์ : หลายไคลเอนท์



เราสามารถประยุกต์ใช้ foxvpn ได้กับทุกแคม (CAM) ทั้งแคมในตระกูล ไคล์เอนท์/เซิฟเวอร์ เช่นพวก newcamd, mgcamd, cccam และตระกูล จุด-ต่อ-จุด (peer-to-peer) เช่น จีบ็อกซ์ (Gbox) เนื่องจากเราสามารถเซ็ทตัว foxvpn ให้ทำงานได้หลายรูปแบบ นอกจากนั้นเรายังสามารถจำลองการทำงานของแคมตระกูล ไคล์เอนท์/เซิฟเวอร์ (โดยเฉพาะ cccam) ให้ทำงานเลียนแบบแคมตระกูล จุด-ต่อ-จุด ได้ ซึ่งจุดเด่นของการทำงานในแบบ จุด-ต่อ-จุด อธิบายให้เข้าใจง่ายๆ คือ เสียบการ์ดที่เครื่องไหนก็ได้ก็จะสามารถแชร์ให้เครื่องในกลุ่มได้ทั้งกลุ่ม

คำถามถามบ่อยเกี่ยวกับ foxvpn

Q: foxvpn ฟรีหรือไม่ ?
A: ฟรี! เมื่อใช้กับเครื่องดรีมบอกซ์ 2 เครื่อง โดยโปรแกรมจะทำงานใน โหมดทดลอง ซึ่งการทำงานเทียบเท่าโหมดทำงานจริง เพียงแต่จะไม่สามารถเชื่อมต่อได้มากกว่า 1 เครื่อง

Q: มี source code แจกไหม?
A: ไม่มีแจกครับ foxvpn พัฒนาบางส่วนจากพื้นฐานของ Open Source และบางส่วนเขียนขึ้นใหม่ หากท่านต้องการพัฒนา vpn เองสามารถค้นคว้าและหาได้จากในอินเตอร์เน็ต

Q: หากต้องการลงทะเบียน foxvpn เพื่อใช้เชื่อมต่อมากกว่า 2 เครื่อง ต้องทำอย่างไร ราคาแพงไหม?
A: การลงทะเบียนโดยการส่ง MAC Address ของดรีมบ็อกซ์ไปยัง dreamf0x@hotmail.com ซึ่งจะมีค่าลงทะเบียน 300 บาทต่อเครื่อง

Q: ระบุ DNS หรือ IP ของเครื่องที่ทำเป็นเซิฟเวอร์อย่างไร?
A: foxvpn สนับสนุน 3 รูปแบบคือ ระบุเป็น IP Address โดยตรง ระบุเป็น DNS โดยตรง และระบุเป็น DNS แบบเข้ารหัส เช่น

M: { 10.8.0.1 { C0A80213 }} <- 203.192.16.54
M: { 10.8.0.1 { C0A80213 }} <- fox.server.com
M: { 10.8.0.1 { C0A80213 }} <- S$354kja)lkNl;

Q: foxvpn มีประโยชน์อะไรอีกบ้าง?
A: นอกจากสร้างเครือข่ายเสมือนซึ่งทำให้ตัดปัญหาเรื่องการอ้างชื่อ DNS และฟอร์เวิร์ดพอร์ท (สำหรับ Gbox) แล้ว จุดเด่นอีกอย่างคือ เราสามารถทำรีโมท (remote) กลับไปที่เครื่องไคล์เอนท์ได้ทุกตัวและทุกแอพพลิเคชั่น (เช่น remote กลับไปทาง TELNET เพื่อตรวจสอบการทำงาน ทาง FTP เพื่อติดตั้งหรืออัพเดทโปรแกรม ทาง HTTP เพื่อควบคุมผ่าน Enigma Web Interface) จึงเป็นการง่ายสำหรับควบคุมและดูและระบบทั้งหมด

Q: foxvpn มีเวอร์ชั่นที่ทำงานใน x86 ไหม?
A: มี แบบมีเงื่อนไข คือต้องลงทะเบียนดรีมบ็อกซ์มากกว่า 10 เครื่องขึ้นไป เนื่องตัว foxvpn.x86 ทำงานใน PC จึงเหมาะที่จะทำเป็นตัวเซิฟเวอร์หลัก foxvpn.x86 สามารถทำงานได้เฉพาะใน linux เท่านั้น

บทความที่เกี่ยวข้อง สร้างเครือข่ายเสมือนส่วนตัวให้กับดรีมบ็อกซ์

ดรีมบ็อกซ์วีพีเอ็น Dreambox VPN ภาคประถม

เราจะลองมาดูองค์ประกอบและการทำงานจริงๆ ของเครือข่ายเสมือนส่วนตัวกันบ้าง โดยเริ่มจากจำลองการทำงานในวงแลนกันก่อน



สมมุติว่ามีดรีมบ็อกซ์ 2 ตัวอยู่ในวงแลน โดยตัวแรกทำหน้าที่เป็นโฮส (โดยมีไอพีในวงแลนเป็น 192.168.0.11) และอีกตัวทำหน้าที่เป็นไคลเอนท์ (โดยมีไอพีในวงแลนเป็น 192.168.0.12) โดยหลักการที่ต้องจำให้ขึ้นใจคือ "อุปกรณ์ที่ทำหน้าที่เป็นโฮส จะต้องมีชื่อ(หรือไอพี)และต้องเปิดพอร์ทไว้รอเสมอ" เพื่อเป็นที่อยู่ที่ทำให้อุปกรณ์ที่ทำหน้าที่เป็นไคลเอนท์ติดต่อได้

การทำงานแบบทีละขั้นตอน อธิบายได้ดังนี้

  1. ไคลเอนท์ เรียกขอทำการเชื่อมต่อไปยัง โฮส โดยเริ่มจากเปิดพอร์ทขาออกที่เครื่องตนเอง ซึ่งพอร์ทขาออกจะเป็นพอร์ทแบบสุ่ม(ได้หมายเลขพอร์ทที่ว่างอยู่ สมมุติว่าได้ 5326) แล้วทำการเรียกไปยัง ไอพี(หรือชื่อ) 192.168.0.11 และพอร์ท 1194 ของเครื่องโฮส
  2. โฮส ทำการเปิดพอร์ทขาเข้า 1194 ไว้รอ เมื่อได้รับการติดต่อจากไคลเอนท์แล้วหากจะมีการสื่อสารข้อมูลใดๆ ก็กระทำผ่านเส้นทางสื่อสารเดิมที่ได้สร้างไว้แล้ว (หมายถึงหากต้องการคุยกับไคลเอนท์ ก็จะส่งข้อมูลจาก IP:PORT 192.168.0.11:1194 กลับไปยัง IP:PORT 192.168.0.12:5326 ของไคลเอนท์)
  3. vpn จะทำหน้าที่จำลองเส้นทางเชื่อมต่อระหว่าง โฮส และ ไคลเอนท์ โดยใช้ไอพีส่วนตัว 10.8.0.1 สำหรับตัวโฮส และ 10.8.0.2 สำหรับตัวไคลเอนท์ และจะเปิดพอร์ททุกพอร์ทของทั้งสองฝั่งไว้ให้สามารถใช้งานได้ (ถ้าไม่มี vpn เมื่อสร้างเส้นทางสื่อสารแล้ว จะสามารถใช้ได้เฉพาะพอร์ทขาเข้า 1194 ของฝั่งโฮส และพอร์ทขาออก 5326 ของฝั่งไคลเอนท์) ตัวอย่างเช่น หากโฮส 10.8.0.1 ต้องการรีโมท เทลเน็ต กลับมายังเครื่องไคลเอนท์ 10.8.0.2 ก็สามารถเรียกกลับมาที่เครื่องไคลเอนท์ที่พอร์ท 23 ได้เลย โดยไม่ต้องสร้างเส้นทางเชื่อมต่อและหรือเปิดพอร์ท 23 ทางไคลเอนท์อีก โดยทุกอย่างจะกระทำผ่านท่อ vpn ที่ได้สร้างไว้แล้วก่อนหน้า

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


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


การทำงานแบบทีละขั้นตอน อธิบายได้ดังนี้

  1. ไคลเอนท์ เรียกขอทำการเชื่อมต่อไปยัง โฮส โดยเริ่มจากเปิดพอร์ทขาออกที่เครื่องตนเอง ซึ่งพอร์ทขาออกจะเป็นพอร์ทแบบสุ่ม(ได้หมายเลขพอร์ทที่ว่างอยู่ สมมุติว่าได้ 5326) แล้วทำการเรียกไปยังเราท์เตอร์ เราท์เตอร์ก็จะทำการสุ่มพอร์ทขาออกของตนเองไว้ (สมมุติว่าได้ 8316) พร้อมๆ กันนั้นก็จำไว้ว่าดรีมบ็อกซ์ได้เรียกออกมาโดยใช้พอร์ทอะไร โดยจะเก็บรายละเอียดเหล่านี้ไว้ในตารางเราท์เตอร์ (router table) แล้วทำการเรียกไปยัง s1.foxs.com (220.132.54.7) ที่พอร์ท 1194
  2. โฮส จะต้องทำการฟอร์เวิร์ดพอร์ท 1194 ของเราท์เตอร์ไว้รอ ซึ่งเมื่อเราท์เตอร์ได้รับการติดต่อจากไคลเอนท์ทางพอร์ทขาเข้า 1194 แล้วก็จะสุ่มพอร์ทขาออกของเราท์เตอร์ (สมมุติว่าได้ 15321) แล้วทำการส่งผ่านการติดต่อเหล่านั้นไปยังโฮส 192.168.0.11 ที่พอร์ท 1194 และก็เช่นกัน เราท์เตอร์ก็จะทำการเก็บรายละเอียดเหล่านี้ไว้ในตารางเราท์เตอร์ (router table) แล้วหากจะมีการสื่อสารข้อมูลใดๆ ก็กระทำผ่านเส้นทางสื่อสารเดิมที่ได้สร้างไว้แล้ว
  3. vpn จะทำหน้าที่จำลองเส้นทางเชื่อมต่อระหว่าง โฮส และ ไคลเอนท์ โดยใช้ไอพีส่วนตัว 10.8.0.1 สำหรับตัวโฮส และ 10.8.0.2 สำหรับตัวไคลเอนท์ และจะเปิดพอร์ททุกพอร์ทของทั้งสองฝั่งไว้ให้สามารถใช้งานได้ (ถ้าไม่มี vpn เมื่อสร้างเส้นทางสื่อสารแล้ว จะไม่สามารถสื่อสารในพอร์ทอื่นได้เนื่องจากมีเราท์เตอร์คั่นกลาง) ตัวอย่างเช่น หากโฮส 10.8.0.1 ต้องการรีโมท เทลเน็ต กลับมายังเครื่องไคลเอนท์ 10.8.0.2 ก็สามารถเรียกกลับมาที่เครื่องไคลเอนท์ที่พอร์ท 23 ได้เลย โดยไม่ต้องสร้างเส้นทางเชื่อมต่อและหรือเปิดพอร์ท 23 ทางไคลเอนท์อีก โดยทุกอย่างจะกระทำผ่านท่อ vpn ที่ได้สร้างไว้แล้วก่อนหน้า ซึ่งจะเห็นว่าโดย vpn ก็เสมือนว่าไม่มีเราท์เตอร์อยู่ในเส้นทางการสื่อสาร

บทความที่เกี่ยวข้อง สร้างเครือข่ายเสมือนส่วนตัวให้กับดรีมบ็อกซ์

วันศุกร์ที่ 4 เมษายน พ.ศ. 2551

ดรีมบ็อกซ์วีพีเอ็น Dreambox VPN ภาคอนุบาล

วีพีเอ็น vpn คำนี้เริ่มฮิตมากขึ้นทุกวัน เราจะลองมาดูกันซิว่ามันคืออะไร แล้วเมื่อนำมันมาประยุกต์ใช้กับดรีมบ็อกซ์แล้วมันดียังไง

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

PC [192.168.0.1] <----> Dreambox [192.168.0.2]

ในวงแลน เราสามารถกำหนดหมายเลขไอพีของอุปกรณ์ได้ตามใจเรา (โดยต้องเลือกใช้หมายเลขไอพีในกลุ่มของหมายเลขไอพีส่วนตัว private ip เท่านั้น กลุ่มนี้ได้แก่กลุ่ม 192.x.x.x และ 10.x.x.x) เมื่ออุปกรณ์ไอพีทุกตัวอยู่ในกลุ่มเดียวกัน ก็จะสามารถติดต่อสื่อสารกันได้โดยไม่มีข้อจำกัดเรื่องพอร์ท (แล้วพอร์ทมันคืออะไรหว่า?) ลองนึกภาพง่ายๆ ว่า เราอาศัยอยู่ในหมู่บ้านจัดสรร แต่ละคนก็อาศัยอยู่ในบ้านของตนเองเวลาเราอยากคุยกับเพื่อนบ้านคนไหน เราก็เดินตามเส้นทางไปพอถึงหน้าบ้านก็กดกริ่งและถ้ามีคนอยู่ เขาก็จะเชิญเราไปนั่งคุยที่ห้องรับแขก เราก็สามารถนั่งคุยกับเขาได้ที่ห้องรับแขก ซึ่ง บ้านเลขที่ก็เปรียบเหมือน IP address และ ห้องรับแขก ก็เปรียบเหมือนพอร์ท (port) นั่นเอง ซึ่งหากเราไปถึงบ้านแล้วแต่เขาไม่อนุญาติให้เข้าห้องรับแขก เราก็จะไม่มีสิทธิคุยกับเจ้าของบ้านนั้น (ลองจิตนาการเพิ่มว่า มีห้องครัว ห้องน้ำ ห้องนอนในแต่ละบ้านอีก แต่ละห้องก็คือแต่ละพอร์ท ซึ่งเจ้าของบ้านอาจจะเปิดบางห้องให้เราเข้าได้ แต่บางห้องก็ไม่ได้เปิดให้เราเข้า)

ทีนี้ลองมาสมมุติว่า เพื่อนบ้านเราต้องการเชิญเราไปงานเลี้ยงขึ้นบ้านใหม่ เขาก็จะส่งจดหมายเชิญเราให้เราไปงานเลี้ยงที่บ้านของเขา (ระบุบ้านเลขที่) และบริเวณที่จัดงานเลี้ยงที่ห้องรับแขก (ระบุพอร์ท) เราก็เดินออกไปตามทางเมื่อถึงบ้านของเขาก็เข้าไปที่ห้องรับแขกได้เลยโดยไม่ต้องขออนุญาตอีกเพราะเจ้าของบ้านได้เปิดห้องรับแขกไว้รอแล้ว เราก็เรียก เจ้าของบ้านที่เชิญเราไปงานนี้ว่า โฮส (host) คือเจ้าบ้าน และเรียกตัวเราว่า เกส (guest) หรือ ไคลเอนท์ (client) คือแขก ดังนั้น หากเรากลับมาดูที่ภาพของดรีมบ็อกซ์ เมื่อเราเอาดรีมบ็อกซ์ 2 ตัวไว้ในวงแลนเดียวกัน แล้วให้ตัวหนึ่งทำหน้าที่เป็นโฮส อีกตัวหนึ่งทำหน้าที่เป็นเกส ก็จะสามารถติดต่อสื่อสารคุยกันได้

นอกวงแลนล่ะ? ลองมาจินตนาการกันต่อว่า เราก็มีเพื่อนอยู่หมู่บ้านข้างๆ (ไม่ต้องสมมุติไปไกลหรอก เปลืองค่าน้ำมัน) เขาเชิญเราไปงานเลี้ยงสุนัขที่บ้านเกิดลูก เมื่อเราได้รับจดหมายทราบถึงบ้านเลขที่และบริเวณที่จัดงานสนามหลังบ้านของเขาแล้ว เราก็ปั่นจักรยานจากบ้านเราผ่านออกไปทางประตูหมู่บ้าน ผ่านป้อมยามหมู่บ้านเรา วิ่งออกถนนใหญ่ ไปถึงป้อมยามหมู่บ้านเพื่อนเรา ..... เมื่อมาถึงป้อมยามแล้วตรงนี้จะเกิดอะไรขึ้น? สิ่งที่เป็นไปได้มี 2 อย่างคือ อย่างแรก ยามไม่ให้ผ่านเพราะเพื่อนเจ้ากรรมไม่ได้แจ้งให้ยามทราบไว้ อย่างสอง ยามให้ผ่านเพราะเพื่อนเราได้แจ้งให้ยามทราบไว้แล้วและให้เราปั่นจักรยานไปที่บ้านของเพื่อน(เท่านั้น ห้ามออกนอกเส้นทาง) เมื่อเราไปถึงบ้านเพื่อนก็ต้องไปรอที่สนามหลังบ้าน(ก็เปิดพอร์ทนี้รอไว้นี่หว่า) ห้ามเข้าบ้านโดยเด็ดขาด เราก็ยังคงเรียก บ้านเพื่อนว่าเป็น โฮส เรียกตัวเราว่าเป็น ไคลเอนท์ แต่สิ่งที่เพิ่มขึ้นมาคือ ป้อมยาม ซึ่งเราจะเรียกว่าเป็น ไฟล์วอร์ (firewall) เรียกถนนใหญ่ ว่าเส้นทางแวน (WAN) และเรียกการแจ้งไว้ที่ป้อมยามว่าถ้ามีคนมาหาให้เข้าไปได้ที่บ้านเลขที่ xxx ที่บริเวณสนามหลังบ้าน ว่า การเปิดพอร์ท (Port forwarding) นอกจากนั้นยังจะสังเกตุเห็นอีกว่า บ้านเลขที่ของหมู่บ้านเราและบ้านเลขที่ของหมู่บ้านเพื่อนต่างกัน (เช่นเราอยู่หมู่บ้าน A เขตคลองเตย เพื่อนอยู่หมู่บ้าน B เขตวัฒนา) ซึ่งแต่ละหมู่บ้านก็จะมีที่อยู่ต่างกัน เราจะเรียกตรงนี้ว่า ที่อยู่แวน (WAN Address) แต่มักจะเรียกกันทับศัพท์ชาวเน็ตไปว่า Internet IP Address ซึ่งหากเปลี่ยนเป็น ดรีมบ็อกซ์ 2 ตัว ก็จะมีลักษณะการทำงานเช่นเดียวกัน โดยเราจะเห็นว่ามีความยุ่งยากเกิดขึ้นเพิ่มมา 2 ประการ อย่างแรกคือเรื่องของเส้นทางแวน (ในกรณีของเราคือ ADSL หรือเรามักเข้าใจและเรียกกันว่า อินเตอร์เน็ต Internet) อาจจะเดินทางได้สะดวกหรือไม่สะดวกขึ้นอยู่กับทราฟฟิค(ความหนาแน่นของการจราจร) และขนาดของถนน(ซึ่งเป็นตัวจำกัดความเร็วสูงสุดของเรา) และอย่างสำคัญที่สองคือด่านของ ไฟล์วอร์ (ซึ่งเป็นส่วนหนึ่งของ เราท์เตอร์ router) ที่เราต้องทำการฟอร์เวิร์ดพอร์ทไว้รอ

[ บ้านเรา 192.168.0.2] --> [ ป้อมยามหมู่บ้าน A 58.67.35.15] ~~~~> [ป้อมยามหมู่บ้าน B 202.192.35.5] --> [บ้านเพื่อน 10.0.8.5]

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

[ บ้านเรา 192.168.0.2] --> ~~ เครือข่ายเสมือน vpn ~~~~> [บ้านเพื่อน 192.168.0.5]

ลองอ่านทบทวนและทำความเข้าใจ ภาคอนุบาลนี้กันก่อนน่ะครับ เดี๋ยวเข้าใจแล้วค่อยไปต่อภาคประถม