ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux虚拟机网络配置详解:从NAT模式到静态IP的完整指南

Linux虚拟机网络配置详解:从NAT模式到静态IP的完整指南 不少人学 Linux不是倒在命令上而是倒在“虚拟机网络配置”上。系统明明装好了敲ip addr却看不到 IPping 不通网关折腾一整天也不知道问题出在哪。我自己带过的运维新人里十有七八会在这一步被劝退。这篇内容围绕“Linux 介绍与虚拟机网络配置”这条主线把从虚拟机选型、镜像下载、系统安装、目录认知到三种网络模式、静态 IP 配置、故障排查的完整过程拆开讲一遍。适合刚接触 Linux 的小白也适合已经装好系统但卡在网络上、需要一套排错思路的读者。1. 为什么偏要在虚拟机里学 Linux先搞清楚虚拟化解决了什么1.1 虚拟机是学习 Linux 的最低成本路径很多初学者会问学 Linux 为什么不直接装双系统或者干脆买一台云服务器这个问题背后其实是两种典型场景的取舍。双系统的问题在于切换成本高。你正在 Windows 里查资料、写笔记突然想练一下 Linux 命令得重启电脑、进引导菜单、选系统练完再重启回来。一次两次还能忍次数多了人就会放弃。而云服务器虽然真实、可控但要花钱而且公网环境下的安全配置、防火墙规则对一个刚入门的人并不友好一个不小心就把安全组放开了反而给自己惹麻烦。虚拟机把 Linux 装成一个“隔离的软件进程”和宿主机共享 CPU、内存、磁盘但又有独立的网卡、磁盘和内核环境。这意味着你可以随时打开、随时关闭、随时快照回滚操作错了不会影响宿主机。我见过太多人在虚拟机上把网络配置改坏了直接重置快照两分钟恢复原状这在真机或服务器上是做不到的。选择虚拟机的另一个理由是现代运维和开发环境本身就是虚拟化的重度使用场景。你用 VMware 建 Linux 虚拟机的过程和你在真实服务器上用 KVM、ESXi 建虚拟机在思路上高度一致只是后端不同。提前把虚拟机这套逻辑摸熟后面接触容器、云主机都不会觉得突兀。1.2 镜像选择Ubuntu 与 CentOS 怎么挑确定了用虚拟机下一个问题是装哪个发行版。这里只推荐两个方向Ubuntu Server 和 CentOS Stream/AlmaLinux具体选哪个取决于你的目的。如果你是为了学命令、搭开发环境、跑 Python/Node/Go 这类应用选 Ubuntu Server。Ubuntu 的资料量是 Linux 发行版里最大的遇到的坑基本都有人踩过apt 包管理简单直接默认就带python3对新手极其友好。如果你是为了向运维方向发展建议选 CentOS Stream 或 AlmaLinuxRHEL 系的免费替代品因为国内企业的生产环境大量使用这类发行版你要熟悉的是dnf/yum、firewalld、SELinux 这套体系。镜像下载这里提醒一句不要跑到官网去点“最新版本”的安装包网络不好会非常折磨。用国内镜像站下载 ISO 会快很多比如阿里云镜像站、清华 TUNA 镜像站、中科大镜像站。在镜像站里找到对应发行版的iso目录Ubuntu 选ubuntu-22.04.x-live-server-amd64.iso这类CentOS 系选AlmaLinux-9.x-x86_64-minimal.iso或者 CentOS Stream 的CentOS-Stream-9-latest-x86_64-dvd.iso。如果是学习用途优先选不带图形界面的 Server 版本强行用桌面版只会让你依赖鼠标学不到命令行思维。2. 装系统之前的三件准备决定后面要少踩多少坑2.1 虚拟化引擎与固件类型的选择你准备用哪款虚拟机软件我的默认建议是Windows 上用 VMware WorkstationmacOS 或开源偏好者用 VirtualBox。VMware 在硬件兼容性和网络虚拟化上做得更成熟尤其是 NAT 网络这部分默认配置基本开箱即用VirtualBox 免费开源但个别场景下 NAT 模式的 DNS 解析偶尔会出现小毛病。这里要特别强调一个几乎所有新手都会忽略的点新建虚拟机时“自定义硬件”里有一项“虚拟化引擎”可以勾选“虚拟化 Intel VT-x/EPT 或 AMD-V/RVI”。这个选项的作用是让虚拟机内部的系统能够启用硬件辅助虚拟化对普通命令学习影响不大但如果你之后要在虚拟机里跑 Docker、装 Android 模拟器或做嵌套虚拟化实验没勾选这个选项会直接报“硬件加速不可用”。我现在习惯了新建虚拟机时顺手把这三个虚拟化引擎选项全勾上免得以后要用的时候再回去改。固件类型也要注意新版本 VMware 默认使用 UEFI这对 Ubuntu 22.04 之后的版本没有影响但如果你从老旧的 ISO 镜像安装某些精简版系统可能会遇到 UEFI 引导不兼容的问题。遇到类似情况把固件改成 BIOS 再用通常能解决。这个问题在论坛里反复出现其实早在虚拟机创建阶段就能避掉。2.2 磁盘、内存与处理器的分配底线资源分配是很多人凭感觉乱填的地方。我给你的底线建议是内存给 2GB 起步想跑桌面版或同时开多个服务就给 4GB处理器核心数给 2 个再多对你的学习没有帮助磁盘给 20GB 以上注意这里建议选择“将虚拟磁盘拆分成多个文件”方便以后在虚拟机之间互相拷贝。内存是重中之重。你给虚拟机 4GB宿主机还剩多少取决于你的物理内存如果物理内存本身就 8GB虚拟机加 Windows 很容易卡顿到鼠标都动不了。学习用虚拟机不要贪大2GB 跑 Ubuntu Server 绰绰有余加上 SSH 连接、命令行操作占用非常小。另外虚拟机的 CPU 不要超过物理机的核心数不要让宿主机失去响应。2.3 安装镜像与安装过程中的几个坑安装系统本身其实无聊无非是选语言、配键盘、分区、设用户名密码。真正常见的意外有三个我逐一说明。第一个坑是分区界面的磁盘识别问题。有些新手会在 Ubuntu Server 安装时手动分区然后发现目标磁盘是sda、sdb搞不清哪个是虚拟磁盘。你只需要在安装向导里选择“Use an entire disk”并勾选虚拟磁盘即可不要自己手动去改 LVM 分区。如果非要自定义分区至少要保证有/根分区和swap这两个是最低要求。第二个坑是用户名和密码。Ubuntu Server 安装时要求你创建一个用户这个用户默认在sudo组里也就是你后续执行管理命令的身份。不要图方便直接用root登录Ubuntu 默认禁用 root 的 SSH 登录你在学习时用普通用户 sudo才是最贴近生产环境的习惯。第三个坑是安装完成后的重启。VMware 里装完 Ubuntu Server重启后提示“Please remove the installation medium and press ENTER”此时要去虚拟机设置里把 ISO 镜像断开或移除然后按回车。不这样操作有的版本会再次进入安装界面有的版本会卡在引导界面一直不动。我在这里浪费过十分钟后来养成了“装完就把光驱弹出”的习惯。3. 第一次登进 Linux先建立这几套基础认知系统装好你面对的是一个只有一个$提示符的黑窗口。这个阶段别急着配网络先花 30 分钟建立对 Linux 的基本认知后面配置网络时才不至于看什么都陌生。3.1 一切皆文件的目录结构Linux 的目录结构和 Windows 最大的区别是没有 C 盘 D 盘的概念所有设备、进程、配置都以文件的形式挂在一棵目录树下。你要重点记住几个目录/etc系统配置文件所在网络配置、用户配置、软件源配置都在这里/var经常变化的数据比如日志文件存放在/var/log/home普通用户的家目录你上传的脚本、下载的软件一般放在这里/rootroot 用户的家目录/tmp临时文件重启后经常被清空/usr与/opt软件安装位置前者是系统包管理器的默认路径后者是第三方软件的常见安装路径新手最容易犯的错误是把文件随便丢到根目录/下搞得系统目录混乱。建议你自己建的测试文件全部放在/home/你的用户名/下。网络配置排错时你会频繁跑到/etc/netplan、/etc/sysconfig/network-scripts这类目录目录结构熟了你就不至于像无头苍蝇一样到处找。3.2 命令行的基本操作习惯Linux 的命令行并不玄乎核心就是“命令 参数 对象”。配置网络前先熟练这组最常用命令ip addr查看 IP 地址替代老的ifconfigip route show查看路由表确认网关ping 192.168.x.1测试到网关的连通性cat /etc/os-release查看系统版本sudo -i切换到 root 环境systemctl status 服务名查看服务状态df -h查看磁盘空间有两个习惯从第一天就要养成一是看到不认识的命令先man 命令名或命令名 --help二是操作命令前先确认自己在哪个目录用pwd随时查看。网络配置错误 90% 是手误导致的而手误往往是因为你对文件和目录的不敏感。3.3 软件包管理快速装出可用环境不同发行版的软件包管理命令完全不同在这里把两套体系记牢即可。Ubuntu/Debian 系用aptsudo apt update更新软件源索引sudo apt install 软件名安装软件sudo apt remove 软件名卸载软件CentOS/RHEL 系用dnfCentOS 7 及以前是yumsudo dnf makecache生成缓存sudo dnf install 软件名安装软件sudo dnf remove 软件名卸载软件第一次配置网络之前建议先确认自己能用包管理器装一个vim之类的小软件。这一步既验证了软件源是否正常也验证了网络是否通。如果apt update都报错那大概率网络配置还没生效正好进入下面的话题。4. 虚拟机三种网络模式的功能边界与选择逻辑VMware 和 VirtualBox 都提供三种网络模式NAT 模式、桥接模式、仅主机模式。理解这三种模式不是在背概念而是决定了你之后做实验时虚拟机到底能不能上网、能不能被外部访问、能不能和宿主机互 ping 通。4.1 NAT 模式默认选择适合绝大多数学习场景NAT 模式VMware 中对应 VMnet8的工作原理是虚拟机通过宿主机上的一块虚拟网卡VMnet8连接到一个虚拟交换机再借助宿主机的物理网卡访问外网。对虚拟机来说它的“默认网关”是虚拟网络里的一个 NAT 设备它主动访问外网的请求会被 NAT 转换成宿主机的流量发出去回包再按映射关系送回来。用生活化一点的说法宿主机像是那个帮你点外卖的室友虚拟机是你自己你不出门也吃得到外卖但外卖小哥不知道有你的存在。所以 NAT 模式的优点是无需关心宿主机所在局域网的 IP 规划虚拟机默认就能上外网缺点是外部用户无法主动连入虚拟机。就学习而言NAT 是你 90% 时间的默认模式。它让你既能用apt update装东西又不干扰你家里的路由器、光猫和别的设备。4.2 桥接模式需要被外部访问时再用桥接模式VMnet0的原理更加直接虚拟机的虚拟网卡直接把数据转发到宿主机的物理网卡上就像是把一台新电脑插进了你的局域网。好处是路由器会给虚拟机单独分配一个和宿主机同网段的 IP局域网里的其他设备手机、另一台电脑可以直接访问这台虚拟机。代价是你很容易陷入 IP 冲突或网段不一致的麻烦。比如你家路由器自动分配 IP 是192.168.31.x宿主机占了一个虚拟机再要一个一旦路由器地址池不够或者你设置了静态 IP 和别人重复就出问题。另外如果你的办公网络有 MAC 绑定或认证机制桥接模式经常会莫名其妙掉线。我对桥接模式的使用建议是只有当你明确需要让局域网里的其他设备访问虚拟机的 Web 服务、SSH 服务时才切换到桥接。否则继续用 NAT。4.3 仅主机模式纯隔离实验环境仅主机模式VMnet1意味着虚拟机与宿主机之间建立了一个完全孤立的虚拟局域网虚拟机只能和宿主机通信无法访问外网外网更无法访问它。它是学习防火墙规则、模拟内网渗透实验、搭建隔离测试环境的好帮手。比如你想测一下没有外网条件时服务能不能正常启动或者需要在一个完全可控的网络环境里练习静态 IP 配置、子网划分、路由表修改就用仅主机模式。它也是排查“怎么都上不了网”的绝好对照模式——如果仅主机模式下能 ping 通宿主机说明你的网卡和协议栈是好的问题大概率出在 NAT 或桥接配置上。4.4 三种模式怎么选一张表说清楚场景推荐模式原因日常学命令、装软件、跑服务NAT能上外网IP 不用自己操心宿主机浏览器访问虚拟机的 NginxNAT通过端口映射或直接访问虚拟机 IP 即可局域网其他设备访问虚拟机桥接获得同网段独立 IP验证网络配置、练习静态 IP、隔离测试仅主机环境干净不受外网干扰提一个关键操作VMware 里编辑这三种模式入口在“编辑 - 虚拟网络编辑器”NAT 模式下的网段、网关、DHCP 范围都在这里改。VirtualBox 对应在“全局工具 - 网络管理器”。这些信息会直接决定你在虚拟机里填写的 IP、网关是否有效很多人填了静态 IP 却上不了网就是因为网段和 VMware 虚拟网络编辑器里的设置对不上。5. 网络配置文件实战从 DHCP 到静态 IP 的完整过程5.1 为什么要固定 IP默认情况下虚拟机从 NAT 的 DHCP 服务获取一个动态 IP。这个 IP 在一定时间内是稳定的但在 DHCP 租约到期或虚拟机重启后可能变化。一旦 IP 变了你之前在 Windows/Mac 上保存的 SSH 连接配置、数据库连接串、Nginx 反向代理的proxy_pass全都要跟着改非常痛苦。所以稍微正式一点的实验环境都要给虚拟机配静态 IP。配置静态 IP 的本质就是告诉系统三层信息本机地址、网关地址、DNS 服务器地址。这三层信息分别对应addresses、routes、nameservers不管哪个发行版思路一致只是写法不同。5.2 Ubuntu 20.04/22.04/24.04用 netplan 文件配置Ubuntu 从 17.10 系开始使用 netplan 作为默认网络配置工具配置文件统一放在/etc/netplan/目录里文件名一般是00-installer-config.yaml或01-netcfg.yaml。先用ip addr确认网卡名称VMware 中 Ubuntu Server 的网卡名通常是ens33也有叫ens160或eth0的。然后编辑配置文件sudo vim /etc/netplan/00-installer-config.yaml配置文件内容如下network: version: 2 renderer: networkd ethernets: ens33: dhcp4: false addresses: - 192.168.80.130/24 routes: - to: default via: 192.168.80.2 nameservers: addresses: - 223.5.5.5 - 119.29.29.29这里以 VMware NAT 默认网段192.168.80.0/24为例网关是192.168.80.2。不同机器网段不同你在 Windows 宿主机上执行ipconfig查看 VMnet8 网卡的 IP 就能知道自己的网段是什么。DNS 我推荐使用国内公共 DNS223.5.5.5 是阿里 DNS119.29.29.29 是腾讯 DNSPod比默认的 114.114.114.114 在部分运营商网络下响应更快也更容易记忆。改完文件后执行sudo netplan apply这一步不会有任何提示然后立刻用ip addr和ip route验证。如果地址和网关都出来了就说明配置成功。有个容易踩的坑netplan 的 yaml 文件对缩进极其敏感冒号后面要有空格列表项要对齐。一次把一个-写歪了整个配置就加载不了。改之前可以先sudo cp 原文件.md 文件.bak备份出了问题也能马上还原。5.3 CentOS Stream 9 / AlmaLinux 9用 nmcli 配置RHEL 系的最新版本默认用 NetworkManager 管理网络虽然也可以去改/etc/sysconfig/network-scripts/ifcfg-ens160文件但说实话在新版本里已经很别扭了。我建议你直接用nmcli命令一行一行地加配置简单且不容易写错# 查看连接名称通常是 ens160 或 ens33 sudo nmcli con show # 将连接改为手动 IP sudo nmcli con mod ens160 ipv4.method manual \ ipv4.addresses 192.168.80.130/24 \ ipv4.gateway 192.168.80.2 \ ipv4.dns 223.5.5.5 # 重启连接 sudo nmcli con down ens160 sudo nmcli con up ens160如果是在老旧的 CentOS 7 上则直接修改/etc/sysconfig/network-scripts/ifcfg-ens33TYPEEthernet BOOTPROTOstatic NAMEens33 DEVICEens33 ONBOOTyes IPADDR192.168.80.130 NETMASK255.255.255.0 GATEWAY192.168.80.2 DNS1223.5.5.5CentOS 7 时代还有一个低级错误非常普遍配置文件里漏写ONBOOTyes结果每次重启网卡都起不来IP 连接和 ping 全失败。看到系统里只有lo没有ens33时优先查这一行。5.4 重启后会不会失效验证静态配置的真正标准配完静态 IP 后一定不要只看当时的ping要做一个更严格的验证sudo reboot重启虚拟机等待它启动完成再次登录然后检查 IP 是否还是你配置的那个。这个验证很关键。不少新手在配置完 netplan 或 nmcli 后当时通了就不再管第二天一开机发现 IP 又变了或直接没有了。原因通常是配置文件没有正确应用、NetworkManager 与 netplan 冲突Ubuntu 桌面版常见、/etc/resolv.conf被覆盖导致 DNS 丢失。重启一次这些问题都会现形。另外建议在配置完静态 IP 后立即做一个快照VMware 里叫快照VirtualBox 里叫备份。网络配置改了之后如果折腾坏了一个快照回滚恢复远比重装系统省力。6. 连不上网时的排查链路看似玄学实则有序我见过太多学员在网络排错时凭感觉瞎试先改一下 DNS不行再重启网卡还不行然后把虚拟机的网络模式改来改去。这样能碰巧修好但下一次遇到类似问题还是不会。真正高效的排查方法是从底层往上层一层一层验证每一层都确认透了问题很快就定位了。6.1 网卡层面确认接口状态第一步执行ip addr看你的网卡是否存在且有state UP状态。如果显示state DOWN或者网卡根本不存在先不要急着配 IP。可能是 VMware 虚拟网络编辑器里该模式对应的网卡被禁用了也可能是网卡驱动没加载。虚拟机能识别网卡才谈得上网络这一步过不了下面都不用看。我见到最多的现象是网卡显示state UP但没有inet地址。这说明网卡已经启动只是没拿到 IP大概率是 DHCP 失败或静态配置有误。6.2 IP、路由与网关三层连通性测试有了网卡接下来按顺序测试ping 127.0.0.1—— 通说明本机协议栈正常ping 你自己的IP比如 192.168.80.130—— 通说明网卡工作正常ping 网关比如 192.168.80.2—— 通说明和宿主机虚拟网络通信正常ping 8.8.8.8或223.5.5.5—— 通说明外网路由正常如果第 3 步不同查 IP 是否和网关在同一网段子网掩码对不对或者在 VMware 虚拟网络编辑器里看 NAT 网关是不是你填的那个。从 VMware 的“虚拟网络编辑器 - NAT 设置”里可以直观看到网关地址到底是多少。如果第 3 步通但第 4 步不通基本可以确认是路由或网关的问题。执行ip route show看默认路由是否存在。很多 Ubuntu 新版本默认没有 default routenetplan 里没写routes就会这样。6.3 DNS 解析能 ping 通 IP 却打不开域名如果你发现ping 223.5.5.5通但ping www.baidu.com提示Name or service not known问题百分之百出在 DNS 上。执行cat /etc/resolv.conf看看里面写的 DNS 服务器是什么。如果是空或写了一个失效的地址改回/etc/netplan/00-installer-config.yaml里的nameservers然后sudo netplan apply。这里有个细节/etc/resolv.conf很多时候是 systemd-resolved 动态生成的你直接改它会在一段时间后被覆盖。正确的做法是修改 netplan 配置或者编辑/etc/systemd/resolved.conf里的 DNS 项再sudo systemctl restart systemd-resolved。6.4 防火墙与 SELinux最后才怀疑它们底层都通了还是上不了外网再检查防火墙。Ubuntu 默认是ufwsudo ufw statusCentOS/RHEL 系是firewalldsudo systemctl status firewalld sudo firewall-cmd --list-all学习阶段如果不需要防火墙可以直接停掉再测试。RHEL 系还有个概念叫 SELinux它对网络端口、进程权限有强制限制初学阶段建议先sudo setenforce 0临时关闭确认问题解决后再决定是否需要永久修改/etc/selinux/config。这不是让你养成关闭防护的习惯而是排错时要分清楚问题到底是出在网络配置还是出在安全模块6.5 宿主机层面的特殊坑VMware 网络服务与重启最后一条容易被忽略VMware 的 NAT 和 DHCP 服务依赖 Windows 后台服务VMware NAT Service和VMware DHCP Service。如果你用某些“一键优化工具”或手动关闭了这些服务虚拟机内的网关就 ping 不通但 VMware 软件本身没有任何报错。在 Windows 服务管理器里把这两个服务手动启动并设为自动很多“虚拟机突然上不了网”的玄学问题就消失了。7. 安装和运行过程中的典型问题盘点7.1 VMware 报“无法连接到虚拟机”这个报错通常出现在 Windows 宿主机上原因是 Windows 自带的虚拟化安全功能Hyper-V、基于虚拟化的安全、内核隔离与 VMware 的虚拟化引擎不兼容。最直接的解决办法是打开“控制面板 - 程序 - 启用或关闭 Windows 功能”取消勾选“Hyper-V”、“虚拟机监控程序平台”。如果还在报错以管理员身份运行 CMD执行bcdedit /set hypervisorlaunchtype off然后重启。但要特别提醒一点关闭这些功能会影响 WSL2 和 基于虚拟化的安全功能的一部分体验。如果你日常依赖 WSL2就要权衡一下可以考虑换用 VirtualBox 新版本或者升级 VMware Workstation 到支持 Hyper-V 共存的最新版本。这里不要盲目执行要根据自己的使用场景取舍。7.2 虚拟机安装 Linux 时蓝屏或黑屏安装 Ubuntu/CentOS 时 Windows 蓝屏最常见的原因是虚拟化引擎未开启。在虚拟机的“处理器”设置里勾选“虚拟化 Intel VT-x/EPT 或 AMD-V/RVI”很多情况直接解决。如果还是蓝屏将 VMware 升级到最新版并确认 ISO 镜像文件是官网或国内镜像站完整下载的有些下载了一半或经过非正规渠道转存的镜像会在安装阶段反复出错。7.3 宿主机和虚拟机 IP 网段对不上这个问题多出现在你手动设置了静态 IP却没有和 VMware 虚拟网络编辑器的网段对齐。记住一个原则NAT 模式下虚拟机 IP 属于 VMnet8 的网段仅主机模式属于 VMnet1 的网段桥接模式属于宿主机当前所在局域网网段。你在虚拟机里填的 IP 网段必须和最左侧的虚拟网卡网段一致否则怎么配都无法通信。检查方法是Windows 上运行ipconfig查看 VMware Virtual Ethernet Adapter for VMnet8 的 IPv4 地址Linux 宿主机上运行ifconfig或ip addr找到 vmnet8 或 vmnet1 对应的 IP。然后把虚拟机里的地址设置成同一网段里一个未被占用的 IP。写在最后的一点体会我当初学虚拟机网络配置时也曾经三天两头把系统搞到上不了网后来养成了“先看模式、再看网卡、再 ping 网关、最后查 DNS”的固定排查顺序问题基本都能十分钟内解决。给刚上路的朋友一个建议配置网络前一定先打开 VMware 的虚拟网络编辑器把网段和网关抄下来再回虚拟机里填不要让两边各写各的。虚拟机这个东西最大的好处就是折腾坏了可以随时回滚放心大胆地去试试错本身就是学习的一部分。网络配置这块你今天花两个小时弄明白后面学 Nginx、Docker、Kubernetes 时都能少踩一大片坑。
返回列表