记录一次 VMware 虚拟机固定 IP 后,FinalShell 连接不上的排查过程

最近在 VMware 里装了一台 Linux 虚拟机,本来只是想做一件很简单的事:把虚拟机的 IP 固定下来

因为每次开虚拟机之后 IP 都可能变,FinalShell、VS Code Remote-SSH 这些工具就要重新改连接地址,挺麻烦的。所以我就想着干脆给虚拟机配一个固定 IP,以后直接连就行。

结果没想到,IP 固定是固定了,但是 FinalShell 死活连不上,一直超时。

最后排查下来发现,问题不是 Linux,也不是 SSH,而是 Windows 宿主机这边的 VMware 虚拟网卡没有配到同一个网段

这篇文章就记录一下完整过程,也算给以后自己留个备忘。


1. 我的目标

我的目标很简单:

复制代码
Windows 宿主机上的 FinalShell
        ↓
通过 SSH 连接
        ↓
VMware 里的 Linux 虚拟机

我希望最后能用类似这样的地址连接:

复制代码
192.168.X.135

这里的 X 我就不写真实数字了,大家可以理解成自己电脑里 VMware NAT 网络对应的网段。


2. VMware NAT 模式到底是怎么回事?

我之前其实一直有点混淆 VMware 里的 NAT、桥接、Host-only。

这次弄完之后,我对 NAT 模式的理解大概是这样的:

VMware 会在 Windows 里虚拟出一个小网络,这个网络一般叫:

复制代码
VMnet8

在这个小网络里,大概有三个关键地址:

复制代码
Windows 宿主机的 VMware 虚拟网卡:192.168.X.1
VMware NAT 网关:192.168.X.2
Linux 虚拟机:192.168.X.135

可以简单画成这样:

也就是说,Windows 要想连上虚拟机,Windows 自己也得有一个在 192.168.X.x 网段里的 VMware 虚拟网卡。

如果 Linux 虚拟机是:

复制代码
192.168.X.135

但是 Windows 这边没有:

复制代码
192.168.X.1

那 Windows 就找不到这台虚拟机。

这也是我这次遇到的核心问题。


3. 先在 Linux 里固定 IP

进入 Linux 虚拟机后,先看当前网卡:

复制代码
ip addr

一般 VMware 里的网卡可能叫:

复制代码
ens33

然后再看默认网关:

复制代码
ip route

如果是 VMware NAT 模式,默认网关一般是:

复制代码
192.168.X.2

接着查看 NetworkManager 的连接名称:

复制代码
nmcli con show --active

我这里的连接名类似:

复制代码
Wired connection 1

注意,这个名字中间有空格,所以后面执行命令时一定要加引号。

如果普通用户没有 sudo 权限,可以先切换到 root:

复制代码
su -

然后设置固定 IP:

复制代码
nmcli con mod "Wired connection 1" ipv4.addresses 192.168.X.135/24
nmcli con mod "Wired connection 1" ipv4.gateway 192.168.X.2
nmcli con mod "Wired connection 1" ipv4.dns "8.8.8.8 114.114.114.114"
nmcli con mod "Wired connection 1" ipv4.method manual
nmcli con mod "Wired connection 1" connection.autoconnect yes

然后重启网络连接:

复制代码
nmcli con down "Wired connection 1"
nmcli con up "Wired connection 1"

再检查一次:

复制代码
ip addr
ip route

正常的话,应该能看到:

复制代码
inet 192.168.X.135/24
default via 192.168.X.2 dev ens33

到这里,Linux 虚拟机这边的固定 IP 就算配置好了。


4. 然后检查 SSH 服务

FinalShell 连接 Linux,本质上是走 SSH,所以还要确认 Linux 里的 SSH 服务是开的。

执行:

复制代码
systemctl status sshd

如果看到:

复制代码
active (running)

说明 SSH 服务正在运行。

如果没启动,可以执行:

复制代码
systemctl start sshd
systemctl enable sshd

再看 22 端口有没有监听:

