conexão 3G com wvdial não recebe IP, sai com o código 16

2

Estou tentando estabelecer uma conexão 3G com o Raspbian, um dongle USB 3G, usb_modeswitch e wvdial . Eu segui este tutorial que funcionou bem antes com um dongle 3G diferente.

Meu dongle 3G é um ZTE D6601, o SIM não tem PIN e a conexão funciona perfeitamente com a ferramenta ISPs no Windows e no Ubuntu 15 com a ferramenta de banda larga móvel integrada. Mas eu preciso fazer isso em um Raspberry Pi e na linha de comando.

Isso é o que eu tentei até agora: Quando eu inicializo o Raspbian, lsusb retorna

Bus 001 Device 004: ID 19d2:0154 ZTE WCDMA Technologies MSM 

Eu então corro

sudo usb_modeswitch -I -v 19d2 -p 0154 -c /etc/usb_modeswitch.conf 

Que altera o ProductID para

Bus 001 Device 009: ID 19d2:0108 ZTE WCDMA Technologies MSM 

Há mais de um dongle 3G com 0154 como DefaultProduct ID, portanto as regras de comutação padrão de usb_modeswitch não funcionam. 0108 é o que o Ubuntu troca o dispositivo ou o que acontece quando eu sudo eject o drive de CD virtual, então eu usei isso.

Meu /etc/network/interfaces foi alterado apenas para usar uma conexão Wi-Fi:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Até agora, tudo bem. Quando executo sudo wvdialconf , um modem é detectado em /dev/ttyUSB1 . Eu então corro sudo wvdial dcom com dcom sendo definido assim (APN "e-connect" está correto, nenhum usuário / senha é necessário):

[Dialer dcom]
Modem = /dev/ttyUSB1
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","e-connect"
Stupid Mode = 1
Modem Type = Analog Modem
Phone = *99#
ISDN = 0
Username = { }
Auto Reconnect = 1
Password = { }
Baud = 460800

O shell retorna isso:

--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
OK
--> Sending: ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","e-connect"
AT+CGDCONT=1,"IP","e-connect"
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
CONNECT 21600000
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Sat Apr 25 18:09:08 2015
--> Pid of pppd: 5530
--> Using interface ppp0
--> pppd: [08]FX[01]�FX[01]8GX[01]p<X[01]�PX[01]�QX[01] (+4 more times)

Depois de executar isso, ifconfig mostra que ppp0 foi criado, mas nenhum endereço IP foi atribuído. Então, cerca de 10 segundos depois, isso acontece:

--> Disconnecting at Sat Apr 25 18:09:39 2015
--> The PPP daemon has died: A modem hung up the phone (exit code = 16)
--> man pppd explains pppd error codes in more detail.
--> Try again and look into /var/log/messages and the wvdial and pppd man pages for more information.
--> Auto Reconnect will be attempted in 5 seconds
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","e-connect"
AT+CGDCONT=1,"IP","e-connect"
OK
--> Modem initialized.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","e-connect"
AT+CGDCONT=1,"IP","e-connect"
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
ERROR
--> Invalid dial command.
--> Disconnecting at Sat Apr 25 18:09:45 2015

Se eu executar wvdial dcom novamente, ele repetirá a saída da segunda tentativa de conexão acima ( Invalid dial command ) e nem mesmo configurará ppp0 . Estranhamente, depois de um rápido sudo wvdialconf (durante o qual /etv/wvdial.conf permanece inalterado), posso me conectar novamente, mas ele não atribuirá mais nenhum IP e quebra após 10 segundos. Eu repliquei isso várias vezes.

Talvez isso também seja interessante: wlan0 perde seu IP no momento em que ppp0 é criado e só posso recuperá-lo executando sudo ifdown wlan0 e sudo ifup wlan0 , embora esteja configurado para se reconectar automaticamente.

    
por nhee 25.04.2015 / 13:43

1 resposta

0

Eu finalmente descobri uma maneira: descartei wvdial e usei nmcli (do pacote network-manager ). Eu estabeleci a conexão há 10 horas e ela ainda está ativa com o mesmo IP. Aqui está como eu fiz:

Etapa 1: Gere usb-modeswitch para que seu dispositivo USB 3G seja reconhecido como modem, não como dispositivo de armazenamento. Eu não vou cobrir os detalhes aqui, pois há muitos tutoriais por aí ( exemplo ).

Etapa 2: Instale o NetworkManager no RPi: sudo apt-get install network-manager network-manager-gnome -y . Verifique se o NetworkManager reconhece seu modem executando nmcli dev . Se sim, você deve ver uma tabela como esta:

DEVICE        TYPE                      STATE
ttyUSB2        gsm                      disconnected

(Se não, seu usb-modeswitch pode ter falhado e seu sistema não consegue encontrar um modem.)

Etapa 3: Inicie o servidor X: startx , abra o NetworkManager no menu e crie uma nova conexão "Banda larga móvel" (guia "Banda larga móvel" > "Adicionar"). O assistente irá guiá-lo através do processo, mesmo permitindo que você selecione o seu provedor para que você não precise se preocupar com as configurações do APN. A ferramenta criará um arquivo de conexão em /etc/NetworkManager/system-connections/ e você deverá anotar o nome desse arquivo, pois ele será usado como o nome da conexão na próxima etapa.

Passo 4: Como eu disse na minha pergunta, eu preciso ser capaz de executar isso a partir da linha de comando sem o servidor X e a maneira de fazer isso é executando sudo nmcli con up id "Connection ID" , o ID de conexão sendo o nome da conexão que você criou na etapa 2. Isso deve ser tudo. Para desconectar, execute sudo nmcli con down id "Connection ID" .

    
por 30.04.2015 / 06:36