虚拟机端口查看核心命令是 ss -tlnp(Linux)或 netstat -ano(Windows),开放端口要先在虚拟机内部放行防火墙,再做宿主机端口映射或云安全组入方向规则。
先弄清楚:虚拟机端口查看,到底看哪一层
虚拟机端口不通时,很多人第一时间怀疑服务没起来,但真正原因往往藏在更外层,端口查看不是一条命令的事,它涉及虚拟机操作系统内部、宿主机网络模式、云平台安全组三个层面,先把内层看清楚,再逐层往外排查,效率最高。
Linux虚拟机端口查看命令
在 Linux 虚拟机里,最常用的两个命令是:
ss -tlnp:查看所有 TCP 监听端口,速度快,现代发行版默认自带netstat -tlnp:老牌命令,部分精简系统需要先安装net-tools
只查某个端口,8080:
ss -tlnp | grep 8080
netstat -tlnp | grep 8080
参数含义直接拆开看:
-t:只看 TCP-l:只看监听状态-n:不解析域名和端口名,直接显示数字-p:显示占用端口的进程名和 PID
执行结果里如果显示 0.0.0:8080,说明所有网卡都能访问到这个端口;如果显示 0.0.1:8080,外部访问不了,这是后面排查的关键依据。
如果系统里没有 ss 命令,可以装 iproute2 包,或者直接用老命令 netstat -tlnp,效果基本一致。
Windows虚拟机端口查看命令
Windows 虚拟机内打开命令提示符或 PowerShell:
netstat -ano | findstr :8080:查看 8080 端口占用和对应 PIDGet-NetTCPConnection -LocalPort 8080:PowerShell 方式,能显示状态、进程 ID
拿到 PID 后,打开任务管理器,在“详细信息”里按 PID 排序,就能看到具体是哪个进程占着端口,这一步常用于确认服务是否真的在跑、有没有重复占用。
Linux虚拟机开放端口命令是什么
开放端口不能只记一条命令,因为不同 Linux 发行版默认防火墙工具不一样,先判断系统用的是 firewalld、iptables 还是 ufw,再执行对应命令,才不会做完发现无效。
firewalld 方式(CentOS、Rocky、AlmaLinux)
这些系统多数默认使用 firewalld,命令如下:
- 开放 8080 端口:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
- 立即生效并重载:
firewall-cmd --reload
- 查看已开放端口:
firewall-cmd --list-ports
如果忘了加 --permanent,命令只对当前运行状态生效,虚拟机重启后会失效,这是新手经常踩的坑,开放多个端口可以写范围,--add-port=8000-9000/tcp。
iptables 方式(旧版CentOS 6及部分定制系统)
- 添加放行规则:
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
- 保存规则:
service iptables save
或者:
iptables-save > /etc/sysconfig/iptables
ufw 方式(Ubuntu、Debian)
Ubuntu 虚拟机通常自带 ufw 但默认未启用:
- 先启用:
ufw enable - 开放端口:
ufw allow 8080/tcp - 查看状态:
ufw status
如果同时使用云平台安全组和系统防火墙,两边都要放行,只开一边,外部依然访问不了。
虚拟机端口不通怎么排查
端口不通时,按从内到外的顺序排查,比反复敲同一条命令更有效。
- 第一步:在虚拟机内部确认服务已监听。
ss -tlnp | grep 端口,如果没有输出,说明服务没启动或没监听该端口 - 第二步:确认监听地址不是
0.0.1,很多开发服务默认只监听本机回环地址,需要改成0.0.0或指定内网 IP - 第三步:检查虚拟机系统防火墙,CentOS 看
firewall-cmd --list-ports,Ubuntu 看ufw status - 第四步:检查 SELinux,CentOS 系列如果 SELinux 处于 enforcing 状态,可能拦截非标准端口,可用
sestatus查看,临时测试用setenforce 0,但不建议长期关闭 - 第五步:从宿主机测试,虚拟机是 NAT 模式时,外部不能直接访问,需要配置端口映射,桥接模式需确认宿主机和虚拟机在同一网段
- 第六步:云服务器检查安全组入方向规则,安全组相当于云平台外面的防火墙,控制台没放行端口,系统内部再开也没用
对比场景:同样一条
firewall-cmd 开放命令,在物理机上执行完就能通,在虚拟机里就是不通,多数情况卡在 NAT 端口映射或云安全组。
VMware虚拟机端口映射与VirtualBox端口转发对比
虚拟机软件在 NAT 网络模式下,外部主机或局域网其他设备无法直接访问虚拟机,需要通过端口映射或端口转发把宿主机端口转到虚拟机端口,两者核心逻辑相同,只是配置路径和界面叫法不一样。
VMware Workstation NAT端口映射
配置路径:编辑 -> 虚拟网络编辑器 -> 选择 VMnet8(NAT) -> NAT设置 -> 添加。
需要填写:
- 主机端口:宿主机上对外开放的端口,8080
- 类型:TCP 或 UDP
- 虚拟机IP地址:虚拟机在 NAT 网段内的 IP,192.168.10.100
- 虚拟机端口:虚拟机内部服务实际监听端口,80
保存后,外部访问 宿主机IP:8080 就会转到 虚拟机IP:80,VMnet8 网段与虚拟机 IP 不在同一网段是常见故障点。
VirtualBox端口转发配置
配置路径:虚拟机设置 -> 网络 -> 选择 NAT -> 高级 -> 端口转发。
需要填写:
- 名称:随意,如 web
- 协议:TCP
- 主机IP:可留空或填
0.0.1 - 主机端口:宿主机端口
- 子系统IP:虚拟机 IP,通常留空表示本机
- 子系统端口:虚拟机服务端口
表格对比:
| 项目 | VMware Workstation | VirtualBox |
|---|---|---|
| 配置入口 | 虚拟网络编辑器 | 虚拟机网络设置 |
| 网络模式 | NAT(VMnet8) | NAT |
| 是否支持主机IP限制 | 支持 | 支持 |
| 常见故障点 | VMnet8网段与虚拟机IP不在同一网段 | 子系统IP留空时未正确指向服务 |
| 生效方式 | 保存后立即生效 | 虚机重启或网络重启后生效 |
做本地开发时,经常用 NAT 模式跑虚拟机,把宿主机的 8080 映射到虚拟机里的 80 端口,局域网其他同事就能直接访问宿主机的 8080,不用关心虚拟机真实 IP。
国内云服务器虚拟机开放端口,安全组规则怎么加
国内云服务器上的虚拟机,比如简米云、酷番云、华为云,安全组是独立于系统防火墙的存在,很多用户在虚拟机里执行了
firewall-cmd --add-port=8080/tcp --permanent,外部仍访问不了,绝大多数是没在控制台加安全组规则。
操作路径通常为:
- 登录云服务器控制台
- 找到当前实例关联的安全组
- 进入入方向规则,点击添加
- 协议类型选择 TCP,端口填写 8080/8080(或范围)
- 授权对象填
0.0.0/0表示所有 IP 可访问,也可以只填固定 IP 段
行业共识认为,云上端口开放必须同时满足系统防火墙、安全组两层规则,缺一不可,部分企业还会增加第三层主机防火墙软件,如云镜、安全狗等,排查时要一并确认。
入方向规则管外部访问虚拟机,出方向规则管虚拟机访问外网,多数业务只需添加入方向放行,出方向默认全开,如果端口范围写错,比如只填了单个端口但实际服务跑在另一个端口,也会导致不通。
虚拟机端口查看和开放不是一条命令能全部解决的事,它是一条链路:服务监听、系统防火墙、宿主机映射、云安全组,哪一层漏了都不行,先在内层确认 ss -tlnp 能看到监听,再一层层往外放行,比反复敲同一条命令更有效。
Q&A
虚拟机端口查看命令有哪些
Linux 下用 ss -tlnp 或 netstat -tlnp 查看监听端口,Windows 下用 netstat -ano | findstr 端口号 或 PowerShell 的 Get-NetTCPConnection,要定位进程,加上 -p 参数即可显示 PID。
Linux虚拟机开放端口命令是什么
根据防火墙工具不同:CentOS/Rocky 用 firewall-cmd --zone=public --add-port=端口/tcp --permanent 再 firewall-cmd --reload;Ubuntu 用 ufw allow 端口/tcp;旧版 iptables 用 iptables -A INPUT -p tcp --dport 端口 -j ACCEPT,执行后记得用对应命令查询已放行端口。
虚拟机端口开放了还是访问不了怎么办
按顺序检查:服务是否监听 0.0.0 而不是 0.0.1;系统防火墙是否 reload 成功;SELinux 是否拦截;NAT 模式是否配置端口映射;云服务器安全组是否放行入方向规则,最后从宿主机本机用 telnet 虚拟机IP 端口 测试连通性,确认问题出在哪一层。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/665680.html





