การทำเราท์เตอร์ราคาถูกให้รองรับ 3G

by lew
30 November 2010 - 18:45

พื้นที่ให้บริการ 3G ในบ้านเราแม้จะยังจำกัดค่อนข้างมาก แต่ก็ยังมีประโยชน์กับคนพื้นที่ให้บริการค่อนข้างมาก เช่นคอนโดหรือหอพักที่ไม่อาจติดตั้งสายโทรศัพท์ด้วยตัวเองได้ โดยทั่วไปแล้วทางเลือกที่ง่ายที่สุดก็คือการซื้อ USB dongle มาใช้งานกับคอมพิวเตอร์ในบ้าน แต่ก็จะจำกัดอยูกับการใช้งานกับคอมพิวเตอร์เครื่องเดียวเท่านั้น

แนะนำการ์ด 3G และ usb_modeswitch

ถ้าเราสังเกตจะพบว่า 3G dongle รุ่นใหม่ๆ นั้นล้วนมีไดรเวอร์มาตัวโดยไม่ต้องแถมซีดีเพิ่มเติม ที่จริงแล้ว dongle เหล่านี้สามารถทำงานเสมือนเป็นสองอุปกรณ์ภายใต้ USB พอร์ตเดียว นั่นคือมีเสียบครั้งแรกเครื่องจะมองเห็นเป็นเพียง usb-storage (หรือแฟลชไดร์ฟ) เท่านั้น เพื่อให้เราติดตั้งซอฟต์แวร์ที่มากับตัวการ์ด เมื่อติดตั้งเสร็จแล้ว ตัวการ์ดเหล่านี้จะยิงคำสั่งพิเศษเพื่อเปิดการทำงานส่วนโมเด็มขึ้นมา เทคโนโลยีนี้เรียกว่า ZeroCD โดยคำสั่งนี้แม้จะใช้งานใกล้เคียงกัน การ์ดแต่ละรุ่นกลับใช้คำสั่งต่างกันไปจนไม่สามารถใช้งานไดรเวอร์ร่วมกันได้ นี่เป็นเหตุผลที่เรามักไม่สามารถดาวน์โหลดซอฟต์แวร์สำหรับการ์ดรุ่นอื่นๆ มาใช้งานร่วมกันได้

ในฝั่งลินุกซ์นั้น เริ่มมีคนสังเกตความเหมือนกันนี้และเขียนซอฟต์แวร์ที่เปิดการทำงานในส่วนของโมเด็มขึ้นมาในชื่อว่า usb_modeswitch (manpage) เป็นซอฟต์แวร์สำหรับเปิดการทำงานนี้โดยตรง และรวมรวมฐานข้อมูลของการ์ดรุ่นต่างๆ ว่าต้องการคำสั่งใดเพื่อเปิดการทำงานโมเด็มไว้บ้าง โดยจะอ้างอิงจากหมายเลขประจำอุปกรณ์ USB เช่นการ์ด ZTE 627 จะมีคำสั่งดังนี้

########################################################
# ZTE devices

DefaultVendor=  0x19d2
DefaultProduct= 0x2000

TargetVendor=   0x19d2
TargetProductList="0001,0002,0015,0016,0017,0031,0037,0052,0055,0063,0064,0066,0091,0108,0117,0128"

MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
MessageContent2="5553424312345679000000000000061b000000020000000000000000000000"
MessageContent3="55534243123456702000000080000c85010101180101010101000000000000"

NeedResponse=1

CheckSuccess=20

OpenWRT

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

ในส่วนของการติดตั้งขอข้ามไป โดยอาจอ่านวิธีการติดตั้ง (แต่ละรุ่นไม่เหมือนกัน) ได้จากหน้าฮาร์ดแวร์ที่รองรับเอง หรือทาง OpenTLE มีบทความเขียนไว้

ใน OpenWRT เราสามารถติดตั้ง usb_modeswitch ได้ทันทีด้วยคำสั่ง

opkg update
opkg install usb-modeswitch

ในลินุกซ์รุ่นเต็มนั้น เราอาจติดตั้ง usb-modeswitch-data เพิ่มอีกหนึ่งแพ็กเกจเพื่อให้รองรับการ์ดจำนวนมากโดยไม่ต้องคอนฟิกเอง แต่ใน OpenWRT นั้นเราต้องเข้าไปแก้ไฟล์ /etc/usb-modeswitch.conf ด้วยตัวเอง เช่นในการ Huawei E158 หรือในไทยชื่อว่า DTAC Flip 158 อาจจะใช้คอนฟิกดังนี้

DefaultVendor= 0x12d1
DefaultProduct=0x1446

TargetVendor=  0x12d1
TargetProductList="1001,1406,140b,140c,1412,141b,14ac"

CheckSuccess=20

MessageContent="55534243123456780000000000000011060000000000000000000000000000"

เมื่อติดตั้งและคอนฟิกแล้วก็จะทดลองเปิดการทำงานโมเด็มได้ โดยสั่ง usb_modeswitch จะได้ผลดังนี้

root@OpenWrt:~# usb_modeswitch 

Looking for target devices ...
 No devices in target mode or class found
Looking for default devices ...
 Found default devices (1)
