Fedora Linux连接CentOS Samba服务报错‘No route to host’求助
我来帮你一步步排查这个问题,“No route to host”本质是网络层面的连通性故障,但结合Samba服务的场景,我们可以从基础到深入逐步定位:
第一步:验证基础网络连通性
先确认Fedora客户端和CentOS服务端的基础网络是通的,在Fedora终端执行:ping 192.168.1.76- 如果ping不通:说明问题出在底层网络,比如IP配置错误、子网掩码不匹配、物理链路故障(网线松脱、交换机端口异常),先解决这个基础问题再继续。
- 如果ping通了:说明网络层没问题,接下来检查Samba服务的端口可达性。
第二步:测试Samba核心端口的连通性
Samba依赖TCP 139(NetBIOS会话服务)、TCP 445(SMB直接访问),还有UDP 137/138(NetBIOS名称解析),用nc工具测试端口是否开放:# 测试TCP 139端口 nc -zv 192.168.1.76 139 # 测试TCP 445端口 nc -zv 192.168.1.76 445如果提示“Connection refused”或者超时,说明端口被拦截,重点检查服务端防火墙。
第三步:检查CentOS服务端的防火墙配置
CentOS默认使用firewalld,先确认是否允许Samba服务的流量:# 查看当前已允许的服务 firewall-cmd --list-services如果输出里没有
samba,添加并重启防火墙:firewall-cmd --add-service=samba --permanent firewall-cmd --reload要是你的CentOS用的是旧版iptables,手动开放端口:
# 开放TCP 139/445和UDP 137/138 iptables -A INPUT -p tcp --dport 139 -j ACCEPT iptables -A INPUT -p tcp --dport 445 -j ACCEPT iptables -A INPUT -p udp --dport 137 -j ACCEPT iptables -A INPUT -p udp --dport 138 -j ACCEPT # 保存规则并重启服务 service iptables save service iptables restart第四步:排查SELinux限制
CentOS的SELinux可能会默认阻止Samba对外提供服务,先临时关闭SELinux测试:setenforce 0再尝试访问
smb://192.168.1.76,如果能正常访问,说明是SELinux的问题,需要配置允许Samba服务:# 永久允许Samba访问主目录(如果共享的是主目录) setsebool -P samba_enable_home_dirs on # 如果共享的是自定义目录,调整目录的SELinux上下文 chcon -t samba_share_t /path/to/your/shared/folder配置完成后,恢复SELinux的强制模式:
setenforce 1第五步:确认Samba服务的监听状态
虽然smb-status和nmb-status显示ONLINE,但还是要确认服务是否在监听所有网卡(不是仅localhost):netstat -tulpn | grep smbd netstat -tulpn | grep nmbd正常输出应该能看到
smbd监听0.0.0.0:139和0.0.0.0:445,nmbd监听UDP的137/138端口,确保没有绑定到127.0.0.1。第六步:检查Fedora客户端的防火墙
别忽略客户端的防火墙限制,Fedora的firewalld可能会阻止出站的SMB请求:firewall-cmd --list-services --zone=public如果没有
smb-client,添加并重启防火墙:firewall-cmd --add-service=smb-client --permanent firewall-cmd --reload
按照这个顺序排查,大部分情况下都能定位到问题——大概率是防火墙或者SELinux的拦截导致的。
内容的提问来源于stack exchange,提问作者sysadmin umesh

