ip addr show 是最直接确认网卡 IPv4、IPv6 和 MAC 地址是否正常配置的方式,它在同一输出中整合三层 IP 与二层 MAC 信息;若 inet6 缺失或 link/ether 为空/全零,表明 IPv6 被禁用或网卡未成功初始化。

ip addr show 能看到 IPv4、IPv6 和链路层地址
想确认某块网卡在 IPv4、IPv6 和 MAC 层是否都正常配置,ip addr show 是最直接的方式。它把三层(IP)和二层(MAC)信息全列在同一块输出里,避免来回切换命令。
常见错误是只扫一眼 inet 就以为配置完了,结果发现 inet6 缺失或 link/ether 显示 00:00:00:00:00:00 —— 这说明驱动没加载或硬件未识别。
-
ip addr show ens33查看具体接口;ip -4 addr show ens33只看 IPv4;ip -6 addr show ens33只看 IPv6 - 如果
inet6行完全没出现,不一定是禁用了 IPv6,可能是内核参数ipv6.disable=1或 sysctl 关闭了net.ipv6.conf.all.disable_ipv6 -
link/ether后面为空或全零,大概率是网卡未 probe 成功,可配合lspci | grep -i ethernet和dmesg | grep -i eth追查硬件初始化日志
ifconfig 输出里 IPv4 和 IPv6 是混在一起的,但不显示 link-local IPv6 地址
ifconfig 会显示主 IP(如 inet 和 inet6),但它默认过滤掉以 fe80:: 开头的 link-local 地址 —— 而这类地址对邻居发现(NDP)、DHCPv6 和容器网络至关重要。
也就是说,你用 ifconfig eth0 看不到 fe80::xxx,但 ip -6 addr show eth0 一定有。这是两者行为差异最常被忽略的一点。
- 若需兼容旧脚本且必须用
ifconfig,加-a参数也不补全 link-local;它本质不支持完整 IPv6 地址族展示 - 某些发行版(如较新 Ubuntu)默认不装
net-tools,ifconfig直接报command not found,别急着重装,优先用ip -
ifconfig的MTU、flags字段虽直观,但不反映真实运行时状态(比如UP标志可能还在,但物理链路已断)
检查协议栈启用状态:别只看地址,要看内核是否允许收发
有 IP 地址 ≠ 能通信。Linux 协议栈各层可独立开关,比如 IPv4 转发开了,但 IPv6 的 accept_ra 关了,就收不到路由器通告;或者 net.ipv4.conf.all.forwarding 是 1,但 net.ipv4.ip_forward 是 0 —— 后者才是实际生效项。
这些开关藏在 /proc/sys/net/ 下,不能靠 ip addr 推断。
- 查 IPv4 是否启用转发:
cat /proc/sys/net/ipv4/ip_forward(1 = 开,0 = 关) - 查 IPv6 是否接受 RA:
cat /proc/sys/net/ipv6/conf/ens33/accept_ra - 查某个接口是否参与 ARP(IPv4)或 NDP(IPv6):
cat /proc/sys/net/ipv4/conf/ens33/arp_ignore和/proc/sys/net/ipv6/conf/ens33/forwarding
nmcli device show 不显示协议细节,但能告诉你 NetworkManager 怎么理解这个接口
如果你系统跑的是 NetworkManager(桌面版默认、部分服务器也启用),nmcli device show ens33 输出的是 NM 对该设备的“认知”,不是内核真实状态。它会告诉你 DHCP 是怎么拿到地址的、DNS 从哪来、有没有启用 IPv6 自动配置 —— 但不会显示 fe80:: 地址或 link/ether。
典型坑是:ip addr 显示 IPv6 地址,nmcli device show 却说 IP6.ADDRESS[1]: --。这是因为 NM 可能没接管该接口(比如配置文件里写了 managed=false),或者用了 keyfile 外部管理方式。
- 确认 NM 是否管理某接口:
nmcli device status看STATE列,unmanaged表示 NM 完全不管 -
nmcli -p device show ens33(带-p)会用更易读的格式分组输出,比默认紧凑格式好排查 - 如果
nmcli显示 IPv6 配置为ignore,但ip -6 addr仍有地址,说明地址是内核自动分配的(如 stable-privacy),NM 并未干预
真正麻烦的从来不是“有没有地址”,而是“地址归谁管、协议栈认不认、上层服务信不信”。ip addr 给你事实,nmcli 给你意图,/proc/sys/net/ 给你控制权 —— 三者对不上,问题才刚开始。











