CentOS 使用 FetchLinux 时网络不稳定的定位与优化
一、快速定位网络是否稳定
ip link、ip addr、ethtool <iface>(看 Link detected)、必要时 arping -D -I <iface> <ip> 检测 IP 冲突。ping -c 4 <目标>。ip route、traceroute <目标>(或 mtr <目标>)。ss -tulnp | grep <端口>、nc -zv <host> <port>、telnet <host> <port>。firewall-cmd --list-all、iptables -L -n -v、getenforce(必要时 setenforce 0 仅作临时验证)。journalctl -xe、tail -f /var/log/messages、tcpdump -i <iface> -nn host <目标> and port <端口>。二、常见根因与对应修复
ip link set <iface> up;将 ONBOOT=yes 写入网卡配置;统一使用 NetworkManager 或 network.service,避免并行管理。ip route add default via <网关IP> dev <iface>;在网卡配置中正确设置 GATEWAY。/etc/resolv.conf 添加 nameserver 8.8.8.8、nameserver 114.114.114.114,或写入网卡配置 DNS1/DNS2 后重载网络。firewall-cmd --list-all 规则,必要时临时停用验证;SELinux 可 setenforce 0 做 A/B 验证。三、FetchLinux 侧的稳健性配置
export http_proxy=http://<ip>:<port> https_proxy=http://<ip>:<port> no_proxy=localhost,127.0.0.1,.example.com;验证:env | grep -i proxy。fetchlinux --debug),并结合 journalctl -u fetchlinux -b 查看服务日志,快速定位握手、解析、连接阶段的问题。sudo yum update。四、一键排查与优化脚本
#!/usr/bin/env bash
set -Eeuo pipefail
IFACE=$(ip -o -4 route show default | awk '{print $5}' | head -n1)
GW=$(ip -o -4 route show default | awk '{print $3}' | head -n1)
echo "=== 网卡: $IFACE | 网关: $GW ==="
echo -n "1) 网卡状态: "
ip link show "$IFACE" | awk '/state UP/ {print "UP"; exit} {print "DOWN"}'
echo -n "2) 获取IP: "
ip -o -4 addr show dev "$IFACE" | awk '{print $4}' || echo "无IP"
echo -n "3) 默认路由: "
ip route | grep default || echo "无默认路由"
echo -n "4) 网关连通性: "
ping -c 4 -W 2 "$GW" >/dev/null && echo "OK" || echo "FAIL"
echo -n "5) 外网连通性: "
ping -c 4 -W 2 8.8.8.8 >/dev/null && echo "OK" || echo "FAIL"
echo -n "6) DNS解析: "
nslookup -type=A baidu.com >/dev/null 2>&1 && echo "OK" || echo "FAIL"
echo -n "7) 防火墙状态: "
firewall-cmd --state 2>/dev/null || echo "未运行或非 firewalld"
echo -n "8) SELinux: "
getenforce
echo -n "9) 镜像连通性(示例): "
curl -m 10 -I https://mirrors.aliyun.com/centos/ 2>/dev/null | head -n1 || echo "FAIL"
echo "10) 路径追踪到 8.8.8.8 (前10跳):"
traceroute -m 10 8.8.8.8 2>/dev/null || echo "未安装 traceroute/mtr"
使用方法:保存为 check_net.sh,执行 bash check_net.sh。根据输出优先处理“DOWN/无IP/无默认路由/FAIL”的项,再复测 FetchLinux。