Обнаружил интересную багу в работе модема через GPRS или 3G. В качестве звонилки я использую wvdial с вот такими настройками:
[Dialer Defaults] Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Init3 = AT+CGDCONT=1,"IP","mtelinternet" Modem = /dev/ttyACM0 Phone = *99***1# Idle Seconds = 30000 Modem Type = USB Modem Stupid Mode = 1 Compuserve = 0 Baud = 460800 Auto DNS = on New PPPD = Yes Dial Command = ATDT Ask Password = 0 ISDN = 0 Password = internet Username = internet
Соединение происходит, адреса DNS серверов успешно получаю при соединении, а вот сам интернет работает через раз. Причем угадать, будет ли он работать или нет, никакой возможности не имеется. Симптомы следующие, после установки соединения wvdial пытается отресолвить какое-то тестовое доменное имя, и таким образом определяет, работает ли DNS в установленном соединении:
Warning, can not find address for www.suse.de Warning, address lookup does not work Nameserver (DNS) failure, the connection May not work.
Если такие предупреждения видны, то возможны 2 ситуации.
Во-первых, wvdial не смог прописать адреса DNS сервера в /etc/resolv.conf. Лечится прописыванием адресов провайдера вручную — что и было сделано; но проблема не была устранена полностью.
Во-вторых, возможны проблемы с размерами окна tcp в туннеле ppp. В этом случае надо поиграться с настройками размера окна tcp:
echo “0″ >/proc/sys/net/ipv4/tcp_window_scaling
Лично мне это очень помогло, после чего я решил установить такие настройки в системе по умолчанию — дописал в /etc/sysctl.conf вот такую строчку:
net.ipv4.tcp_window_scaling = 0
и перечитал параметры:
# sysctl -p
После всех манипуляций интернет стал работать намного более стабильно. В качестве модема я использовал свой телефон Nokia E5