Почему разрывается соединение МТС GPRS в Ubuntu?

Никак не могу победить причину разрыва соединения в ubuntu при подключении через 3G/LTE модем Huawei E398 (подобное проявлялось и с другими модемами).
В частности рвётся соединение по причине "LCP terminated by peer".
Mar  3 05:37:25 ubuntu pppd[11997]: pppd 2.4.5 started by root, uid 0
Mar  3 05:37:25 ubuntu pppd[11997]: using channel 106
Mar  3 05:37:25 ubuntu pppd[11997]: Using interface ppp0
Mar  3 05:37:25 ubuntu pppd[11997]: Connect: ppp0 <--> /dev/ttyUSB0
Mar  3 05:37:25 ubuntu pppd[11997]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xb585f1ec>]
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [LCP ConfReq id=0x21 <asyncmap 0x0> <auth chap MD5> <magic 0xf766a50e> <pcomp> <accomp>]
Mar  3 05:37:25 ubuntu pppd[11997]: sent [LCP ConfRej id=0x21 <pcomp> <accomp>]
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0xb585f1ec>]
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [LCP ConfReq id=0x22 <asyncmap 0x0> <auth chap MD5> <magic 0xf766a50e>]
Mar  3 05:37:25 ubuntu pppd[11997]: sent [LCP ConfAck id=0x22 <asyncmap 0x0> <auth chap MD5> <magic 0xf766a50e>]
Mar  3 05:37:25 ubuntu pppd[11997]: sent [LCP EchoReq id=0x0 magic=0xb585f1ec]
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [LCP DiscReq id=0x23 magic=0xf766a50e]
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [CHAP Challenge id=0x1 <881b6bf79efcdc9878374dd42c147519>, name = "UMTS_CHAP_SRVR"]
Mar  3 05:37:25 ubuntu pppd[11997]: sent [CHAP Response id=0x1 <b3f8d28572193959e7ac04de11de9270>, name = "mts"]
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [LCP EchoRep id=0x0 magic=0xf766a50e b5 85 f1 ec]
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [CHAP Success id=0x1 ""]
Mar  3 05:37:25 ubuntu pppd[11997]: CHAP authentication succeeded
Mar  3 05:37:25 ubuntu pppd[11997]: CHAP authentication succeeded
Mar  3 05:37:25 ubuntu pppd[11997]: sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
Mar  3 05:37:25 ubuntu pppd[11997]: sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [LCP ProtRej id=0x24 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]
Mar  3 05:37:25 ubuntu pppd[11997]: Protocol-Reject for 'Compression Control Protocol' (0x80fd) received
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [IPCP ConfReq id=0xe]
Mar  3 05:37:25 ubuntu pppd[11997]: sent [IPCP ConfNak id=0xe <addr 0.0.0.0>]
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [IPCP ConfNak id=0x1 <addr 10.131.74.192> <ms-dns1 213.87.1.1> <ms-dns2 213.87.0.1>]
Mar  3 05:37:25 ubuntu pppd[11997]: sent [IPCP ConfReq id=0x2 <addr 10.131.74.192> <ms-dns1 213.87.1.1> <ms-dns2 213.87.0.1>]
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [IPCP ConfReq id=0xf]
Mar  3 05:37:25 ubuntu pppd[11997]: sent [IPCP ConfAck id=0xf]
Mar  3 05:37:25 ubuntu pppd[11997]: rcvd [IPCP ConfAck id=0x2 <addr 10.131.74.192> <ms-dns1 213.87.1.1> <ms-dns2 213.87.0.1>]
Mar  3 05:37:25 ubuntu pppd[11997]: Could not determine remote IP address: defaulting to 10.64.64.64
Mar  3 05:37:25 ubuntu pppd[11997]: local  IP address 10.131.74.192
Mar  3 05:37:25 ubuntu pppd[11997]: remote IP address 10.64.64.64
Mar  3 05:37:25 ubuntu pppd[11997]: primary   DNS address 213.87.1.1
Mar  3 05:37:25 ubuntu pppd[11997]: secondary DNS address 213.87.0.1
Mar  3 05:37:25 ubuntu pppd[11997]: Script /etc/ppp/ip-up started (pid 12004)
Mar  3 05:37:25 ubuntu named[1259]: listening on IPv4 interface ppp0, 10.131.74.192#53
Mar  3 05:37:25 ubuntu pppd[11997]: Script /etc/ppp/ip-up finished (pid 12004), status = 0x0
Mar  3 05:38:19 ubuntu pppd[11997]: rcvd [LCP TermReq id=0x25]
Mar  3 05:38:19 ubuntu pppd[11997]: LCP terminated by peer
Mar  3 05:38:19 ubuntu pppd[11997]: Connect time 0.9 minutes.
Mar  3 05:38:19 ubuntu pppd[11997]: Sent 15341 bytes, received 1188 bytes.
Mar  3 05:38:19 ubuntu pppd[11997]: Script /etc/ppp/ip-down started (pid 12084)
Mar  3 05:38:19 ubuntu pppd[11997]: sent [LCP TermAck id=0x25]
Mar  3 05:38:19 ubuntu pppd[11997]: Script /etc/ppp/ip-down finished (pid 12084), status = 0x0
Mar  3 05:38:20 ubuntu pppd[11997]: Modem hangup
Mar  3 05:38:20 ubuntu pppd[11997]: Connection terminated.
Mar  3 05:38:20 ubuntu pppd[11997]: Exit.

