我正在使用小米 Redmi Note 8T 的便携式热点。
我有 2 台 Linux 机器 - 一台是 Ubuntu,另一台是 Fedora - 已连接,我可以通过 找到两台机器的内部 IP ifconfig
。如果我找到ping
它们的 IP,它们就会相互响应。
现在,我在 Ubuntu 上设置了一个 Nginx 站点,该站点应该可以通过内部网络看到,但 HTTP 连接在 Fedora 上超时而没有任何回复:请注意,我在 Fedora 笔记本电脑上使用内部网络 IP 来避免主机名/DNS 问题。在同一个 Ubuntu 上,当我使用内部 IP 时,我可以看到 http 站点。
我也尝试过使用公共 IP(从 tracemyip.org 获取),但是即使在同一个 Ubuntu PC 上也不起作用(并且sudo ufw status
是inactive
),并且 ping 也不起作用。
这是由于移动运营商的原因还是我遗漏了什么?您能建议如何至少在内部网络上启用 HTTP 连接吗?
进一步测试
我也尝试过其他方法:在 Fedora 笔记本电脑而不是 Ubuntu 机器上设置网站,使用简单的python3 -m http.server
Nginx uwsgi flask 而不是更复杂的 Nginx uwsgi flask... 内部网似乎在同一台机器上本地工作,但无法从另一台机器访问连接,即使它们在同一个 Android 路由器下。
我猜测私人内联网被移动 Android 路由器阻止了,但我仍在寻求技术确认。
回复关于 nmap 的评论
我已经安装了nmap
。假设运行 http 服务器的 Ubuntu 机器的内部 IP(来自ifconfig
)为 192.168.43.236。
我在同一台 Ubuntu 机器上运行以下命令。
nmap 192.168.43.236 -p 8080
Nmap scan report for myubuntu (192.168.43.236)
Host is up (0.00018s latency)
PORT STATE SERVICE
8080/tcp open http-proxy
在另一台 Fedora 机器上
nmap 192.168.43.236 -p 8080
Starting Nmap 7.80 ( https://nmap.org ) at 2020-05-25 23:59 CEST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.04 seconds
但
ping 192.168.43.236
PING 192.168.43.236 (192.168.43.236) 56(84) bytes of data.
64 bytes from 192.168.43.236: icmp_seq=1 ttl=64 time=161 ms
64 bytes from 192.168.43.236: icmp_seq=2 ttl=64 time=186 ms
也尝试过
nmap 192.168.43.236 -Pn -p 8080
Starting Nmap 7.80 ( https://nmap.org ) at 2020-05-26 00:04 CEST
Nmap scan report for home (192.168.43.236)
Host is up.
PORT STATE SERVICE
8080/tcp filtered http-proxy
Nmap done: 1 IP address (1 host up) scanned in 2.05 seconds
回复有关 netstat 的评论
为了简化,让我使用 Fedora 作为服务器,我只需执行
python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/)
我看见
netstat -an|grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
nmap
但是从 Ubuntu 来看,使用选项 -Pn 查看 Fedora 端口 8000的状态是filtered
(另一方面,保持其余所有不变,状态是nmap
我open
在同一台机器上检查时的状态)。
结论
我将一台机器连接到我的手机 wifi 路由器。我看到分配的 ip ifconfig
。我在端口上启动一个 http 服务器(例如 8000 上的 python 或 8080 上的 nginx),并且 - 在同一台机器上 - 我使用 nmap 或 netstat 或使用 firefox 检查上述 ip 和端口,一切正常。在连接到同一 wifi 路由器的另一台机器上,ip 被过滤掉,无法访问。我怀疑这是我的小米的“安全”功能,可能针对 wifi 探测……或类似的东西,我不认为这取决于 Linux 机器配置。
我必须尽快尝试使用其他型号的手机。我已经用其他手机测试过了,一切正常,所以问题出在上述手机上
路由表
这是显示我的手机路由表的命令:
ip route show dev wlan0 table all
192.168.43.0/24 table 97 proto static scope link
192.168.43.0/24 proto kernel scope link src 192.168.43.1
broadcast 192.168.43.0 table local proto kernel scope link src 192.168.43.1
local 192.168.43.1 table local proto kernel scope host src 192.168.43.1
broadcast 192.168.43.255 table local proto kernel scope link src 192.168.43.1
fe80::/64 table 1029 proto kernel metric 256 pref medium
anycast fe80:: table local proto kernel metric 0 pref medium
local fe80::a64b:d5ff:fe06:1bd7 table local proto kernel metric 0 pref medium
ff00::/8 table local metric 256 pref medium
答案1
答案是肯定的,我刚刚测试过这一点。
使用两台电脑
- 一个在 Ubuntu 16.04 上,运行防火墙,因此仅用于传出连接)
- Ubuntu 19.10 上有一个
一旦它们都连接到我的 Android 手机上的热点(*)。
ip address show
192.168.43.4
在 16.04 和192.168.43.227
19.10 上均显示。这些是本地热点 LAN 中的地址。
然后使用本地地址(192.168.43.*):
- 两台机器可以互相 ping 通。
- 我可以成功地
ssh
从 16.04 升级到 19.10 - 我可以从 16.04 成功地向 19.10 中端口 8000 上的 HTTP 服务器发出 HTTP 请求。
(*) 小米 Redmi Note 7,Android 9 PKQ1.180904.001,MIUI Global 11.0.7.0。
答案2
截至 2020 年 11 月 24 日更新
小米上次内核和Android更新后:
MIUI 全球版 12.0.1 (QCXEUXM)
Android 版本 10
问题似乎终于解决了!
我还注意到,现在查看 termux 的 ip 表时,有一行在提出问题时并不存在(正如我所说,我的手机没有 root 权限,所以我无法以任何方式更改它们)
fe80::/64 table 97 proto static metric 1024 pref medium
以下所有内容仅用于历史追踪。
执行摘要
iptables
这是特定Android内核部分的配置问题。
细节
我已经尝试过我姐姐的手机:三星 Galaxy A30。一切顺利。
当然是我的红米热点的问题。
我的问题的答案是,使用这样的手机小米 Redmi Note 8T(Android 9PKQ1.190616.001 MIUI Global 11.0.7.0 PCXEUXM)无法做到这一点:它充当路由器,但网络交换在内核/rom 级别被阻止(事实上,在与 ip 过滤相关的其他方面中,您必须是 root 才能访问 NAT iptables
- 例如参见描述的类似情况这里- 等等...直到您遇到 Qualcomm Snapdragon sm6125 SoC 的 MSM 驱动程序中的 Internet Packet Accelerator 防火墙)。必须使用另一个设备。除非你 root 它,否则这对我来说不是一个选择。
有关的github 问题在Redmi Note 8T的Android内核开源中,代号为xiaomi-willow
。
解决方法
由此在 android.stackexchange 上回答,您可以安装一个代理服务器应用程序(或开源在有问题的手机上安装一个代理服务器(相当于),然后在 Firefox 中设置手动代理 192.168.43.1 端口 38665(或curl --proxy http://192.168.43.1:38665 http://192.168.43.xxx:pppp
)从内部/热点 LAN 中的另一台机器。当然,在 Web 服务器端,您的 nginx+flask 配置没有任何变化,但需要对 python 进行一些修复http.server
(请参阅3servProxy.py,假设 Web 服务器绑定192.168.43.239:8000
)