Accessing device 002 on bus 001 ...
Using endpoints 0x01 (out) and 0x81 (in)
Inquiring device details; driver will be detached ...
Looking for active driver ...
 OK, driver found ("usb-storage")
 OK, driver "usb-storage" detached

SCSI inquiry data (for identification)
-------------------------
  Vendor String: HUAWEI  
   Model String: Mass Storage    
Revision String: 2.31
-------------------------

USB description data (for identification)
-------------------------
Manufacturer: HUAWEI Technology
     Product: HUAWEI Mobile
  Serial No.: not provided
-------------------------
Setting up communication with interface 0 ...
Trying to send the message to endpoint 0x01 ...
 OK, message successfully sent
 Device is gone, skipping any further commands

Checking for mode switch (max. 20 times, once per second) ...
 Original device is gone already, not checking
 Searching for target devices ...
 Searching for target devices ...
 Searching for target devices ...
 Searching for target devices ...
 Searching for target devices ...
 Searching for target devices ...
 Found correct target device

Mode switch succeeded. Bye.

ถึงตอนนี้แอร์การ์ดที่เสียบอยู่กับเราท์เตอร์ก็พร้อมจะทำงานเป็นโมเด็มแล้ว

หลังจากนี้เราต้องคอนฟิกตัว interface ให้ทำงานได้อย่างถูกต้อง โดยเพิ่มอินเทอร์เฟชใหม่ในหน้า Network > Interfaces

หลังจากนั้นเลือกเป็นโหมด UTMS/3G พร้อมใส่ค่า APN ให้เรียบร้อยตามผู้ให้บริการที่เราใช้งาน

เนื่องจากหน้าคอนฟิกของ OpenWRT นั้นไม่สมบูรณ์ โดยขาดหมายเลขโทรศัพท์ที่ใช้โทรไปยังผู้ให้บริการไป และไม่มีหน้าให้คอนฟิก ดังนั้นต้องเข้าทางคอนโซลเพื่อคอนฟิกโดยตรง โดยแก้ที่ไฟล์ /etc/chatscripts/3g.chat จะมีบรรทัดระบุหมายเลขอยู่เป็น OK "ATD *99***1#" (หมายเลขอาจจะไม่ตรงนี้) ให้เราเป็นเป็นหมายเลขตามผู้ให้บริการของเราเอง

ถึงตอนนี้หาเราคอนฟิกทั้งหมดถูกต้อง เราท์เตอร์ของเราน่าจะใช้อินเทอร์เน็ตได้แล้ว อาจจะลองถอดสายแลนแล้วรันคำสั่ง opkg update อีกครั้งเพื่อดูว่าสามารถดึงไฟล์จากอินเทอร์เน็ตได้หรือไม่

กรณีที่เราเลือกโซนในหน้าคอนฟิกเอาไว้เป็น wan อาจจะไม่ต้องทำอะไรเพิ่มเติม แต่กรณีของผมมีการแก้ zone ของการ์ด 3G ทำให้เราท์เตอร์ไม่ยอม forward ข้อมูล อาจจะต้องเข้าไปแก้ในไฟล์ /etc/config/network ในส่วนของ forward เพื่อแก้ทุกโซนให้ส่งต่อไปยังการ์ด 3G

สุดท้ายเราอาจจะต้องการให้เราท์เตอร์ต่อ 3G เองทุกครั้งที่เปิดเครื่อง เราอาจจะเพิ่มไฟล์ /etc/init.d/gsm เข้ามาดังนี้

#!/bin/sh /etc/rc.common
# Written by Simon Josefsson 2009-03-05.  Released into the public domain.

START=90
start() {
        usb_modeswitch
        ifup gsm0
}

เท่านี้เพียงเสียบการ์ดก่อนเปิดเครื่อง เราเตอร์ก็จะทำงานทุกอย่างต่อไปเอง

ส่งท้าย

เนื่องจากผมเองมีการ์ด 3G อยู่ก่อนแล้ว ต้นทุนของการทำเราท์เตอร์ 3G นี้ถึงนับว่าต่ำมาก โดยตัวเราท์เตอร์อย่างเดียวที่ผมซื้อรุ่นที่แรงที่สุดที่มีในตลาดคือ Buffalo WZR-HP-G300NH นั้นสามารถหาซื้อได้ในราคาประมาณ 2800 บาท โดยที่ความสามารถของมันสามารถทำได้เต็มที่กว่าเราท์เตอร์สำเร็จรูปอย่างชัดเจน เช่นในงาน Blognone's Contributors Party เองก็มีการเชื่อมต่อพร้อมกันประมาณ 14 คนได้โดยไม่มีปัญหา แต่เราท์เตอร์ที่รองรับ OpenWRT และมีพอร์ต USB อีกจำนวนมากที่ราคาถูกกว่านี้ก็น่าจะสามารถทำงานได้เช่นเดียวกัน ทางออกนี้อาจจะเหมาะสมเมื่อเราต้องการใช้งานกับจำนวนหลายๆ คนเพราะเราท์เตอร์ 3G ทั่วไปมักรองรับอุปกรณ์ไม่เกิน 5 ชิ้น รวมถึงการทำโครงงานวิจัยการบันทึกข้อมูลจากระยะไกลแล้วส่งต่อข้อมูลผ่านเครือข่ายไร้สายไปได้อีกด้วย

Blognone Jobs Premium