يوليو 11، 2011

الوصل بشبكة الأنترنت على نظام OpenBSD و FreeBSD: التشبيك بمودم Huawei e153 3G

في هذا الجزء سنرى طريقة الربط بشبكة الإنترنت بواسطة Huawei E153 و هو مودم من الجيل الثالث (USB 3G Modem) على نظام OpenBSD و نظام FreeBSD.

على OpenBSD 4.9

1. نصل المودم على منفذ usb ثم ننفذ الأمر التالي
dmesg | grep -i huawei
لعرض مخرجات و رسائل النظام المتعلقة بإسم مصنع المودم. النتيحة غالبا كالتالي:

umsm0 at uhub0 port 7 configuration 1 interface 0 "HUAWEI Technology HUAWEI Mobile" rev 2.00/0.00 addr 2
umsm1 at uhub0 port 7 configuration 1 interface 1 "HUAWEI Technologies HUAWEI Mobile E161" rev 2.00/0.00 addr 2
umsm0 at uhub0 port 7 configuration 1 interface 0 "HUAWEI Technology HUAWEI Mobile" rev 2.00/0.00 addr 2
umsm1 at uhub0 port 7 configuration 1 interface 1 "HUAWEI Technology HUAWEI Mobile" rev 2.00/0.00 addr 2
umsm2 at uhub0 port 7 configuration 1 interface 2 "HUAWEI Technology HUAWEI Mobile" rev 2.00/0.00 addr 2
umsm3 at uhub0 port 7 configuration 1 interface 3 "HUAWEI Technology HUAWEI Mobile" rev 2.00/0.00 addr 2
umsm4 at uhub0 port 7 configuration 1 interface 4 "HUAWEI Technology HUAWEI Mobile" rev 2.00/0.00 addr 2
umsm5 at uhub0 port 7 configuration 1 interface 5 "HUAWEI Technology HUAWEI Mobile" rev 2.00/0.00 addr 2

الأمر usbdevs -d يعرض مخرجات مشابهة.

في الحالتين يتضح أن التعريف المستخدم هو umsm. بإلقاء نظرة على صفحة التوثيق الخاصة به يمكن أن نخلص إلى أنه غالبا مدعوم.

2. الآن سنشرع في إعداد الإتصال:

ننشئ المجلد الذي سيضم ملفات الإعداد
mkdir /etc/ppp/peers

بعدها، باستخدام المحرر النصي vi أو nano أو غيره سننشئ الملف /etc/ppp/peers/hwe153
nano -w /etc/ppp/peers/hwe153

و سنكتب بذاخلة ما يلي:
/dev/ttyU0
debug
921600
noauth
noipdefault
novj
ipcp-restart 10
ipcp-accept-local
ipcp-accept-remote
defaultroute
0.0.0.0:10.64.64.64
connect '/usr/sbin/chat -v -f /etc/ppp/peers/hwe153.chat; echo "nameserver 212.217.0.1" > /etc/resolv.conf'

لاحظ جيدا أني أضفت الأمر echo "nameserver 212.217.0.1" > /etc/resolv.conf' إلى الجزء الأخير من سطر الأمر connect.

أضفته لأن فرز و حل العنواين بشكل افتراضي يتكفل به مزود الخدمة (في حالتي إتصالات المغرب) أو خادم google (8.8.8.8 | 8.8.4.4) أو opendns (208.67.222.222 | 208.67.220.220) مثلا، و على أداة pppd أن تتوصل إلى ذلك تلقائيا و تقوم بتلك الخطوة عني لكن لا بأس.

ملف الإعداد هذا له علاقة بأداة pppd المكلفة بربط الإتصال بالشبكة الأنترنت بواسطة المودمات على إختلاف أنواعها. التوثيف يشرح الأداة جيدا.