复制代码
ss -tnlp | grep :22

正常能看到类似:

复制代码
LISTEN 0 128 *:22

这说明 SSH 服务已经在 22 端口等着别人连了。

我当时查到这里的时候,Linux 这边其实都没问题:

复制代码
固定 IP 有了
网关也对
SSH 服务也开了
22 端口也监听了

但是 FinalShell 还是连接超时。


5. FinalShell 连接超时,不一定是密码问题

这里有个坑。

如果 FinalShell 提示类似:

复制代码
Connection timed out

一般不是密码错,而是网络根本没连上。

如果是用户名或密码错,一般会提示认证失败,类似:

复制代码
Authentication failed

我一开始也差点往密码方向排查,但后来发现不是。

所以遇到连接超时时,第一步应该在 Windows 上 ping 一下虚拟机:

复制代码
ping 192.168.X.135

如果 ping 不通,那 FinalShell 肯定也连不上。


6. 真正的问题出在 Windows 的 VMware 虚拟网卡

我在 Windows 里执行:

复制代码
ipconfig

按理说应该看到一块 VMware 的虚拟网卡,地址应该是:

复制代码
192.168.X.1

但是我一开始并没有看到这个地址。

这就说明一个问题:

复制代码
Linux 虚拟机在 192.168.X.135
但是 Windows 宿主机没有 192.168.X.1

也就是说,两边不在同一个 VMware NAT 虚拟网络里。

这时候就算 Linux 里 SSH 服务开得再正常,FinalShell 也连不上。


7. 怎么修 Windows 这边的 VMnet8?

在 Windows 上打开网络连接:

复制代码
Win + R
输入 ncpa.cpl
回车

然后会看到一堆网卡。

有时候 Windows 不一定直接显示:

复制代码
VMware Network Adapter VMnet8

可能只显示成:

复制代码
以太网 3
以太网 5

这种名字。

这时候可以看网卡描述,只要描述里有:

复制代码
VMware Virtual Ethernet Adapter

就说明它是 VMware 的虚拟网卡。

我这里的情况是,其中一块 VMware 虚拟网卡没有拿到正确 IP,所以需要手动设置。

操作步骤:

复制代码
右键对应的 VMware 虚拟网卡
属性
Internet 协议版本 4 TCP/IPv4
使用下面的 IP 地址

然后填:

复制代码
IP 地址:192.168.X.1
子网掩码:255.255.255.0
默认网关:不填
DNS:不填

这里默认网关和 DNS 可以不填,因为这块网卡只是 Windows 用来和虚拟机通信的,不是用来给 Windows 上网的。

保存之后,再执行:

复制代码
ipconfig

这时候应该能看到:

复制代码
IPv4 地址:192.168.X.1

然后再 ping 虚拟机:

复制代码
ping 192.168.X.135

如果能看到回复,就说明 Windows 到虚拟机的网络已经通了。


8. 最后再回到 FinalShell 连接

网络通了之后,FinalShell 里这样填:

复制代码
主机:192.168.X.135
端口:22
认证方式:密码
用户名:Linux 用户名
密码:Linux 用户密码

然后就可以正常连接了。

如果 ping 已经通了,但是 FinalShell 还是不行,可以再测一下 22 端口:

复制代码
powershell Test-NetConnection 192.168.X.135 -Port 22

如果看到:

复制代码
TcpTestSucceeded : True

说明网络和端口都没问题,剩下就基本是用户名或密码的问题。


9. 这次问题到底是哪里错了?

总结一下,这次不是 Linux IP 配错,也不是 SSH 没开。

真正的问题是:

复制代码
Windows 这边的 VMware VMnet8 虚拟网卡没有正确配置到 192.168.X.1

Linux 虚拟机已经是:

复制代码
192.168.X.135

VMware NAT 网关也是:

复制代码
192.168.X.2

但是 Windows 一开始没有:

复制代码
192.168.X.1

所以 Windows 找不到虚拟机,自然 FinalShell 也连接不上。

