frpc连接失败问题排查
frpc 连接失败问题排查与修复笔记
一、问题现象
执行 podman logs frpc 发现以下错误:
[W] [client/service.go:319] connect to server error: dial tcp 49.235.100.182:52639: connect: no route to host
login to the server failed: dial tcp 49.235.110.18:52639: connect: no route to host关键点:
- frps 服务器地址:
49.235.100.182:52639 - 错误类型:
no route to host(无到达主机的路由) - 触发条件:frpc 更换了 IP 地址后出现此错误
二、初步排查:网络连通性测试
2.1 测试命令(无需安装额外工具)
# 测试基础网络
ping -c 4 49.235.100.182
# 测试端口连通性(使用 nc)
nc -zv 49.235.100.182 52639
# 使用 bash 内置 TCP 测试
timeout 3 bash -c "cat < /dev/null > /dev/tcp/49.235.100.182/52639" && echo "✓ 端口可达" || echo "✗ 端口不可达"2.2 安装 telnet(如需要)
# Debian/Ubuntu
sudo apt install telnet -y
# CentOS/RHEL
sudo yum install telnet -y
# Alpine Linux(容器环境)
apk add busybox-extras三、发现根本问题:设备无互联网连接
3.1 测试结果
ping www.baidu.com
# 输出:From orangepizero3 (192.168.1.10) icmp_seq=1 Destination Host Unreachable结论: Orange Pi Zero 3 设备没有互联网连接。
3.2 检查网络配置
# 查看 IP 地址
ip addr show end0
# 查看路由表
ip route show
# 查看 DNS 配置
cat /etc/resolv.conf输出显示:
- IP 地址:
192.168.1.10/24✅(局域网正常) - 路由表:
default via 255.255.255.0 dev end0❌(网关错误!)
问题根源: 默认网关被错误设置为 255.255.255.0(这是子网掩码,不是网关地址)。
四、临时修复网络
4.1 立即生效的临时修复
# 删除错误的默认路由
sudo ip route del default
# 添加正确的网关(通常是 192.168.1.1)
sudo ip route add default via 192.168.1.1
# 配置 DNS
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 114.114.114.114" | sudo tee -a /etc/resolv.conf
# 验证修复
ip route show
ping -c 3 192.168.1.1
ping -c 3 8.8.8.8
ping -c 2 www.baidu.com4.2 测试 frps 连接
nc -zv 49.235.100.182 52639
podman restart frpc
podman logs frpc --tail 20五、永久修复:修改 NetworkManager 配置
5.1 找到正确的配置文件
# 查看连接列表
nmcli connection show
# 查看配置文件目录
ls /etc/NetworkManager/system-connections/
# 示例输出:
# 'Wired connection 1.nmconnection'注意: 连接名称可能不是接口名(end0),而是 Wired connection 1 等。
5.2 错误的配置示例
[ipv4]
address1=192.168.1.10/24,255.255.255.0 # ❌ 多余掩码
dns=192.168.1.9;192.168.1.1;
ignore-auto-dns=true
ignore-auto-routes=true
may-fail=false
method=manual
# ❌ 缺少 gateway 行!5.3 正确的配置
[ipv4]
address1=192.168.1.10/24 # ✅ 正确格式
gateway=192.168.1.1 # ✅ 必须明确指定网关
dns=8.8.8.8;114.114.114.114; # ✅ 使用公网 DNS
ignore-auto-dns=true
ignore-auto-routes=true
may-fail=false
method=manual5.4 修复方法一:使用 nmcli 命令
# 修改配置
sudo nmcli connection modify "Wired connection 1" ipv4.addresses 192.168.1.10/24
sudo nmcli connection modify "Wired connection 1" ipv4.gateway 192.168.1.1
sudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8 114.114.114.114"
sudo nmcli connection modify "Wired connection 1" ipv4.ignore-auto-routes yes
sudo nmcli connection modify "Wired connection 1" ipv4.never-default no
# 重新激活
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "Wired connection 1"5.5 修复方法二:直接编辑配置文件
# 编辑配置文件
sudo nano "/etc/NetworkManager/system-connections/Wired connection 1.nmconnection"
# 修改 [ipv4] 部分(如上正确配置所示)
# 保存后设置权限
sudo chmod 600 "/etc/NetworkManager/system-connections/Wired connection 1.nmconnection"
# 重启服务
sudo systemctl restart NetworkManager5.6 修复方法三:删除并重建连接(最彻底)
# 删除旧连接
sudo nmcli connection delete "Wired connection 1"
# 重新创建
sudo nmcli connection add type ethernet con-name "Wired connection 1" ifname end0 \
ipv4.addresses 192.168.1.10/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 114.114.114.114" \
ipv4.method manual \
ipv4.ignore-auto-routes yes \
ipv4.ignore-auto-dns yes
# 启动连接
sudo nmcli connection up "Wired connection 1"六、nmui 图形界面配置建议
在 nmtui 中编辑连接时,以下选项的勾选建议:
| 选项 | 建议 | 原因 |
|---|---|---|
| Never use this network for default route | 不勾选 | 设备需要此网卡作为默认路由 |
| Ignore automatically obtained routes | 勾选 | 静态 IP 不需要 DHCP 路由 |
| Ignore automatically obtained DNS parameters | 勾选 | 使用手动指定的 DNS |
| Require IPv4 addressing for this connection | 勾选 | 确保 IPv4 配置成功才能激活连接 |
七、验证与测试
7.1 验证配置
# 查看路由表(应该只有一条正确的默认路由)
ip route show
# 期望输出:
# default via 192.168.1.1 dev end0 proto static metric 100
# 192.168.1.0/24 dev end0 ...
# 测试各层级连通性
ping -c 3 192.168.1.1 # 网关
ping -c 3 8.8.8.8 # 外网 IP
ping -c 2 www.baidu.com # 域名解析
# 查看 DNS 配置
cat /etc/resolv.conf7.2 完整验证脚本
#!/bin/bash
echo "=== 验证网络配置 ==="
echo -e "\n1. 当前路由表:"
ip route show | grep default
echo -e "\n2. 网关连通性:"
ping -c 2 192.168.1.1
echo -e "\n3. 外网连通性:"
ping -c 2 8.8.8.8
echo -e "\n4. DNS 解析:"
nslookup www.baidu.com
echo -e "\n5. frps 连通性:"
nc -zv 49.235.100.182 52639
echo -e "\n6. frpc 状态:"
podman logs frpc --tail 10八、常见问题与解决方法
8.1 出现两条默认路由
# 现象
default via 255.255.255.0 dev end0
default via 192.168.1.1 dev end0
# 解决:删除错误路由
sudo ip route del default via 255.255.255.08.2 重启后配置丢失
原因:NetworkManager 配置文件未正确修改或权限不对。
解决:
sudo chmod 600 /etc/NetworkManager/system-connections/*.nmconnection
sudo systemctl restart NetworkManager8.3 DNS 不生效
# 手动指定 DNS
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 114.114.114.114" | sudo tee -a /etc/resolv.conf
# 防止被覆盖
sudo chattr +i /etc/resolv.conf # 锁定文件(谨慎使用)九、关键经验总结
no route to host通常是网络配置问题,不是 frp 本身的问题。- 网关地址绝对不能是子网掩码(如
255.255.255.0),必须是同网段的一个 IP(通常是192.168.x.1)。 - NetworkManager 配置文件中必须显式指定
gateway,不能只在address1中写掩码。 - 重启服务前先临时修复,保证业务可用,再处理永久配置。
- 排查顺序: 本地 IP → 网关 → 外网 IP → DNS → 目标服务端口。
十、快速参考命令汇总
# 网络诊断
ip addr show # 查看 IP
ip route show # 查看路由表
ping -c 3 8.8.8.8 # 测试外网
nc -zv <IP> <端口> # 测试端口
# 路由修复
sudo ip route del default
sudo ip route add default via 192.168.1.1
# NetworkManager 操作
nmcli connection show # 列出连接
nmcli connection modify "名称" ipv4.gateway 192.168.1.1
nmcli connection up "名称"
# frp 操作
podman restart frpc
podman logs frpc --tail 20