أيضا لاحظ أني إستخدمت منفد الإتصال /dev/ttyU0 لأني أعلم كما سبق بأنه المتفذ المناسب. لمعرفت المنافد المتاحة نفد:
ls -l /dev/ttyU*
النتيجة في الغالب ستكون:
crw-r-----  1 uucp  dialer   66,   0 Jul  5 17:24 /dev/ttyU0
crw-rw----  1 uucp  dialer   66,   1 Jul  3 23:41 /dev/ttyU1
crw-rw----  1 uucp  dialer   66,   2 Jul  3 23:41 /dev/ttyU2
crw-rw----  1 uucp  dialer   66,   3 Jul  3 23:42 /dev/ttyU3


بعد هذا سننشئ الملف الذي يحتوي على صيغة الربط مع المزود
nano -w /etc/ppp/peers/hwe153.chat

و فيه سنضع التالي:
ABORT "BUSY"
ABORT "NO CARRIER"
ABORT "ERROR"
ABORT "VOICE"
ABORT "NO DIALTONE"
ABORT "NO ANSWER"
ABORT "Username/Password Incorrect"
TIMEOUT 45
SAY "Calling iam3g..\n"
"" "ATZ"
OK 'AT+CGDCONT=1,"IP","www.iamgprs2.ma"'
OK "ATDT*99#"
CONNECT \d\c

محتوى هذا الملف إلى حد كبير نمطي بمعنى لم أغير فيه سوى نقطة الوصل APN الخاصة بمزود الخدمة (في حالتي استخدمت www.iamgprs2.ma)

الصيغة هي نفسها المستخدمة على غنو/لينكس سابقا.


3. الآن حان وقت الربط بالشبكة. افتح نافدتي سطر الأوامر.

الأولى نفذ عليها أحد الأمرين لتتبع مخرجات محاولات الوصل:
tail -f /var/log/messages
أو
tail -f /var/log/daemon

و النافدة الثانية نفد عليها:
ifconfig ppp0 create
pppd call hwe153

بعد قليل ستلاحظ ظهور مخرجات الربط و هي شبيهة بما يلي في حالة النجاح:
Jul  5 15:49:08 pufy pppd[12300]: pppd 2.3.5 started by root, uid 0
Jul  5 15:49:11 pufy pppd[12300]: Serial connection established.
Jul  5 15:49:12 pufy pppd[12300]: Using interface ppp0
Jul  5 15:49:12 pufy pppd[12300]: Connect: ppp0 <--> /dev/ttyU0
Jul  5 15:49:15 pufy pppd[12300]: local  IP address 10.204.159.236
Jul  5 15:49:15 pufy pppd[12300]: remote IP address 10.64.64.64

ثم لنتأكد من خروجنا إلى شبكة الأنترنت إما جرب
ping -c 3 google.com
أو استخدم المتصفح.

في حالة الفشل قد نتوصل برسالة:
Jul  5 18:09:17 pufy pppd[12300]: Modem hangup
Jul  5 18:09:17 pufy pppd[12300]: Connection terminated.
أو
Jul  5 18:09:17 pufy pppd[12300]: Modem not responding.


من الآن فصاعدا للوصل بشبكة الأنترنت نفذ :
ifconfig ppp0 create
pppd call hwe153

أو فقط نفذ ما يلي في انقطاع مفاجئ للخط:
pppd call hwe153

في حالة تعنت المودم و إصراره على عدم الربط حينها نفذ:
pkill -9 pppd
ifconfig ppp0 destroy

ifconfig ppp0 create
pppd call hwe153
دون أن تنسئ إلقاء نظرة على مخرجات الربط لتعرف ما يجري كما وضحت أعلاه.


ماذا عن الربط التلقائي عند تشغيل/إقلاع النظام؟
ممكن رغم عدم نجاحه دائما معي على الجهاز الذي استخدمت، لكن إليك الطريقة:

ننشئ ملف /etc/hostname.ppp0
nano -w /etc/hostname.ppp0

