与 wvdial 的 3G 连接没有获取 IP,退出并显示代码 16

与 wvdial 的 3G 连接没有获取 IP,退出并显示代码 16

我正在尝试与 Raspbian、3G USB 适配器usb_modeswitchwvdial.我跟着本教程之前与其他 3G 适配器配合使用效果良好。

我的 3G 适配器是中兴 D6601,SIM 卡没有 PIN,并且在 Windows 下和 Ubuntu 15 下使用内置移动宽带工具与 ISP 工具完美连接。但我需要在 Raspberry Pi 上通过命令行执行此操作。

这是我到目前为止所尝试过的:当我启动 Raspbian 时,lsusb返回

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

然后我跑

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

这会将 ProductID 更改为

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

有不止一个DefaultProductID 为 0154 的 3G 加密狗,因此标准切换规则usb_modeswitch不起作用。 0108 是 Ubuntu 将设备切换到的位置,或者是sudo eject虚拟 CD 驱动器时发生的情况,所以我使用了它。

我的/etc/network/interfaces只是更改为使用 WiFi 连接:

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

到目前为止,一切都很好。当我运行时sudo wvdialconf,在 处检测到调制解调器/dev/ttyUSB1。然后我sudo wvdial dcom按照dcom这样的定义运行(APN“e-connect”是正确的,不需要用户/通行证):

[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

shell 返回这个:

--> 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)

运行后,ifconfig显示ppp0已创建,但未分配 IP 地址。然后,大约 10 秒后,会发生以下情况:

--> 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

如果我wvdial dcom再次运行,它将重复上面第二次连接尝试的输出(Invalid dial command),甚至不会配置ppp0。奇怪的是,很快sudo wvdialconf(期间/etv/wvdial.conf保持不变),我可以再次连接,但它会再次分配没有IP并在10秒后断开。我已经重复了好几次了。

也许这也很有趣:在创建的wlan0那一刻就失去了它的IP ppp0,我只能让它重新运行sudo ifdown wlan0sudo ifup wlan0即使它被设置为自动重新连接。

答案1

我终于想出了一个办法:我扔掉wvdial并使用nmcli(从network-manager包装中)代替。我在 10 小时前建立了连接,并且该连接仍然处于活动状态且具有相同的 IP。我是这样做的:

步骤1:开始usb-modeswitch运行,以便您的 3G USB 记忆棒被识别为调制解调器,而不是存储设备。我不会在这里介绍详细信息,因为那里有很多教程(例子)。

第2步:安装网络管理器在 RPi 上:sudo apt-get install network-manager network-manager-gnome -y.通过运行检查 NetworkManager 是否识别您的调制解调器nmcli dev。如果是,您应该看到如下表:

DEVICE        TYPE                      STATE
ttyUSB2        gsm                      disconnected

(如果没有,您usb-modeswitch可能出现故障,并且您的系统找不到调制解调器。)

步骤3:启动 X 服务器:startx,从菜单中打开 NetworkManager 并创建新的“移动宽带”连接(“移动宽带”选项卡 >“添加”)。该向导将指导您完成整个过程,甚至让您选择提供商,这样您就不必费心进行 APN 设置。该工具将创建一个连接文件,/etc/NetworkManager/system-connections/您应该记下该文件的名称,因为它将在下一步中用作连接名称。

步骤4:正如我在问题中所说,我需要能够在没有 X 服务器的情况下从命令行运行它,方法是运行sudo nmcli con up id "Connection ID",连接 ID 是您在步骤 2 中创建的连接的名称。这应该全部。要断开连接,请执行sudo nmcli con down id "Connection ID".

相关内容