Соединение устанавливаю с помощью wvdial и его конфиг:
[Dialer MTS]
Init1 = ATZ
Init2 = AT+CGDCONT=1,"IP","internet.mts.ru"
Modem Type = USB LTE Modem
Baud = 9600
New PPPD = yes
Modem = /dev/ttyUSB0
Phone = *99#
Password = mts
Username = mts
Stupid Mode = yes 
Dial Attempts = 0
Auto DNS = Off
Dial Timeout = 1

Модем автоматически переводится udev-ом с помощью usb_switchmode в нужный режим. Но соединение всё равно рвётся.
Где-то читал, что есть различие между официальным софтом и установлением соединения с помощью ppp, но что-то не могу найти в чём именно отличие и что делать.
  • Вопрос задан
  • 6784 просмотра
Решения вопроса 1
@mafet Автор вопроса
Итого, проблема решена изменением настроек на стороне МТС. Когда сторона МТС видела "неправильные пакеты" в размере 10 штук - соединение закрывалось со стороны оператора. Теперь этого происходить не будет.
То есть единственное решение со стороны абонента, это "-A FORWARD -m state --state INVALID -j DROP". Это сильно снижало вероятность закрытия сессии, но не исключало её полностью. Изменение же параметров, указанных выше мало влияло на проблему, т.к. она была совсем с другой стороны.

Что касается NDIS я немного подзабил, т.к. в целом интерфейс достаточно хороший - не нужно костылей в виде ppp, но по крайней мере в консоли достаточно сложно держать ndis соединение - модем может зависать, надо вручную контролировать состояние соединения, вручную делать обвязку получения ip адреса, т.к. после падения соединения wwan интерфейс не переходит в down и надо как-то понять, что нужно новый ip получать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@mafet Автор вопроса
Я почти разобрался в чём проблема. Оказывается в первую очередь проблема в проскакивающих ип-шниках мимо NAT-а в линуксе. По каким именно причинам это возникает, я не понял, но помогает правило -A FORWARD -m state --state INVALID -j DROP
Так же чем-то помогает правило, устанавливающее единый ttl, но я правда пока не понял, сильно ли помогает. -t mangle -A POSTROUTING -o ppp0 -j TTL --ttl-set 64
Ещё я раскурил, как поднимать штатно NDIS интерфейс и об этом, возможно, я даже напишу статью для потомков.
Напомню, вся это котовасия происходит с оператором МТС. Возможно на других операторах такого нет. У меня есть выходы на технарей из МТС, возможно с ними ещё попробуем понять, почему так происходит. Я не помню, чтоб как-то специально боролись с установкой роутеров. Всем спасибо за подсказки.
Ответ написан
Комментировать
@imz
(Вынесу из комментов, потому что это тоже возможный ответ на вопрос в определённой ситуации.)

Похожим образом могут проявляться "особенности" модема "Билайн".

(Вставил сим-карту МТС и я-то думал: раз интернет совершенно нормальный 2.3 минуты, то нет у модема какого-то beeline lock-in, ну и МТСу, конечно, всё равно, какой модем, потому что мобильных устройств-то куча разных).

А вот пишут в homenet.beeline.ru/index.php?s=8e6979064f9c64a4156... :

Билайновское ПО каждые две минуты посылает модему AT-команду,если модем её не получил происходит дисконнект.Об этом на форуме писалось не однократно.


Т.е. в принципе не важно, какую симкарту вы в такой модем вставите, но если используете из Ubuntu или другой системы без билайновского ПО, получается, не будет полноценно работать. Надо какие-то специальные at-команды ему посылать или ещё как-то решать проблему (поменять прошивку).

Вот как это бывает устроено в модемах "Билайн" -- alexkuklin.livejournal.com/820953.html?thread=5839... :

Ну, гентушники - они вроде не так подвежены ФГМ, как бубунтушники - читай ru.gentoo-wiki.com/wiki/MF626
Там есть еще круче, про вычисляемый код.

В новой версии программы команды чуть другие и простым AT+ZOPERTE="beeline" не обойтись.
Code:

