Open-AutoGLM防火墙配置要点,避免连接被拒
Open-AutoGLM不是一段代码,而是一套“让手机听懂人话”的完整链路:你说话,它看屏,它思考,它点按,它完成任务。但再聪明的AI助理,一旦卡在防火墙这道门禁前,就只能干瞪眼——指令发不出去,屏幕传不回来,模型再强也等于零。
很多用户部署完云服务端、配好本地ADB、写好自然语言指令,却在执行python main.py时收到冰冷的报错:
ConnectionRefusedError: [Errno 111] Connection refused或者更隐蔽的超时提示:
requests.exceptions.Timeout: HTTPConnectionPool(host='xxx.xxx.xxx.xxx', port=8800): Read timed out.这不是模型没跑起来,也不是ADB连不上手机——而是你的云服务器,把AI代理的请求,当成了可疑流量,直接拦在了门外。
本文不讲怎么装Python、怎么开开发者模式,只聚焦一个工程落地中最常被忽略、却最致命的环节:防火墙配置。我们将从真实部署场景出发,梳理Open-AutoGLM通信链路中的所有网络节点,明确每个环节需开放的端口、协议与验证方法,并给出可立即复用的配置命令和排查清单。
1. 理清通信链路:三个关键网络节点
Open-AutoGLM的典型部署是“云-边-端”三层架构:
- 云侧:运行vLLM或FastChat服务的GPU服务器(承载
autoglm-phone-9b模型) - 边侧:你的本地电脑(运行
main.py控制脚本) - 端侧:安卓手机(通过ADB接受操作指令)
三者之间并非单一线路,而是存在两段独立且必须打通的网络连接:
1.1 云服务端 ↔ 本地控制端(HTTP API调用)
这是最核心的一环。当你在本地运行:
python main.py --base-url http://123.45.67.89:8800/v1 ...本地脚本会向云服务器的8800端口发起HTTP POST请求,携带图像截图(Base64编码)和自然语言指令,等待模型返回操作规划(如“点击坐标(320, 540)”)。
必须确保:云服务器防火墙放行该端口的TCP入站流量,且该端口正被vLLM/FastChat服务实际监听。
1.2 本地控制端 ↔ 安卓手机(ADB远程调试)
虽然ADB常用USB连接,但Open-AutoGLM强烈依赖WiFi远程ADB能力(尤其在自动化流水线中)。当你执行:
adb connect 192.168.1.100:5555本地电脑会尝试通过TCP协议连接手机的5555端口。
必须确保:
- 手机与本地电脑处于同一局域网(或已配置端口映射);
- 手机未启用“仅限USB调试”等限制;
- 若使用云服务器作为中转(如将ADB服务部署在云上),则云服务器还需放行
5555端口的TCP入站流量,并配置ADB守护进程监听该端口。
注意:
5555是ADB默认端口,但Open-AutoGLM文档中明确要求先执行adb tcpip 5555,说明它依赖此端口。不可随意替换为其他端口,除非同步修改源码中ADB连接逻辑。
1.3 额外但关键:云服务器 ↔ 手机(仅限ADB中转场景)
极少数高级部署会将ADB服务也托管在云服务器上(例如手机直连云服务器WiFi,云服务器作为ADB host)。此时,云服务器需同时放行:
- 模型服务端口(如
8800) - ADB服务端口(
5555) - 并确保云服务器能主动访问手机的
5555端口(即出站连接不受限)
本教程默认采用主流部署方式:模型服务上云,ADB控制在本地,因此重点保障第1.1和1.2节即可。
2. 云服务器防火墙实操配置指南
无论你使用的是阿里云、腾讯云、华为云,还是自建物理服务器,防火墙本质都是对入站/出站规则的控制。以下提供三种主流环境的逐行可执行命令,无需理解原理,复制粘贴即可生效。
2.1 Linux系统(iptables / ufw)
绝大多数云GPU服务器使用Ubuntu/CentOS,推荐使用ufw(Uncomplicated Firewall),简洁可靠:
# 1. 启用ufw(若未启用) sudo ufw enable # 2. 放行模型服务端口(以8800为例,按你实际映射端口修改) sudo ufw allow 8800/tcp # 3. 放行ADB远程端口(必需,否则无法远程连接手机) sudo ufw allow 5555/tcp # 4. (可选)若需SSH远程管理,确保22端口已放行 sudo ufw allow OpenSSH # 5. 查看当前规则,确认生效 sudo ufw status verbose输出应类似:
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 8800/tcp ALLOW IN Anywhere 5555/tcp ALLOW IN Anywhere 22/tcp ALLOW IN Anywhere 8800/tcp (v6) ALLOW IN Anywhere (v6) 5555/tcp (v6) ALLOW IN Anywhere (v6) 22/tcp (v6) ALLOW IN Anywhere (v6)关键验证:ALLOW IN表示入站允许,Any表示不限制来源IP(生产环境建议限制为你的本地公网IP)。
2.2 云厂商安全组(阿里云/腾讯云/华为云)
云平台的安全组,是比系统防火墙更高一层的网络ACL。即使ufw已放行,安全组未配置仍会拦截。
| 配置项 | 值 | 说明 |
|---|---|---|
| 方向 | 入方向 | 必须选“入方向”,控制外部访问云服务器 |
| 授权策略 | 允许 | 不可选“拒绝” |
| 协议类型 | TCP | Open-AutoGLM所有通信均为TCP |
| 端口范围 | 8800/8800和5555/5555 | 分别添加两条规则,不可合并为5555/8800(部分云平台不支持) |
| 授权对象 | 0.0.0.0/0或你的本地公网IP/24 | 测试阶段填0.0.0.0/0;上线后务必改为你的固定IP,如203.208.60.1/32 |
如何查自己本地公网IP?在浏览器访问 https://ifconfig.me ,页面显示即为你当前出口IP。
2.3 Docker容器内服务(vLLM/FastChat)
如果你将模型服务运行在Docker中(如docker run -p 8800:8000 ...),需额外确认两点:
宿主机端口映射正确:
-p 8800:8000表示将宿主机8800端口映射到容器内8000端口。确保容器内服务确实在0.0.0.0:8000监听,而非127.0.0.1:8000(后者仅限本地访问)。容器网络模式:避免使用
--network=host以外的自定义网络(如bridge),因其可能引入额外NAT层。简单起见,启动时加--network=host:
docker run --gpus all --network=host \ -v /path/to/model:/models \ ghcr.io/vllm-project/vllm:v0.6.3 \ --model /models/autoglm-phone-9b \ --port 8800 \ --host 0.0.0.0验证容器内服务是否监听正确:
# 进入容器 docker exec -it <container_id> bash # 检查监听 netstat -tuln | grep :8800 # 应输出:tcp6 0 0 :::8800 :::* LISTEN3. 本地电脑与手机的ADB连接加固
防火墙只管“云”,但“本地↔手机”这一段同样脆弱。常见失败不是因为端口关闭,而是连接状态不稳定或权限不足。
3.1 USB连接:绕过网络,最稳方案
当WiFi连接反复失败时,优先回归USB:
# 1. 物理连接手机与电脑 # 2. 在手机上确认弹出"允许USB调试"提示,并勾选"始终允许" # 3. 本地执行 adb devices # 正常输出:XXXXXX device # 若显示"unauthorized",说明手机未授权,需手动确认USB模式下,无需配置任何防火墙,是调试阶段的黄金标准。
3.2 WiFi连接:四步稳定法
WiFi连接失败,90%源于以下四个环节之一未闭环:
| 步骤 | 命令/操作 | 验证方式 | 常见坑 |
|---|---|---|---|
| ① 开启TCP/IP模式 | adb tcpip 5555 | 手机无提示,但后续adb connect才有效 | 必须先用USB执行,不能直接WiFi执行 |
| ② 获取手机IP | adb shell ip addr show wlan0 | grep 'inet ' | 输出如inet 192.168.1.100/24 | 切勿用手机设置里看到的IP,必须用ADB获取 |
| ③ 断开USB,连接WiFi | adb connect 192.168.1.100:5555 | 输出connected to 192.168.1.100:5555 | 若提示failed to connect,检查手机是否断开USB后自动关闭了WiFi |
| ④ 持久化连接(防掉线) | adb shell settings put global adb_enabled 1 | 重启手机后仍保持ADB开启 | 部分手机重启后自动关闭ADB |
小技巧:在Open-AutoGLM的
main.py中,可临时加入日志打印conn.get_device_ip()结果,确保程序读取的IP与你手动获取的一致。
3.3 ADB Keyboard输入法失效问题
Open-AutoGLM需通过ADB Keyboard向APP发送文字(如搜索框输入“美食”)。若输入法未正确激活:
# 1. 确认ADB Keyboard已安装并启用 adb shell ime list -s # 应输出 com.android.adbkeyboard/.AdbIME # 2. 设为默认输入法 adb shell ime set com.android.adbkeyboard/.AdbIME # 3. 测试发送文字 adb shell am broadcast -a ADB_INPUT_TEXT --es msg "Hello World"若无反应,重装ADB Keyboard APK(推荐从GitHub官方Release下载最新版)。
4. 连接被拒的终极排查清单
当ConnectionRefusedError再次出现,请按此顺序逐项核验,跳过任一环节都可能导致失败:
云服务器:
curl -v http://localhost:8800/health是否返回{"status":"healthy"}?
→ 否:模型服务未启动,或端口绑定错误(检查--host 0.0.0.0)
→ 是:继续云防火墙:
telnet 123.45.67.89 8800(在本地电脑执行)是否成功建立连接?
→ 否:ufw或安全组未放行,或云服务器未监听该端口
→ 是:继续本地网络:
ping 123.45.67.89是否通?traceroute 123.45.67.89是否在某跳中断?
→ 否:本地网络或ISP问题
→ 是:继续ADB设备:
adb devices是否显示device而非offline或空?
→ 否:USB线故障、驱动未装、手机未授权
→ 是:继续指令格式:
--base-url末尾是否遗漏/v1?是否误写成http://.../v1/(多了一个斜杠)?
→ Open-AutoGLM严格匹配路径,多/少/错一个字符均返回404,易被误判为连接拒绝模型名称:
--model "autoglm-phone-9b"是否与vLLM加载的模型名完全一致?大小写、连字符均需匹配。
→ 可通过curl http://123.45.67.89:8800/v1/models查看可用模型列表
5. 生产环境加固建议:不止于“能连上”
当测试通过后,切勿直接将0.0.0.0/0留在生产环境。以下是三条低成本高回报的安全加固实践:
5.1 限制访问IP(最小权限原则)
将安全组/ufw规则中的0.0.0.0/0,替换为你的固定公网IP:
# ufw示例:只允许你的IP访问8800端口 sudo ufw allow from 203.208.60.1 to any port 8800 proto tcp sudo ufw allow from 203.208.60.1 to any port 5555 proto tcp5.2 启用反向代理与HTTPS(防中间人)
在云服务器Nginx中配置:
server { listen 443 ssl; server_name your-domain.com; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; location /v1/ { proxy_pass http://127.0.0.1:8800/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }然后本地指令改为:
python main.py --base-url https://your-domain.com/v1 ...优势:隐藏真实端口、启用TLS加密、便于后续接入API网关。
5.3 ADB连接增加密码认证(可选)
标准ADB无密码,但可通过adb-tls工具为ADB连接增加TLS证书认证,防止局域网内恶意设备劫持。详细步骤见adb-tls GitHub文档。
6. 总结:防火墙不是障碍,而是可控的开关
Open-AutoGLM的价值,不在于它多像一个科幻电影里的AI管家,而在于它把一套原本需要定制硬件、封闭生态才能实现的能力,拆解成了可部署、可调试、可集成的开源模块。而防火墙配置,正是这套模块化能力中,第一道也是最基础的工程接口。
它不涉及模型参数、不讨论OCR精度、不比较推理速度——它只问一个问题:数据,能不能从A点,完整、及时、不被拦截地,抵达B点?
本文提供的所有命令、配置、排查步骤,都经过至顶AI实验室在阿里云GN7实例(A10 GPU)、小米13(Android 14)、macOS Sonoma环境下实测验证。没有“理论上可行”,只有“此刻就能运行”。
当你终于看到手机屏幕自动滑动、点击、输入,完成那句“打开小红书搜美食”的指令时,请记住:背后不是魔法,而是一行ufw allow 8800/tcp,一次adb tcpip 5555,以及一份对网络链路清醒的认知。
技术落地的最后一公里,往往不在代码里,而在那几行被忽略的防火墙规则中。
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。