chuck

dadv


Choose your future

Choose to sysadmin


Previous Entry Share Next Entry
FreeBSD и 3G USB-модем ZTE MF626
chuck
dadv


Использование 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



  • 1
Слушай, а можно в mpd5 принудительно прибить имена интерфейсов, если соединений больше, чем одно?
А то у меня firewall на них ориентируется, чёрт...

В данном примере как раз прибито. Слово static это делает.

И есть гарантия, что первый всегда будет ng0, а второй — ng1? Было бы круто, конечно, если бы можно было задавать прямо имя и в ipfw ссылаться на него...

А ты не знаешь — вторую хотелку хотя бы теоретически реально сделать?

Не знаю, afaik никак. Но всегда есть ip-up script, в который передаётся имя интерфейса и который может пересоздать правила ipfw с его использованием.

Судя по багтрекеру в новой версии (5.6) будет set iface name

И, да, в скрипте же можно переименовать ifconfig'ом

в один из портов он будет срать уровнями сигналов, скоростью и статистикой байтов

А у Huawei этих портов вообще 4...

Что ещё интересно — на Винде у меня Huawei E173 виден как CD, CardReader и порты (два), а на FreeBSD — как 4 порта. При одних и тех же настройках.

rtfm.
это все регулируется at-командами.

Да, я знаю. Я по этому и подчеркнул: при одних и тех же настройках, которые:

AT^U2DIAG=276

не-не-не.
не говори мне, что во фре ты не видишь cd и da.
я-то вижу.

Не-а. Вот не вижу и всё!

gateway# usbconfig
ugen0.1: <OHCI root HUB AMD> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE
ugen1.1: <EHCI root HUB AMD> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE
ugen1.2: <HUAWEI Mobile HUAWEI Technology> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON
gateway#


Всё. А вот настройки модема:

gateway# cu -l /dev/cuaU0.0 -s 115200
Connected
AT
OK
AT^U2DIAG?
276

OK
~.
gateway#

ну umass-то ты загрузил?

Нет, но разве он не должен быть виден как ещё один ugen? Или не должен?

у меня -- не виден.

# usbconfig
ugen0.1:  at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen1.1:  at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen2.1:  at usbus2, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen3.1:  at usbus3, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen4.1:  at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON
ugen1.2:  at usbus1, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON
ugen1.3:  at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON


ugen1.3:  at usbus1
u3g0: 
[Error: Irreparable invalid markup ('<huawei [...] 2.00/0.00,>') in entry. Owner must fix manually. Raw contents below.]

у меня -- не виден.

<pre>
# usbconfig
ugen0.1: <UHCI root HUB Intel> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen1.1: <UHCI root HUB Intel> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen2.1: <UHCI root HUB Intel> at usbus2, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen3.1: <UHCI root HUB Intel> at usbus3, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen4.1: <EHCI root HUB Intel> at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON
ugen1.2: <Wireless Mini Mouse Primax Electronics> at usbus1, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON
ugen1.3: <HUAWEI Mobile HUAWEI Technology> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
</pre>

<pre>
ugen1.3: <HUAWEI Technology> at usbus1
u3g0: <HUAWEI Technology HUAWEI Mobile, class 0/0, rev 2.00/0.00, addr 3> on usbus1
u3g0: Found 3 ports.
umass0: <HUAWEI Technology HUAWEI Mobile, class 0/0, rev 2.00/0.00, addr 3> on usbus1
umass0:2:0:-1: Attached to scbus2
(probe0:umass-sim0:0:0:0): SCSI status error
(probe0:umass-sim0:0:0:0): INQUIRY. CDB: 12 1 0 0 ff 0
(probe0:umass-sim0:0:0:0): CAM status: SCSI Status Error
(probe0:umass-sim0:0:0:0): SCSI status: Check Condition
(probe0:umass-sim0:0:0:0): SCSI sense: ILLEGAL REQUEST asc:24,0 (Invalid field in CDB)
(probe0:umass-sim0:0:0:0): Error 22, Unretryable error
pass1 at umass-sim0 bus 0 scbus2 target 0 lun 0
pass1: <HUAWEI MMC Storage 2.31> Removable Direct Access SCSI-2 device
pass1: 1.000MB/s transfers
GEOM: new disk da0
da0 at umass-sim0 bus 0 scbus2 target 0 lun 0
da0: <HUAWEI MMC Storage 2.31> Removable Direct Access SCSI-2 device
da0: 1.000MB/s transfers
da0: 3781MB (7744512 512 byte sectors: 255H 63S/T 482C)
GEOM: da0: partition 1 does not start on a track boundary.
GEOM: da0: partition 1 does not end on a track boundary.
</pre>

Такой вопрос: а как подправить /usr/local/etc/mpd5/mpd.script что бы заработал модем Novatel U720? Раньше работал через ppp, но часто подвисал.

Откуда ж мне знать, тем более без mpd.log? Всё зависит от того, что выдаётся в лог - на каком этапе ломается подключение.

PPP через USB модем от МТС на FreeBSD 11.2

Пользователь victor_sudakov сослался на вашу запись в своей записи «PPP через USB модем от МТС на FreeBSD 11.2» в контексте: [...] 10.64.64.64/0 add default HISADDR Использовались статья https://dadv.livejournal.com/151723.html [...]

  • 1
?

Log in

No account? Create an account