و نضع بذاخله ما يلي:
!/usr/bin/pkill -9 pppd
!/sbin/ifconfig ppp0 destroy
create
!/usr/sbin/pppd call hwe153

بعدها عند إقلاع النظام إما سيتم الربط التلقائي إن كان المودم موصولا حينها، أو تطلب الربط بعد إنتهاء النظام من إقلاع بتنفيد الأمر:
sh /etc/netstart ppp0



على FreeBSD 8.2

1. نصل المودم على منفذ usb ثم ننفذ الأمر التالي
dmesg | grep -i huawei
لعرض مخرجات و رسائل النظام المتعلقة بإسم مصنع المودم. النتيحة غالبا كالتالي:
ugen4.2:  at usbus4
u3g0:  on usbus4
umass0:  on usbus4
umass1:  on usbus4
cd0:  Removable CD-ROM SCSI-2 device 
da0:  Removable Direct Access SCSI-2 device 


2. على نظام فري بي إس دي التعريف المكلف بهذا النوع من مودمات هو u3g و الإعداد و الوصل يتم عبر أداة ppp أو pppd لكن بما أن هذه الأحيرة غير مثبة إفتراضيا على عكس نظام أوبن بي إس دي، سنستخدم ppp.

سننشئ ثلاثة ملفات. الأول لربط الإتصال و هو كالتالي:
ee /etc/ppp/ppp.conf

default:
    set log Phase Chat Connect LCP IPCP CCP tun command
    ident user-ppp VERSION

hwe153:
    set device /dev/cuaU0.0
    #set speed 384000
    set speed 921600
    set timeout 0
    set authname "gprs"
    set authkey "gprs"

    set dial "ABORT BUSY TIMEOUT 2 \
        \"\" \
        AT OK-AT-OK \
        AT+CFUN=1 OK-AT-OK \
        AT+CMEE=2 OK-AT-OK \
        AT+CSQ OK \
        AT+CGDCONT=1,\\\"IP\\\",\\\"www.iamgprs2.ma\\\" OK \
        ATDT*99# CONNECT"

    ## Lower the MTU as this seems to make the link more stable for GPRS connections.
    #set mtu maximum 296
    #set mru maximum 296
    set crtscts on
    disable vjcomp
    disable acfcomp
    disable deflate
    disable deflate24
    disable pred1
    disable protocomp
    disable mppe
    disable ipv6cp
    disable lqr
    disable echo
    nat enable yes
    enable dns
    resolv writable
    set dns 208.67.220.220 208.67.222.222
    set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0

    #set dns 212.217.0.1 212.217.0.12 ## iam dns
    #set ifaddr 10.1.0.2/0 10.1.0.1/0 255.255.255.255 0.0.0.0
    #add default HISADDR          ## See ppp.link*

هذا الملف يضم: منفذ العتاد /dev/cuaU0.0 صيغة الربط، اسم و كلمة السر (gprs gprs) الإفتراضية لدى مزود الخدمة، نقطة الوصل (APN) و كل ما يساعد على من إعدادات لضمان إتصال مستقر.
كل شيء موثق جيدا هنا و هنا.
الأجزاء المسبوقة بعلامة # متروكة كمرجع و لا تأثير لها.
لمعرفة المنافد المتاحة نفد أحد الأمرين:
ls -l /dev/ttyU*

ls -l /dev/cuaU*


الملف الثاني يحدد مسار الخروج الإفتراضي و يحدد مفرز أسماء الشبكة على الإنترنت و يمكن تغييره بخادوم غوغل (8.8.8.8 و 8.8.4.4) أو خادوم أوبن دي إن إس (208.67.222.222 و 208.67.220.220)
ee /etc/ppp/ppp.linkup

hwe153:
    shell route delete default
    shell route add default -interface INTERFACE
    shell sh -c "echo 'nameserver 212.217.0.1' > /etc/resolv.conf"
    shell sh -c "echo 'nameserver 212.217.0.12' >> /etc/resolv.conf"


