我正在使用时下流行的华为 Brovi E3372-325 LTE USB 棒将 Linux 机器连接到互联网。特殊要求是传入的 ssh/ping/NTP/... 连接必须到达我的 Linux 操作系统。
状态是,使用usb_modeswitch -X
和option driver
我可以调出 3 个 ttyUSB 接口,并使用 成功连接wvdial
。但由于某种原因,ifconfig
没有列出 ppp0 接口的 HW/MAC 地址,并且同一 APN 网络上的设备无法 ping 我的 IP 地址。我不认为原因是 ISP 阻止,因为我的其他设备在网络上可以 ping 通。
输出ip addr
19: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 3
link/ppp
inet 10.250.0.112 peer 10.64.64.64/24 scope global ppp0
valid_lft forever preferred_lft forever
- 如果我没记错的话,我现在不使用 RNDIS。我对吗?一般来说,流行的 RNDIS 协议不适合我的用例,因为这会创建一个额外的本地网络,使得将传入连接转发到操作系统变得更加困难? Ping 可能从外部有效,因为这是由 USB 调制解调器本身应答的,但传入的 ssh 会失败。
- ppp0 没有 MAC 地址可能是什么原因?这怎么可能?我应该分配一个吗?可能是其他设备无法 ping 通其 IP 的原因吗?这种情况该如何解决呢?
答案1
如果我没记错的话,我现在不使用 RNDIS。
RNDIS 是 Windows 特定的网络接口驱动程序 API。嗯,这与你正在做的事情无关,对吧?
ppp0 没有 MAC 地址可能是什么原因?这怎么可能?
MAC地址是一个以太网概念;而且 PPP 不是以太网:)
PPP 的帧确实包含一个地址 - 但它只是一个字节长,并且总是设置为 0xFF,PPP 是一种点对点协议,您不需要更多地址(您知道您在与谁通话 - 另一端)。
我不认为原因是 ISP 封锁,因为我的其他设备在网络上可以 ping 通。
良好的调试。但请注意,移动网络运营商 (MNO) 通常采用运营商级 NAT 将大量用户隐藏在一个公共 IPv4 地址后面 - 甚至从理论上讲,忽略除拥有电话的人类之外的任何其他用户 - 只有 2^32 个可能的 IP 地址(忽略任何“特殊的“地址”),并且电话数量大致与人类数量一样多,因此大约一半的电话只有 IPv4 地址。这里要传达的信息是,如果您希望您的移动设备可以在全球范围内访问,则需要涉及一些额外的基础设施(例如 VPN 服务器),或者您需要使用 IPv6。我建议采用 IPv6——由于市场力量,对于大多数 MNO 来说,进出互联网的 IPv6 流量更便宜,因此他们可能会优先考虑这一点。
无论如何,你的问题是为什么它对你不起作用 - 事情是这样的:这是运营商级 NAT(该接口上的 IPv4 地址是私有地址!),保证不同的地址既没有保证也没有太多意义。订阅者可以直接相互联系。不过,它在其他设备上也适用,这很酷。
有点令人担忧的是,您只分配了一个 IPv4 地址,而不是 IPv6 地址(或整个 IPv6 子网)。这可能意味着您的 Linux 计算机的 pppd 未配置为接受 IPv6,或存在其他一些错误配置。
但更现实的是:PPP 是一种……旧协议,与移动网络基础设施的运行方式完全无关。 2.5G/GPRS/EDGE、3G/UMTS、4G/LTE、5G…等都是分组网络——您可以获得直接传输IP分组的接口;您没有获得需要通过 PPP 进行通信来建立数据包隧道的串行线路。
那么,一定会发生的事情是,您的 USB 调制解调器连接到移动网络,获取 IP 地址,并将其获得的 IP 数据包通过 PPP 隧道,然后似乎将其通过模拟串行链路发送到您的计算机?至少可以说,这是一种有趣的方法——也可以是 USB 网卡,并且开箱即用。事实上,这就是我手机上 USB 网络共享的工作原理,而且我过去的笔记本电脑也有内置调制解调器卡,也起到了同样的作用。
也许您的 USB 调制解调器有不同的操作模式,其中一种看起来像 1990 年代的拨号调制解调器,模仿连接到提供 PPP 的互联网服务提供商,以及仅使用 IP 路由器的不同模式?如果是这种情况,请使用后一种模式,并将其设置为将数据包转发到您的计算机。
因此,无论哪种方式,您的调制解调器都会参与破坏 IP 数据包;所以很可能这就是您传入的数据包丢失的地方。但是,也许您的其他设备也使用相同的 APN名义上,但如果他们使用不同的方式连接到移动网络,他们的数据包会在核心网络中走不同的路线,并且最终不会到达与调制解调器相同的专用网络;这里有很多不同之处,你的可见性为零。一般来说,您的 MNO 不会为您运营内部网络(除非您付费 – 例如使用特殊的 M2M 订阅),而是互联网接入;如果您无法在本地进行交流,请通过互联网进行交流。为此,您需要一个可以连接的全球 IP 地址。
如果你问我是否需要相互沟通:
- 使用 IPv6。这是您真正获得全球地址的最佳机会。仅当您确实必须时才回退到 IPv4。
- 获取一些具有静态公共地址的服务器。您的用户设备将根据您的 MNO 的意愿分配一个新的 IP 地址。
- 从您的每台设备建立到该公共地址的 VPN 连接 -wireguard 是一种出色的、相对低功耗的方法。这可能已经解决了您的所有问题。
- 如果您想在延迟方面变得聪明(大写的 S),您可以在不同设备检测到它们可以相互直接通信时立即在不同设备之间添加额外的直接网络路径 - 这需要在端点上运行一些软件,提供有关该设备的地址信息您的设备提供不同的网络接口,以及一个理解这些接口的守护进程。