dadv: (Default)
Choose your future ([personal profile] dadv) wrote2011-11-03 12:35 am
Entry tags:

FreeBSD и 3G USB-модем ZTE MF626


Использование USB-модема ZTE MF626 для организации (резервного) канала через билайновскую сеть 3G и FreeBSD 8.2-STABLE.

  • Модемы ZTE MF626, продаваемые в комплекте контрактов Билайна, могут быть привязаны к некоему Windows-based софту, ожидая от него во время соединения периодические сигналы через USB, в отсутствие которых модем быстро рвет связь. Первоначально модем нужно "отвязать" от этого. Метод отвязывания многократно описан в сети и выходит за рамки этой заметки.

  • Модем поддерживается драйвером u3g, поэтому, если драйвера нет в ядре, первым делом нужно подгрузить его (kldload u3g) и обеспечить подгрузку после ребута:

    echo 'u3g_load="YES"' >> /boot/loader.conf

  • После загрузки драйвера можно вставлять модем в порт USB. В выводе usbconfig модем определяется так:

    ugen1.3: <ZTE CDMA Technologies MSM ZTE, Incorporated> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON

    Далее возможны варианты. Если после подключения модема появилось новое устройство вида /dev/cd0, значит, модем представляется CD-приводом, содержащим драйвера для Windows и прочих. Выводится модем из этого режима следующим образом:

    usbconfig -d 1.3 add_quirk UQ_MSC_EJECT_ZTESTOR
    camcontrol eject pass0

    Цифры 1.3 скопированы из вывода usbconfig, а 0 - из названия /dev/cd0, у вас могут быть другие значения.

    После этого пропадает /dev/cd0 и появляются /dev/cuaU0.0, /dev/cuaU0.1 и /dev/cuaU0.2. Опять же, конкретные цифры у вас могут быть другими при наличии в системе других устройств /dev/cuaUx.

    Необходимо добиться появления /dev/cuaUx.x, без этого к следующим шагам переходить рано.

  • Установка 3G PPP-соединения через mpd-5.5.

    Дописываем в файл /usr/local/etc/mpd5/mpd.script (или создаём, если не существует; отступы делаем табуляциями):

    dial-beeline:
            print "AT&F\r\n"
            match "ERROR" ModemError
            match "NO CARRIER" ModemError
            match "OK" NoEcho
            wait 5
            log "Modem not ready"
            failure
    NoEcho:
            print "ATE0\r\n"
            match "OK" ModemQuery
            wait 5
            log "Modem not ready"
            failure
    ModemQuery:
            print "AT+CRSM=176,12258,0,0,10\r\n"
            regex "[+]CRSM: .*\"(.*)\""
            wait 5
            log "Detected ICC (BCD): $matchedString1"
            match "OK"
            wait 5
            print "AT+CRSM=176,28423,0,0,9\r\n"
            regex "[+]CRSM: .*\"(.*)\""
            wait 5
            log "Detected IMSI: $matchedString1"
            match "OK"
            wait 5
            print "AT+CSQ\r\n"
            regex "[+]CSQ: .*$"
            wait 5
            log "Detected $matchedString0"
            match "OK"
            wait 5
    ModemInit:
            print "AT&D2&C1S0=0S7=60S30=0+CGDCONT=1,\"IP\",\"internet.beeline.ru\"\r\n"
            match "OK" DialOut
            match "ERROR" ModemError
            wait 5
    ModemError:
            log "Modem error"
            failure
    DialOut:
            log "Calling, waiting 60 seconds for connect..."
            print "ATDT*99#\r\n"
            match "CONNECT" Connected
            match "NO CARRIER" DialError
            match "BUSY" DialError
            wait 60
            log "Modem error"
            failure
    DialError:
            log "Cannot connect"
            failure
    Connected:
            log "Connected"
            success

    В /usr/local/etc/mpd5/mpd.conf пишем:

    startup:
            # configure mpd users
            set user admin xxx admin
            # configure the console
            set console self 127.0.0.1 5005
            set console open
    
    default:
            load beeline
    
    beeline:
            log +auth +bund +ccp +chat +echo +iface +ipcp +lcp +phys
            create bundle static BEELINE
            set bundle links B-Link
            set ipcp ranges 0.0.0.0/0 1.1.1.1/0
            set ipcp disable vjcomp
            create link static B-Link modem
            set link action bundle BEELINE
            
            set modem device /dev/cuaU0.2
            set modem speed 921600
            set modem watch -cd
            set modem watch -dsr
            set modem script dial-beeline
            
            set auth authname beeline
            set auth password beeline
            set link disable chap pap acfcomp protocomp
            set link keep-alive 6 60
            set link max-redial 0
            open

    Билайновский PPP не выдаёт нам IP-адрес своей стороны, поэтому команда set ipcp ranges 0.0.0.0/0 1.1.1.1/0 выглядит так странно. Если создаётся не резервный, а основной канал, не забудьте непосредственно перед этой командой вставить команду set iface route default для установки маршрута по умолчанию в этот сетевой интерфейс.

  • После запуска mpd5 в журнале работы получаем:

    mpd: [BEELINE] Bundle: Interface ng0 created
    mpd: [B-Link] Link: OPEN event
    mpd: [B-Link] LCP: Open event
    mpd: [B-Link] LCP: state change Initial --> Starting
    mpd: [B-Link] LCP: LayerStart
    mpd: [B-Link] chat: Detected ICC (BCD): 98765432109876543210
    mpd: [B-Link] chat: Detected IMSI: 123456789012345678
    mpd: [B-Link] chat: Detected +CSQ: 8,99
    mpd: [B-Link] chat: Calling, waiting 60 seconds for connect...
    mpd: [B-Link] chat: Connected
    mpd: [B-Link] MODEM: chat script succeeded
    mpd: [B-Link] Link: UP event
    mpd: [B-Link] LCP: Up event
    mpd: [B-Link] LCP: state change Starting --> Req-Sent
    mpd: [B-Link] LCP: SendConfigReq #1
    mpd: [B-Link]   ACCMAP 0x000a0000
    mpd: [B-Link]   MRU 1500
    mpd: [B-Link]   MAGICNUM 4d142054
    mpd: [B-Link] LCP: rec'd Configure Request #0 (Req-Sent)
    mpd: [B-Link]   ACCMAP 0x00000000
    mpd: [B-Link]   AUTHPROTO CHAP MD5
    mpd: [B-Link]   MAGICNUM 2632583e
    mpd: [B-Link]   PROTOCOMP
    mpd: [B-Link]   ACFCOMP
    mpd: [B-Link] LCP: SendConfigAck #0
    mpd: [B-Link]   ACCMAP 0x00000000
    mpd: [B-Link]   AUTHPROTO CHAP MD5
    mpd: [B-Link]   MAGICNUM 2632583e
    mpd: [B-Link]   PROTOCOMP
    mpd: [B-Link]   ACFCOMP
    mpd: [B-Link] LCP: state change Req-Sent --> Ack-Sent
    mpd: [B-Link] LCP: rec'd Configure Ack #1 (Ack-Sent)
    mpd: [B-Link]   ACCMAP 0x000a0000
    mpd: [B-Link]   MRU 1500
    mpd: [B-Link]   MAGICNUM 4d142054
    mpd: [B-Link] LCP: state change Ack-Sent --> Opened
    mpd: [B-Link] LCP: auth: peer wants CHAP, I want nothing
    mpd: [B-Link] LCP: LayerUp
    mpd: [B-Link] LCP: rec'd Discard Request #1 (Opened)
    mpd: [B-Link] CHAP: rec'd CHALLENGE #1 len: 35
    mpd: [B-Link]   Name: "UMTS_CHAP_SRVR"
    mpd: [B-Link] CHAP: Using authname "beeline"
    mpd: [B-Link] CHAP: sending RESPONSE #1 len: 28
    mpd: [B-Link] CHAP: rec'd SUCCESS #1 len: 4
    mpd: [B-Link] LCP: authorization successful
    mpd: [B-Link] Link: Matched action 'bundle "BEELINE" ""'
    mpd: [B-Link] Link: Join bundle "BEELINE"
    mpd: [BEELINE] Bundle: Status update: up 1 link, total bandwidth 28800 bps
    mpd: [BEELINE] IPCP: Open event
    mpd: [BEELINE] IPCP: state change Initial --> Starting
    mpd: [BEELINE] IPCP: LayerStart
    mpd: [BEELINE] IPCP: Up event
    mpd: [BEELINE] IPCP: state change Starting --> Req-Sent
    mpd: [BEELINE] IPCP: SendConfigReq #1
    mpd: [BEELINE]   IPADDR 0.0.0.0
    mpd: [BEELINE] IPCP: rec'd Configure Nak #1 (Req-Sent)
    mpd: [BEELINE]   PRIDNS 10.11.12.13
    mpd: [BEELINE]   SECDNS 10.11.12.14
    mpd: [BEELINE]   PRINBNS 10.11.12.13
    mpd: [BEELINE]   SECNBNS 10.11.12.14
    mpd: [BEELINE] IPCP: SendConfigReq #2
    mpd: [BEELINE]   IPADDR 0.0.0.0
    mpd: [BEELINE] IPCP: rec'd Configure Nak #2 (Req-Sent)
    mpd: [BEELINE]   PRIDNS 10.11.12.13
    mpd: [BEELINE]   SECDNS 10.11.12.14
    mpd: [BEELINE]   PRINBNS 10.11.12.13
    mpd: [BEELINE]   SECNBNS 10.11.12.14
    mpd: [BEELINE] IPCP: SendConfigReq #3
    mpd: [BEELINE]   IPADDR 0.0.0.0
    mpd: [BEELINE] IPCP: rec'd Configure Request #0 (Req-Sent)
    mpd: [BEELINE] IPCP: SendConfigAck #0
    mpd: [BEELINE] IPCP: state change Req-Sent --> Ack-Sent
    mpd: [BEELINE] IPCP: rec'd Configure Nak #3 (Ack-Sent)
    mpd: [BEELINE]   IPADDR 10.207.212.144
    mpd: [BEELINE]     10.207.212.144 is OK
    mpd: [BEELINE] IPCP: SendConfigReq #4
    mpd: [BEELINE]   IPADDR 10.207.212.144
    mpd: [BEELINE] IPCP: rec'd Configure Ack #4 (Ack-Sent)
    mpd: [BEELINE]   IPADDR 10.207.212.144
    mpd: [BEELINE] IPCP: state change Ack-Sent --> Opened
    mpd: [BEELINE] IPCP: LayerUp
    mpd: [BEELINE]   10.207.212.144 -> 1.1.1.1
    mpd: [BEELINE] IFACE: Up event

    Строчка Detected +CSQ сообщает нам уровень сигнала, две предыдущие наши ICC-ID и IMSI соответственно.

    Вывод ifconfig выглядит так:

    ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1500
            inet 10.207.212.144 --> 1.1.1.1 netmask 0xffffffff



Post a comment in response:

This account has disabled anonymous posting.
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org