遇到虚拟机IP地址配置疑问,你不需要反复重启网卡或重装系统,ip addr命令会直接告诉你网卡状态、IP归属和链路是否就绪;正确用法是看懂state UP/DOWN和inet两行,先判断“网卡有没有拿到地址”,再决定是续租DHCP还是改静态IP。
先分清楚:ip addr命令详解,看输出到底在说什么
有相当一部分人把ip addr和ifconfig当成同一个东西,其实两者内核版本都不一样,ip addr来自iproute2工具包,是当前主流系统(CentOS 7+、Ubuntu 18.04+、Debian 9+)的默认网络命令,它比ifconfig强在对多网卡、多IP、VLAN和网络命名空间的支持,输出也更结构化。
你在虚拟机里敲下ip addr后,通常会看到一堆以数字开头的段落,
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536这是回环接口,代表本机自己,IP永远是127.0.0.1。2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500这才是你的虚拟机网卡。
网卡名为什么不是eth0而是ens33
行业共识认为这是systemd和biosdevname带来的命名规则变化,老玩家习惯看eth0,但新系统会根据PCI插槽位置把网卡命名为ens33、ens160、enp0s3这类形式,你不需要纠结名字本身,只要找到UP状态那个接口就行。
判断IP地址归属的快速方法
看每个网卡段落里有没有inet这一行。inet 192.168.1.100/24 brd 192.168.1.255 scope global ens33,斜杠前面就是当前IP,斜杠后面是子网前缀长度,如果只有一个inet6 fe80::...,说明只有链路本地地址,没拿到正常局域网IP,这种情况在VMware和VirtualBox里最常见。
虚拟机IP地址配置的常见疑问解答:为什么网卡状态不是UP
这是排障最核心的一步,ip addr输出里,网卡状态写在尖括号内,比如<BROADCAST,MULTICAST,UP,LOWER_UP>是正常,你会发现很多IP配置疑问都源于状态变成了DOWN或NO-CARRIER,下面逐个场景说。
虚拟机刚装完,ip addr只有lo有IP
CentOS、Ubuntu镜像装完后,默认可能是DHCP,但克隆或导入的虚拟机经常出现“没自动获取IP”的情况,你先看网卡那段是不是state DOWN,如果DOWN,执行:
ip link set ens33 up
这一步手动拉起网卡,如果拉起后依然没有inet 192.168.x.x,再执行:
dhclient ens33
强制走一遍DHCP请求,大部分情况下,地址就出现了。
VMware里从NAT切到桥接,IP消失了
很多人在NAT模式下配置了静态IP,切换到桥接后就上不了网,这不是配置错误,而是你的静态IP不在桥接网卡的广播域内,用ip addr看,网卡是UP的,但ping不通网关。
你需要做的是:把网卡改为DHCP方法,让VMware自带的DHCP服务发地址,临时命令是:
nmcli connection modify ens33 ipv4.method auto nmcli connection up ens33
如果你用NAT模式,记住虚拟机的默认网关一般是192.168.x.2,不是192.168.x.1,这类小差异也常让新手误判。
ip addr有IP,但虚拟机获取不到IP地址对应的路由
有IP不代表能通,你还需要看默认路由,因为许多虚拟机IP地址配置疑问最后都死在路由上,单独执行:
ip route show
如果输出里没有default via,就补一条默认网关:
ip route add default via 192.168.1.1 dev ens33
注意,这种用命令加路由是临时的,重启后会丢,要写进配置文件才永久生效。
虚拟机设置静态IP方法的完整操作路径
如果你希望IP固定不变,比如做集群或者要对外提供端口,静态IP是必然选项,下面的步骤对不同发行版有不同写法,别只用一套方法硬套。
CentOS / Rocky Linux / AlmaLinux 9系
从NetworkManager成为主流后,不建议直接改ifcfg文件了,因为nmcli的优先级更高,改文件后还得让NetworkManager重新加载,推荐按下面的顺序做:
-
查看连接名,不一定叫ens33,可能叫“Wired connection 1”。
nmcli connection show
-
修改为静态IP,把IP、网关、DNS一次性设置:
nmcli connection modify "Wired connection 1" ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 223.5.5.5 ipv4.method manual
-
重启连接使配置生效:
nmcli connection down "Wired connection 1" && nmcli connection up "Wired connection 1"
这类方式是安全且笔误少的,哪怕是在最小化安装的情况下,只要装了NetworkManager就能用。
Ubuntu / Debian的netplan方式
新版Ubuntu用netplan管理网络,常见的配置文件在/etc/netplan/目录下,后缀为.yaml,用编辑器打开后,把DHCP改成静态:
network:
version: 2
ethernets:
ens33:
dhcp4: no
addresses: [192.168.1.100/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [223.5.5.5]
保存后执行:
netplan apply
再用ip addr核对,地址就固定下来了。
用配置文件改IP的传统做法还值得学吗
可以学,但不作为首选,CentOS 6时代的/etc/sysconfig/network-scripts/ifcfg-eth0文件方式,在CentOS 8之后已经被NetworkManager接管,手动改文件经常遇到“文件明明对了但IP不生效”的尴尬,除非你维护的是老系统,否则优先用nmcli或netplan。
对比说明:ip addr和ifconfig的区别到底在哪里
如果要给刚入门的读者一个清晰认知,下面的表格可以参考:
| 对比项 | ip addr | ifconfig |
|---|---|---|
| 所属工具包 | iproute2 | net-tools |
| 默认存在性 | 新系统自带 | 部分精简镜像需安装 |
| 显示多IP | 可以显示一个接口的多个IP | 老版本不能完整显示 |
| 接口管理命令 | ip link set up/down | ifconfig eth0 up/down |
| 路由查看 | ip route | route -n |
| 适用场景 | 现代Linux运维,容器网络,虚拟化排障 | 老系统兼容 |
现在多数网络教程推荐ip命令,因为net-tools已经停止维护多年,你用ip addr看到的状态和信息和内核实时同步,不容易出现“缓存导致误判”的情况。
现场核查流程:一个90秒的IP排障习惯
不管你是用VirtualBox、VMware还是KVM,遇到虚拟机IP地址配置疑问时,建议按这条路径操作,能少走弯路:
- 执行
ip addr,看网卡标号,确认是不是目标网卡。 - 执行
ip route show,看默认路由是否缺失。 - 执行
ping -c 3 223.5.5.5,确认外网连通性。 - 执行
cat /etc/resolv.conf,检查DNS是否正常。
如果第3步失败但第2步有默认路由,多半是网关设置错误,而不是IP地址本身问题,如果第2步缺失,回到上面讲的静态IP配置步骤再检查一遍。
业内专家指出,大多数人在虚拟机网络配置上犯错,根因是把宿主机网卡和虚拟机网卡的网段搅在一起,尤其是桥接模式下,虚拟机直接挂到宿主机所在局域网上,IP地址网段必须和宿主机一致;NAT模式下则不同,虚拟机能访问外网,但局域网内其他机器看不到它。
结尾就一句话:你的IP配置不生效,往往不是系统问题,而是没有用ip addr摸清网卡的“想法”
看懂state和inet两个字段,再围绕路由和DNS去验证,90%的虚拟机IP地址配置疑问都能在几分钟内定位,多敲几次ip addr,远比你反复重启虚拟机更有效。
虚拟机IP地址配置疑问快问快答
为什么ip addr显示网卡有多个IPv6地址,但没有IPv4地址
因为网络环境里没有可用的DHCP服务,或者网卡上的DHCP请求被虚拟化平台的防火墙拦截,这种情况下,系统会自动生成一个fe80开头的IPv6链路本地地址,让设备保持基本通信能力,你需要检查虚拟机的网络模式,特别是NAT模式下VMware DHCP服务是否启用,若服务正常,执行dhclient ens33即可拿到IPv4。
通过ip addr改IP之后,重启虚拟机又变回原来的地址怎么办
因为你用ip addr命令添加的地址是临时地址,不会写入配置文件,ip addr本身只能提供运行时状态,要持久化配置,必须回到nmcli或netplan修改配置文件,配置完成后再执行nmcli connection up或netplan apply,系统重启后地址才会保留。
虚拟机里执行ip addr需要root权限吗
只查看不需要root,任何用户都能执行,但执行ip addr add或ip link set up这类修改操作时,必须使用sudo或root身份,这里有个细节:修改IP前可以先备份当前配置,用ip addr show > ip_bak.txt保存,后面恢复时能少踩很多坑。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/924832.html


评论列表(4条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于执行的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是执行部分,给了我很多新的思路。感谢分享这么好的内容!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于执行的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
读了这篇文章,我深有感触。作者对执行的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!