الملف الثالث يضمن إستعادة الملف /etc/resolv.conf الذي يضم عناوين خوادم فرز الإسماء إلى حالته السابقة، ثم إزالة مسار الخروج الإفتراضي
ee /etc/ppp/ppp.linkdown

default:
    shell logger "LABEL down (up UPTIME): OCTETSIN received, OCTETSOUT sent"

hwe153:
    resolv restore
    shell route delete default


3. الآن إفتح نافدتين لعرض مخرجات الوصل (فقط للتأكد من أنتا نجحنا أم لا)
نفذ على الأولى:
tail -f /var/log/messages
على الثانية نفذ:
tail -f /var/log/ppp.log

ثم لربط الإتصال بمزود الخدمة نفذ:
ppp -ddial hwe153

الآن على نافدتي المخرجات سنتوصل بكل ما يجري:
Jul  9 21:44:37 freedy kernel: tun0: link state changed to UP

Jul  9 21:44:39 freedy ppp[1818]: tun0: LCP: deflink: State change Ack-Sent --> Opened
Jul  9 21:44:39 freedy ppp[1818]: tun0: LCP: deflink: LayerUp
Jul  9 21:44:39 freedy ppp[1818]: tun0: LCP: deflink: SendIdent(0) state = Opened
Jul  9 21:44:39 freedy ppp[1818]: tun0: LCP:  MAGICNUM 75dabbae
Jul  9 21:44:39 freedy ppp[1818]: tun0: LCP:  TEXT user-ppp 3.4.2
Jul  9 21:44:39 freedy ppp[1818]: tun0: Phase: bundle: Authenticate
Jul  9 21:44:39 freedy ppp[1818]: tun0: Phase: deflink: his = CHAP 0x05, mine = none
Jul  9 21:44:39 freedy ppp[1818]: tun0: LCP: deflink: RecvDiscardReq(1) state = Opened
Jul  9 21:44:39 freedy ppp[1818]: tun0: Phase: Chap Input: CHALLENGE (16 bytes from UMTS_CHAP_SRVR)
Jul  9 21:44:39 freedy ppp[1818]: tun0: Phase: Chap Output: RESPONSE (gprs)
Jul  9 21:44:39 freedy ppp[1818]: tun0: Phase: Chap Input: SUCCESS
Jul  9 21:44:39 freedy ppp[1818]: tun0: IPCP: Using trigger address 0.0.0.0
Jul  9 21:44:39 freedy ppp[1818]: tun0: CCP: FSM: Using "deflink" as a transport
Jul  9 21:44:41 freedy ppp[1818]: tun0: IPCP:  IPADDR[6] 10.0.0.2
Jul  9 21:44:41 freedy ppp[1818]: tun0: IPCP:  IPADDR[6] 10.204.36.163
Jul  9 21:44:41 freedy ppp[1818]: tun0: IPCP:  PRIDNS[6] 208.67.220.220
Jul  9 21:44:41 freedy ppp[1818]: tun0: IPCP:  SECDNS[6] 208.67.222.222
Jul  9 21:44:41 freedy ppp[1818]: tun0: IPCP: deflink: State change Ack-Sent --> Opened
Jul  9 21:44:41 freedy ppp[1818]: tun0: IPCP: deflink: LayerUp.
Jul  9 21:44:41 freedy ppp[1818]: tun0: IPCP: myaddr 10.204.36.163 hisaddr = 10.0.0.2
Jul  9 21:44:41 freedy ppp[1818]: tun0: Command: hwe153: shell route delete default
Jul  9 21:44:41 freedy ppp[1818]: tun0: Command: hwe153: shell route add default -interface INTERFACE
Jul  9 21:44:41 freedy ppp[1818]: tun0: Command: hwe153: shell sh -c echo 'nameserver 212.217.0.1' > /etc/resolv.conf
Jul  9 21:44:41 freedy ppp[1818]: tun0: Command: hwe153: shell sh -c echo 'nameserver 212.217.0.12' >> /etc/resolv.conf

