
为实验室配网络配置与 SSH 远程连接排错的一次经历仅作分享。内容已经进行脱敏IP地址非真实IP。主题从“进不去系统”到“配置 IP、连接 WiFi、开启 SSH、排查公网与局域网远程连接”的完整实践记录。说明本文已对用户名、SSID、MAC 地址、公网 IP、内网 IP、路径和密码等信息进行脱敏所有地址均为示例。适用对象刚接触 Linux 服务器、CentOS 7、SSH 远程连接、校园网/内网环境排错的同学。实验环境普通台式主机 / CentOS Linux 7 / 有线公网 IP / 校园 WiFi / 手机热点 / Windows 客户端 / SSH 客户端。一、背景说明这次实践的目标很简单给一台进不去系统的 CentOS 7 主机重新设置密码、配置网络并让它可以像 云服务器平台 云服务器一样通过 SSH 地址、端口、用户名、密码进行远程登录。但实际过程并不简单中间遇到了很多典型问题不知道 root 密码无法登录系统需要通过 GRUB 单用户模式重置密码有线网卡配置了公网 IP但网关不通Windows 电脑能 ping 通网关但 ping 不通服务器公网 IP学校 WiFi 下服务器能上网但 Windows 不能 SSH 进服务器误以为“同一个 WiFi”就一定能互通最后发现能上网不等于能被别人连进来还尝试了手机热点、WiFi、SSH 密码登录、普通用户、私钥、ZeroTier、Tailscale、Stowaway、Proxifier 等思路。这篇文章会把整个排错过程整理成一份教学博客重点讲清楚CentOS 7 如何重置 root 密码如何配置有线静态 IP如何配置 WiFi如何开启 SSH为什么 ping 通不代表 SSH 能连为什么服务器能上网不代表别人能连进来以及外地的人想 SSH 进来到底应该怎么做。二、第一阶段忘记密码进入系统重置 root 密码刚开始这台 CentOS 主机无法登录因为不知道账号密码。如果你有物理控制台或虚拟机控制台可以通过 GRUB 进入 emergency mode重置 root 密码。重启服务器在 GRUB 菜单界面按e编辑启动项。找到类似下面这一行linuxefi /vmlinuz-3.10.0-1160.el7.x86_64 root/dev/mapper/centos-root ro ...把里面的ro改成rw init/sysroot/bin/sh然后按Ctrl X启动进入救援环境。进入 emergency shell 后执行chroot/sysroot然后重置 root 密码passwdroot输入两遍新密码。成功后一般会提示passwd: all authentication tokens updated successfully.CentOS 7 如果启用了 SELinux重置密码后建议执行touch/.autorelabel然后退出并重启exitreboot如果reboot不生效可以执行exec/sbin/init重启后就可以用新 root 密码登录系统。三、第二阶段查看网卡信息登录系统后第一步是查看网卡ipaddr或者nmcli device当时机器里主要看到这些网卡lo loopback p8p1 ethernet wlp3s0 wifi enp0s20u2 手机 USB 共享网卡其中lo是本地回环不用管p8p1是有线网卡wlp3s0是无线网卡enp0s20u2是手机 USB 共享网络时出现的临时网卡。四、第三阶段配置有线公网 IP当时拿到的信息是网关203.0.113.9 掩码10.0.99.1 DNS1公共DNS-A DNS210.0.99.2掩码10.0.99.1对应 CIDR/29。这个网段大致是网络地址203.0.113.8 可用地址203.0.113.9 - 10.0.99.3 广播地址203.0.113.15其中.233通常作为网关所以服务器本机 IP 可以尝试203.0.113.10但要注意这只是根据网关推测出来的地址真实环境中必须以管理员分配为准。CentOS 7 的网卡配置文件一般在/etc/sysconfig/network-scripts/有线网卡p8p1对应配置文件/etc/sysconfig/network-scripts/ifcfg-p8p1编辑vi/etc/sysconfig/network-scripts/ifcfg-p8p1写入或修改成TYPEEthernet BOOTPROTOstatic NAMEp8p1 DEVICEp8p1 ONBOOTyes NM_CONTROLLEDyes DEFROUTEyes IPADDR203.0.113.10 PREFIX29 GATEWAY203.0.113.9 DNS1公共DNS-A DNS210.0.99.2如果原来有HWADDR一般可以保留只要它和当前网卡 MAC 地址一致。查看当前网卡 MACipaddr show p8p1如果HWADDR不一致要么改成一致要么删掉HWADDR这一行。重启网络systemctl restart network查看 IP 和路由ipaddr show p8p1iproute正常应该看到inet 203.0.113.10/29默认路由类似default via 203.0.113.9 dev p8p1五、第四阶段有线公网为什么还是不通5.1 关键报错NO-CARRIER当时ip addr show p8p1里出现过p8p1: NO-CARRIER,BROADCAST,MULTICAST,UP state DOWN这里的NO-CARRIER非常关键。它表示网卡没有检测到物理链路。也就是说可能是网线没插好、网线坏了、墙口或交换机端口没开、交换机端口没有信号、插错口、对端设备没开、端口 VLAN 不对。这时候即使 IP 配得再正确也无法通信。5.2 关键报错Destination Host Unreachable尝试 ping 网关ping203.0.113.9返回From 203.0.113.10 Destination Host Unreachable这个意思是本机知道要找203.0.113.9但根本找不到到达它的路径或二层邻居。5.3 关键报错ARP INCOMPLETE查看邻居表ipneigh看到203.0.113.9 dev p8p1 INCOMPLETE这说明系统正在问谁是 203.0.113.9请告诉我你的 MAC 地址。但网关没有回应 ARP。这通常意味着网线或端口不通这个交换机端口不在对应公网 VLAN网关并不在当前二层网络IP 或掩码不对MAC 被绑定或者运营商线路没有开通。5.4 Windows 能 ping 网关不代表服务器公网 IP 通Windows 上能 ping 通ping 203.0.113.9只能说明 Windows 能访问这个公网网关。但服务器真正的公网 IP 是203.0.113.10如果ping 203.0.113.10不通说明服务器这个公网 IP 还没有真正对外可达。不能把.233网关当成服务器 IP。六、第五阶段改用无线网卡无线网卡为wlp3s0查看nmcli device最开始可能显示wlp3s0 wifi unavailable或者日志里出现WiFi plugin not available这说明可能缺少NetworkManager-wifi wpa_supplicant由于有线没通安装 WiFi 插件需要临时联网于是使用手机 USB 共享网络。插入手机打开 USB 网络共享。CentOS 上查看ipaddr nmcli device出现新网卡enp0s20u2自动获取 IPdhclient enp0s20u2测试pingbaidu.com如果通说明临时联网成功。6.1 解决 CentOS 7 yum 源失效CentOS 7 默认源经常访问mirrorlist.centos.org但现在 CentOS 7 已停止维护默认源可能失效需要换成 Vault 源或国内镜像。例如使用阿里云 CentOS Vault 源cat/etc/yum.repos.d/CentOS-Base.repoREPO [base] nameCentOS-7.9.2009 - Base baseurlhttp://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/ enabled1 gpgcheck0 [updates] nameCentOS-7.9.2009 - Updates baseurlhttp://mirrors.aliyun.com/centos-vault/7.9.2009/updates/x86_64/ enabled1 gpgcheck0 [extras] nameCentOS-7.9.2009 - Extras baseurlhttp://mirrors.aliyun.com/centos-vault/7.9.2009/extras/x86_64/ enabled1 gpgcheck0 REPO清缓存yum clean all yum makecache安装 WiFi 组件yuminstall-yNetworkManager-wifi wpa_supplicant重启 NetworkManagersystemctl restart NetworkManager6.2 连接 WiFi打开 WiFinmcli radio wifi on nmcli devicesetwlp3s0 managedyes扫描nmcli device wifi list连接 WiFi例如连接Campus-WiFinmcli device wifi connectCampus-WiFipasswordWiFi密码后面又连接了手机热点demo_usernmcli device wifi connectdemo_userpasswordWiFi密码查看 IPipaddr show wlp3s0连上手机热点后服务器 IP 变成10.0.0.9七、第六阶段开启 SSH 服务CentOS 上执行systemctl start sshd systemctlenablesshd systemctl status sshd正常状态Active: active (running)查看端口监听ss-lntp|grep:22正常应该看到LISTEN 0 128 10.0.99.4:22 LISTEN 0 128 [::]:22这说明 SSH 服务本身已经正常。防火墙放行 SSHfirewall-cmd--permanent--add-servicessh firewall-cmd--reload排错阶段也可以临时关闭防火墙systemctl stop firewalld iptables-F不建议长期使用 root 远程登录可以创建普通用户。例如创建demo_useruseradddemo_userpasswddemo_userusermod-aGwheel demo_user或者创建demo_useruseradddemo_userpasswddemo_userusermod-aGwheel demo_user查看iddemo_useriddemo_user编辑 SSH 配置vi/etc/ssh/sshd_config建议普通用户登录配置PasswordAuthentication yes UsePAM yes PubkeyAuthentication yes PermitRootLogin no如果临时允许 root 登录PermitRootLogin yes PasswordAuthentication yes UsePAM yes修改后重启systemctl restart sshd八、第七阶段为什么 WiFi 能上网但 Windows SSH 不进去服务器连学校 WiFi 后pingbaidu.com能通。这说明服务器可以主动访问外网。但 Windows 上执行ping 192.0.2.45Test-NetConnection192.0.2.45-Port 22结果PingSucceeded : False TcpTestSucceeded : False这说明 Windows 访问不到服务器。即使服务器和 Windows 都连接了学校 WiFi也不一定能互访。学校、公司、酒店 WiFi 经常开启 AP 隔离、客户端隔离、无线用户隔离、ACL 策略、不同 VLAN 隔离。表现为每台设备都能上网但设备之间不能 ping也不能 SSH。所以服务器能 ping baidu.com ≠ Windows 能 SSH 服务器服务器和 Windows 都连接同一个手机热点demo_user后服务器 IP 变成10.0.0.9此时 Windows 也在同一个手机热点局域网里就可以尝试ping 10.0.0.9Test-NetConnection10.0.0.9-Port 22 ssh demo_user10.0.0.9手机热点通常不会做复杂的客户端隔离所以更容易成功。九、第八阶段为什么外地的人不能直接 SSH外地的人要 SSH 进来必须访问到一个“公网可达入口”。IP类型外地能否直接访问10.0.0.9手机热点内网 IP不能192.0.2.45学校 WiFi 内网 IP通常不能203.0.113.10有线公网 IP理论可以但当前链路没通所以外地的人不能直接连sshdemo_user10.0.0.9也不能直接连sshdemo_user192.0.2.45如果想从外地访问必须使用公网 IP、ZeroTier、Tailscale、frp、cpolar、ngrok 等方案之一。十、让外地的人能 SSH 的三种方案10.1 方案 A修好公网 IP如果要像 云服务器平台 一样sshdemo_user203.0.113.10服务器上必须满足ipaddr show p8p1ping203.0.113.9 ss-lntp|grep:22其中ping 203.0.113.9必须通并且网卡不能是NO-CARRIER必须是LOWER_UP。如果服务器自己都 ping 不通公网网关那么外地的人肯定连不上203.0.113.10。10.2 方案 B使用 ZeroTierZeroTier 适合服务器能上网但没有公网 IP、外部访问不到服务器的环境。基本流程注册 ZeroTier创建 Network服务器安装 ZeroTierWindows 安装 ZeroTier两台机器加入同一个 Network ID控制台授权设备使用 ZeroTier 分配的 IP SSH。CentOS 安装curl-shttps://install.zerotier.com|bashsystemctlenable--nowzerotier-one zerotier-clijoin你的NetworkID查看zerotier-cli status zerotier-cli listnetworksipaddr假设服务器 ZeroTier IP 是10.0.99.5外地电脑也加入同一 ZeroTier 网络后可以sshdemo_user10.0.99.5SSH 客户端 填Address10.0.99.5 Port22 Usernamedemo_user Password登录密码10.3 方案 C使用 TailscaleTailscale 和 ZeroTier 类似也很适合无公网环境。服务器安装curl-fsSLhttps://tailscale.com/install.sh|shsystemctlenable--nowtailscaled tailscale up查看 IPtailscaleip-4假设得到10.0.99.6外地电脑也加入同一 Tailscale 网络后sshdemo_user10.0.99.610.4 方案 Dfrp / cpolar / ngrok / Stowaway这类属于内网穿透或代理隧道方案。如果有公网 VPS可以用 frp外地电脑 → 公网 VPS → 内网服务器 SSH最终形式可能是sshdemo_user公网VPS_IP-p60022Stowaway 更偏红队/内网代理工具不太适合日常稳定运维。Proxifier 只能让客户端流量走代理不能单独把服务器暴露出来。十一、关键概念总结11.1 能上网和能被连接是两回事服务器能 ping baidu.com 服务器能访问外网 Windows 能 ssh 服务器 Windows 能访问服务器入站端口两者不是一回事。11.2 ping 通不代表 SSH 能通ping使用 ICMPSSH 使用 TCP 22 端口。所以可能出现PingSucceeded : True TcpTestSucceeded : False这说明 IP 能到但 22 端口不通。排查命令Test-NetConnection服务器IP-Port 22服务器上ss-lntp|grep:22 systemctl status sshd11.3 ping 网关不代表 ping 服务器例如203.0.113.9 是网关 203.0.113.10 是服务器 IPWindows 能 ping 通.233不代表.234就一定通。11.4 内网 IP 不能直接被外网访问这些地址通常是内网地址192.168.x.x 172.16.x.x - 172.31.x.x 10.x.x.x例如10.0.0.9 192.0.2.45外地的人不能直接通过公网访问它们。十二、本次实践最终经验本次实践真正暴露的问题不是 Linux 命令不会而是网络链路判断容易混淆。最重要的经验如下先看物理链路NO-CARRIER就先别纠结 IP有线公网要先确保服务器能 ping 通网关学校 WiFi 即使同网段也可能禁止终端互访手机热点适合临时搭一个小局域网SSH 服务正常不代表外部一定能访问外地访问本地服务器必须有公网入口或内网穿透ZeroTier / Tailscale 是无公网环境下最省事的方案云服务器平台 能直接 SSH是因为平台已经帮你做好了公网映射。十三、推荐最终部署方案如果只是本地临时连接Windows 和服务器连接同一个手机热点 ssh demo_user10.0.0.9如果要外地长期连接推荐 ZeroTier 或 Tailscale最终可以给外地人这样的信息HostZeroTier 或 Tailscale 分配的 IP Port22 Usernamedemo_user Password登录密码如果想用真正公网 IP必须修好 203.0.113.10 对应的有线公网链路十四、常用命令速查查看网卡ipaddr nmcli deviceiproute查看有线链路ipaddr show p8p1ipneighping203.0.113.9查看 WiFinmcli radio wifi on nmcli device wifi list nmcli device wifi connectWiFi名称passwordWiFi密码查看 SSHsystemctl status sshd systemctlenable--nowsshd ss-lntp|grep:22关闭防火墙测试systemctl stop firewalld iptables-FWindows 测试端口ping 服务器IPTest-NetConnection服务器IP-Port 22创建用户useradddemo_userpasswddemo_userusermod-aGwheel demo_userSSH 登录sshdemo_user服务器IP指定端口sshdemo_user服务器IP-p2222十五、结语这次实践最核心的收获是Linux 服务器远程连接问题不要一上来就怀疑账号密码。要先判断网络路径是否通、端口是否通、服务是否监听、认证是否允许。完整排查顺序应该是物理链路 ↓ IP 配置 ↓ 路由 ↓ 能否 ping 网关 ↓ 能否出网 ↓ SSH 服务是否监听 ↓ 防火墙是否放行 ↓ 客户端是否能访问 22 端口 ↓ 账号密码或密钥认证只要按照这个顺序排查就不会在“为什么我能上网但别人连不上我”这个问题上反复绕圈。