修复之后,整个网络结构变成:

复制代码
Windows VMnet8:192.168.X.1
VMware NAT 网关:192.168.X.2
Linux 虚拟机:192.168.X.135

三者都在同一个网段:

复制代码
192.168.X.0/24

所以连接就正常了。


10. 我的排查顺序

以后再遇到类似问题,我会按这个顺序查:

简单来说就是:

第一步:看 Linux IP

复制代码
ip addr

确认虚拟机 IP 是否正确。

第二步:看默认网关

复制代码
ip route

确认默认网关是不是 VMware NAT 网关。

第三步:看 SSH 服务

复制代码
systemctl status sshd

确认 SSH 服务是否运行。

第四步:看 22 端口

复制代码
ss -tnlp | grep :22

确认 sshd 是否监听 22 端口。

第五步:Windows ping 虚拟机

复制代码
ping 192.168.X.135

ping 不通就先查网络,不要先纠结密码。

第六步:Windows 看 VMnet8

复制代码
ipconfig

确认 Windows 是否有:

复制代码
192.168.X.1

没有的话,就去 ncpa.cpl 里手动修 VMware 虚拟网卡。

第七步:最后再看 FinalShell

如果 ping 通、22 端口通,但是 FinalShell 还是登不上,再考虑用户名和密码。


11. 几个容易踩的坑

1)只看虚拟机,不看宿主机

Linux 里 IP 固定成功,不代表 Windows 一定能访问它。

Windows 这边也必须有同网段的 VMware 虚拟网卡。

2)VMnet1 和 VMnet8 容易搞混

一般来说:

复制代码
VMnet1:Host-only
VMnet8:NAT

如果虚拟机用的是 NAT 模式,就重点看 VMnet8。

3)连接超时不是密码错

FinalShell 如果是:

复制代码
Connection timed out

一般先查网络。

如果是:

复制代码
Authentication failed

再查用户名和密码。

4)Windows 网卡名字不一定叫 VMnet8

有时候它可能显示成:

复制代码
以太网 3
以太网 5

不要只看名字,要看描述和 IP 地址。

5)Windows 的 VMnet8 网关不要乱填

Windows 这块 VMware 虚拟网卡一般这样填就行:

复制代码
IP:192.168.X.1
子网掩码:255.255.255.0
默认网关:空
DNS:空

12. 最后总结

这次问题折腾了一圈,最后发现其实核心就一句话:

复制代码
Linux 虚拟机、VMware NAT 网关、Windows VMnet8 虚拟网卡,必须在同一个网段。

也就是:

复制代码
Windows VMnet8:192.168.X.1
VMware NAT 网关:192.168.X.2
Linux 虚拟机:192.168.X.135

只要这三个地址关系对了,再确认 SSH 服务启动、22 端口监听,FinalShell 基本就能连上。

这次也算长记性了:以后遇到 SSH 连接超时,先别急着改密码,也别急着重装服务,先从 pingipconfig 开始查网络。

:::

相关推荐
weixin_604236679 小时前
华三 路由器 极简核心配置
运维·服务器·网络·h3c·h3c路由器
换个昵称都难12 小时前
webrtc 音频模块FEC模块
网络·音视频·webrtc
youngerwang13 小时前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
KaMeidebaby13 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
zjun100114 小时前
TCP专栏-4.四次挥手
网络协议·tcp/ip
智慧光迅AINOPOL15 小时前
校园在线巡课系统方案:督导全覆盖
网络·全光网解决方案·全光网·校园全光网·校园全光网解决方案
酉鬼女又兒16 小时前
零基础入门计算机网络:网络层核心任务、三大关键问题、两种服务类型与 TCP/IP 网际层协议体系全解析
服务器·网络·网络协议·tcp/ip·计算机网络·php·求职招聘
Urbano16 小时前
工装制作全流程科普:从面料到自动化生产
网络·人工智能
2401_8685347816 小时前
网规笔记 | 真题解析:2018年11月软考网规-网络安全案例分析
网络