الآن إختبر الوصول إلى الأنترنت بالتصفح أو تنفيذ الامر:
ping -c 3 google.com


لاحظ جيدا أني استخدمت أداة ppp بمعيار -ddial بمعنى أنها ستتصل ثم ستبقى في الخلفية تراقب الإتصال و تضمن تجديد الربط في حالة إنقطاعه. هذه الطريقة جيدة في حالة نجاحك في الربط لكن ستزعجك إن لم تكن قد نجحت في إعداد الموديم من قبل.

على العموم لقطع الإتصال، و إنهاء عمل ppp و إزالة كل الإعدادات المتعلقة بالموديم، أزل هذا الأخير ثم نفذ:
pkill -9 ppp 
ifconfig tun0 destroy
route flush


بالنسبة للربط التلقائي عند الإقلاع فلن أتطرق إليه لأن نظام فري بي إس دي يوفر إمكانية الربط عند الوصل بفضل آلية devd

devd تحتاج إلى معرفة معرفات العتاد لتنفد عملية معينة عندما يوصل هذا الأخير.

معرفات huawei e153 سنجدها على مخرجات الأمر tail -f /var/log/messages عند وصله، و هي كالتالي:
Jul  9 22:24:15 freedy kernel: u3g0: <HUAWEI Technology HUAWEI Mobile, class 0/0, rev 2.00/0.00, addr 2> on usbus4
Jul  9 22:24:16 freedy root: Unknown USB device: vendor 0x12d1 product 0x14ac bus uhub4

سنفتح الملف
nano -w /etc/devd.conf

و سنضيف إلى آخره ما يلي:
attach 100 {
    device-name "u3g[0-9]+";
    match "vendor" "0x12d1";
    match "product" "0x14ac";
    action "/bin/sleep 20 ; /usr/sbin/ppp -ddial hwe153";
};


ثم سنعيد تشغيل خدمة devd:
/etc/rc.d/devd restart

من الآن فصاعدا كلما وصلت الموديم huawei e153 بالمعرف 0x14ac و المصنع 0x12d1 سيتم الإنتظار لمدة 20 ثانية ليكتمل الموديم من تحضير نفسه ثم ليبدأ بعدها الوصل بمزود الخدمة.



مصادر يمكن الإعتماد عليها:
FreeBSD:
FreeBSD Handbook - PPP and SLIP
HUAWEI with UMTS
Modem 3G ZTE 626
AnyWi - 3G
Diablotins Connexion 3g
FreeBSD driver for Option HSDPA modem
Mode switching of Option HSDPA cards
User mounting of Removable Devices on FreeBSD 5.3
Setting up crazy caching for orange 3G modem on FreeBSD
3G Portable Internet Access
Connecting a Huawei E1762 usb modem
ppp nat static/dynamic
How to configure ppp for u3g?
TCP, APN, WAP, Gateway and Port Carrier Settings
ppp not removing address when down
Losing Nameserver access
Network almost setup, just a few problems


OpenBSD:

Re: gprs/3g : modem : huawei : k3565 : openbsd : 4.7 : support?

Huawei on 'openbsd-misc'
umsm man page
usb man page
usbdevs man page
ucom man page
pppd man page
ppp man page
resolv.conf.tail man page
hostname.if man page
ifconfig man page
OpenBSD Networking
OpenBSD NC4200: Using Celcom ZTE MF190 USB Modem
Vodafone 3G PPP on OpenBSD
OpenBSD 4.7 3G modem HUAWEI E1550
OpenBSD 4.7 3G modem HUAWEI E1550
MSA110UP 3g modem on OpenBSD 4.8


-

ليست هناك تعليقات:

إرسال تعليق