华为 E3372s + Linux (Rasbian),传入连接问题

Jan*_*nen 7 modem 3g raspbian huawei lte

我有一个在 Raspberry Pi 2+ 上运行的基于 Linux 的操作系统(Rasbian),它使用华为 E3372s 4G/LTE USB 记忆棒进行互联网连接。

我所有的出站连接都运行良好(使用 usb_modeswitch-ruling 和 Udev/rules.d 更改了华为 USB 模式),但我无法接收到任何类型的 Raspi 入站连接。传入只是不工作

无法接收任何数据包或连接,我使用 Raspbian 包分发提供的工具实时跟踪和从日志中跟踪这些数据包或连接。

我已经与我的 4G ISP 确认,允许双向流量的扩展服务已启用、重置和他们的很多知识,到我的 3G/4G 订阅,从他们的一端完美运行,但我无法接收任何数据包拉斯皮。

华为 E3372s(与大多数使用类似拨号的旧棒不同wvdial)使用CDC_ETH驱动系统,它为系统(在本例中为 ETH1)创建了一个类似以太网的设备,并且在这种情况下应该可以完美地工作。

我已经清除、重新创建、测试、修改、重新清除并再次使用 IPTables 完成所有需要的任务,多次检查、修改和测试路由,并确认没有已知的阻止系统阻止通过华为 USB 记忆棒连接,但我的系统甚至无法接收到 Ping,尽管有功能齐全的服务正在运行。

我还检查了更简单和直接的区域,例如主机允许/拒绝规则,但对它们并不走运。它也不是 APN 名称,因为华为内部配置的所有设置都已使用其 Web 界面正确设置。

但是,我在随机论坛中偶尔遇到过,华为 CDC_ETH 解决方案在处理与其驱动程序的传入连接时可能存在缺陷。

如果您有使用 CDC_ETH 的华为 E3372s或相关 3G/4G USB 产品的Debian/Rasbian/Linux 传入连接问题的经验并找到解决此问题的方法

eyo*_*100 6

您不需要固件更新,但您确实需要一个模式开关(您已找到)和一个拨号器(您尚未找到)。以下配置文件取自NVDC Stuff Networking、Virtualization 和 Data Center Stuff,可能开箱即用。如果不将每个都用作模板并进行调整,直到它开始工作:

/etc/usb_modeswitch.conf

DefaultVendor=0x12d1
DefaultProduct=0x14fe

TargetVendor=  0x12d1
TargetProduct= 0x1506

MessageContent="55534243123456780000000000000011062000000100000000000000000000"
Run Code Online (Sandbox Code Playgroud)

/etc/wvdial.conf

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0
Init3 = AT+CGDCONT=1,"IP","internet.t-mobile.cz"
Stupid Mode = 1
ISDN = 0
Modem Type = Analog Modem
New PPPD = yes
Phone = *99***#
Modem = /dev/gsmmodem
Username = { }
Password = { }
Baud = 9600
Run Code Online (Sandbox Code Playgroud)

用法

  1. 创建从/dev/gsmmodem到的链接/dev/ttyUSB2,即调制解调器。
  2. 拨打外面的世界。请注意,您必须每次都这样做:

    wvdial >/dev/null 2>&1 &
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将以下内容添加到系统的本地启动脚本区域:

    MODEM_STORAGE="12d1:14fe"
    MODEM_MODEM="12d1:1506"
    
    # 0 = storage, 1= modem
    MODEM_MODE=0
    
    check_modem_mode () {
     echo -n "Checking modem presence... "
    
     lsusb | grep --quiet "$MODEM_STORAGE"
    
     if [ $? -eq 0 ]; then
      MODEM_MODE=0
      echo "OK: modem in mass storage mode"
     else
      lsusb | grep --quiet "$MODEM_MODEM"
      if [ $? -eq 0 ]; then
       MODEM_MODE=1
       echo "OK: modem in modem mode"
      else
       echo "ERROR: modem not found"
       exit 1
      fi
     fi
    }
    
    set_modem_mode () {
     while [ $MODEM_MODE -eq 0 ]
     do
      echo -n "Setting modem mode... "
      usb_modeswitch -s 15 -I -H -c /etc/usb_modeswitch.conf     >/dev/null 2>&1
      lsusb | grep --quiet "$MODEM_MODEM"
      if [ $? -eq 0 ]; then
       MODEM_MODE=1
       echo "OK"
      else
       echo "FAILED"
      fi
     done
    }
    
    Run Code Online (Sandbox Code Playgroud)

解释

正如我在上一篇文章中解释的那样,GSM 调制解调器总是有两个或更多部分,在这个模型的情况下是 3 个部分。

  • 存储区,类似于 USB 记忆棒。
  • 用于将多个设备连接到它的无线以太网适配器。
  • PPP 拨号器,以便您的无线提供商知道您是付费客户,并且可以根据需要向您收取超额费用。既然可以证明自己是付费客户,因为PPPoE需要认证,所以可以使用协商好的IP地址上网。

子弹 1 和 2 是通过etc/modeswitch.conf配置文件控制的。12d1是供应商 MAC 地址,可以这么说。使用本地脚本创建 MAC 地址的其余部分。 12:D1:14:FE,最终成为存储设备,12:D1:15:06最终成为调制解调器。如果不使用本地脚本问题usb_modeswitch -s 15 -I -H -c /etc/usb_modeswitch.conf

注意:默认情况下,即没有模式开关,Linux 只能看到存储设备,这就是为什么 OP 无法看到或使用 PPP 拨号器或无线设备的原因


使用模式开关打开调制解调器后,wvdial或其众多替代品之一将控制对外部世界的访问。调制解调器处于调制解调器模式时,您最终将看到类似于以下内容的输出:

wwan0     Link encap:Ethernet  HWaddr 58:2c:80:13:93:13
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:10.83.249.176  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:4265 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6699 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:506706 (494.8 KiB)  TX bytes:600991 (586.9 KiB)
Run Code Online (Sandbox Code Playgroud)

发行时 ifconfig