OUT: AT+CPBS="SM"\r\n
OUT: AT+CPMS="SM","SM",""\r\n
OUT: AT+ZOPRT=6\r\n
^^^^^ остановка цикла
OUT: AT+ZOPRT=5\r\n
^^^^^ запуск нового цикла
OUT: AT+ZSTART\r\n
^^^^^ судя по всему уже не обязателен
IN: +ZOPERTER: 0,XXXXXXXXXXXXXXXX\r\n
^^^^^ запрос от модема. на этот запрос и нужно отвечать
OUT: AT+ZOPERTE=1,YYYYYYYY\r\n
^^^^^ а это наш ответ
IN: +ZOPERTE: 1,1
^^^^^ а это модем сказал что мы угадали
(или 1,0 если не угадали. в этом случае модем краснеет
и перестает работать до следующего перезапуска цикла)
IN: +ZOPERTER: 1,XXXXXXXXXXXXXXXX\r\n
^^^^^ через ~2-3 минуты модем снова задает вопрос

Если правильно и быстро (на это есть около 20 секунд) отвечать на все +ZOPERTER: то модем исправно работает, если не отвечать вообще, то модем работает около 3х минут, задает второй вопрос(первый он задает сразу при запуске цикла), ждет 20 секунд ответа, а потом краснеет, рвет соединение и все.

А вот теперь самое главное: алгоритм по которому вычисляется это самое YYYYYYYY. Алгоритм есть. Неделя истязаний дизассемблером нового exe'шника от Beeline принесла свои плоды. Код пока очень сырой, т.к. является прямым преобразованием из ASM в C++ (чуть более 1000 строк) :) так что как доведу до ума, куда-нить выложу. Пока модем пашет уже около часа и все ОК. Если есть пожелания пишите на alexunnamed.tomsk.ru.


Не знаю пока, есть ли этот код.

URL упомянутой wiki сменился; см. gentoo-wiki.vfose.ru/wiki/MF626 :

Неделя истязаний дизассемблером нового exe'шника от Beeline принесла свои плоды. Код пока очень сырой, т.к. является прямым преобразованием из ASM в C++ (чуть более 1000 строк) :) так что как доведу до ума, куда-нить выложу. Пока модем пашет уже около часа и все ОК. Если есть пожелания пишите на alexunnamed.tomsk.ru. Утилита для работы под Linux выложена здесь www.altcomtsk.info/index.php?option=com_content&vi...


Эту программу с секретом на просторах интернета удалось скачать только по ссылке с yanex.org/beeline-zte-mf170-v-linux (в остальных местах протухло). У людей оно вроде как даже работало (запускаем одновременно mf626-b09 и звонилку/pppd; например, в моём ALT; вообще, по запросу "mf626-b09" в google много примеров её использования).

Могу подтвердить: эта программа общается с модемом и не даёт ему отвалиться через 2 минуты (видно по зелёному индикатору, который раньше становился красным), т.е. секрет разгадан верно.

Но в моей системе pppd (под управлением звонилки) не может работать с устройством /dev/ttyUSB32 одновременно с этой программой (возможно, в более старых linux это было возможно и у людей работало): Resource temporarily unavailable.

К сожалению, как верно возмутился zerg, программа распространяется без исходников, поэтому тяжело объединить разгаданный секрет со звонилкой так, чтобы они друг другу не мешали (хочется, скажем, чтобы общение звонилки с модемом шло через mf626-b09).

У желающих использовать этот модем (или подобный) в современном linux (предполагаю, что раньше как-то двум программам удавалось одновременно получать доступ к устройству, а сейчас нет) остаётся ещё способ поменять прошивку. Я же пока прекращу терять время на возню с ним.

О! Это NetworkManager оказался капризным (хотя я вроде видел, что люди писали, что можно его использовть). Я вручную запустил pppd (подсмотрел в /proc/NNNN/cmdline , как это делал NetworkManager):

/usr/sbin/pppd nodetach lock nodefaultroute ipv6 , user mts ttyUSB34 noipdefault noauth usepeerdns lcp-echo-failure 0 lcp-echo-interval 0 ipparam /org/freedesktop/NetworkManager/PPP/5 plugin /usr/lib64/pppd/2.4.5/nm-pppd-plugin.so

и пришлось ещё сделать (видимо, NetworkManager сам добавляет маршрут, а я не сообразил сразу, что в команде pppd этого нет):

ip route add to default via 10.64.64.64 dev ppp0

И вот, интернет работает, пишу через него.
Ответ написан
alternativshik
@alternativshik
С помощью нетверк менеджера не пробовали?
Ответ написан
karabanov
@karabanov Куратор тега Linux
Системный администратор
Попробуйие в конфиг PPP добавить:
lcp-echo-failure 0
lcp-echo-interval 0

Если не поможет попробуйте добавить ещё:
ipcp-max-failure 30

PS
Вот здесь почитайте. Там в конце страницы представлены одно строчные команды позволяющие поднимать PPPoE соединение.

PPS
Baud = 9600... Как-то маловато. Я думаю, ваш модем и на 115200 отлично "заведётся".
Ответ написан
Snowdimon
@Snowdimon
Linux user
может перевести железку в режим "модем онли"?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы