我有一个在 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 解决方案在处理与其驱动程序的传入连接时可能存在缺陷。
如果你们中有人遇到过 Debian/Rasbian/Linux 传入连接问题华为E3372s或相关3G/4G USB产品使用CDC_ETH并找到了这个问题的解决方案
答案1
您不需要固件更新,但您确实需要一个已找到的模式开关和一个您尚未找到的拨号器。以下配置文件,取自NVDC 内容 网络、虚拟化和数据中心内容可以开箱即用。如果不使用每个作为模板并进行调整,直到它开始工作:
/etc/usb_modeswitch.conf
DefaultVendor=0x12d1
DefaultProduct=0x14fe
TargetVendor= 0x12d1
TargetProduct= 0x1506
MessageContent="55534243123456780000000000000011062000000100000000000000000000"
/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
用法
/dev/gsmmodem
创建一个从到 的链接/dev/ttyUSB2
,即调制解调器。拨通外界的电话。请注意,您每次都必须执行此操作:
wvdial >/dev/null 2>&1 &
将以下内容添加到系统的本地启动脚本区域:
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 }
解释
正如我所解释的在之前的帖子中,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 拨号器或无线设备的原因。
使用模式开关打开调制解调器后,拨号,或其众多替代品之一,控制对外部世界的访问。当调制解调器处于调制解调器模式时,您最终将看到类似以下内容的输出:
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)
发行时ifconfig
答案2
我猜这是一个 NAT 问题。即使 ISP 没有对连接进行 NAT,华为也会对eth1
接口使用 NAT。
华为基本上有两种模式:
- 高联,它使用 NAT 并提供以太网接口。
- 非高链接,其中 PPP 或 NDIS 用于连接到移动提供商。
有很多教程如何通过刷新另一个固件来在两种模式之间进行更改。但是,由于在此过程中您可能会损坏调制解调器,因此我不会发布特定链接。
答案3
就我而言,我发现这就是我需要的 usb_modeswitch 配置
cat /etc/usb_modeswitch.d/huawei_e3372.conf
# modeswitch config file for the huawei e3372
DefaultVendor=0x12d1
DefaultProduct=0x1f01
TargetVendor= 0x12d1
TargetProduct= 0x14dc
MessageContent="55534243123456780000000000000011062000000100000000000000000000"
使用此命令运行并使调制解调器工作。
sudo usb_modeswitch -s 15 -I -H -c /etc/usb_modeswitch.d/huawei_e3372.conf
答案4
即使 LTE ISP 或华为正在进行 NAT,也有一个解决方法ssh -R
:如果您在互联网上拥有一台服务器,您可以通过 ssh 转发您的端口,例如对于 Tomcat:
ssh -R 4080:localhost:8080 my.cloud.server
并访问 pi 像
http://my.cloud.server:4080
OpenVPN 应该也能工作。