问题现象
在 Ubuntu 24.04 系统中,使用 ip a 命令查看网络接口信息时,发现 eth0 网卡有两个 IP 地址:
root@ubuntu24:/etc/netplan# ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:44:77:6b brd ff:ff:ff:ff:ff:ff
altname enp2s1
altname ens33
inet 10.0.0.16/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 172.24.100.2/24 brd 172.24.100.255 scope global dynamic noprefixroute eth0
valid_lft 932sec preferred_lft 932sec
inet6 fe80::52e5:df16:9564:f355/64 scope link noprefixroute
valid_lft forever preferred_lft forever
其中:
10.0.0.16/24是静态 IP 地址(没有dynamic标记)172.24.100.2/24是动态获取的 IP 地址(有dynamic标记)
原因分析
1. 网络配置冲突
从 NetworkManager 配置文件可以看出,当前连接使用的是自动获取 IP 地址的方式:
root@ubuntu24:/etc/netplan# cat /run/NetworkManager/system-connections/netplan-NM-3f66d423-5d20-3818-a84f-db79126eeaa9.nmconnection
[connection]
id=eth0
type=ethernet
uuid=3f66d423-5d20-3818-a84f-db79126eeaa9
interface-name=eth0
#Netplan: passthrough setting
autoconnect-priority=-999
#Netplan: passthrough setting
timestamp=1764325222
[ethernet]
wake-on-lan=1
[ipv4]
method=auto
[ipv6]
method=auto
#Netplan: passthrough setting
addr-gen-mode=default
[proxy]
但同时存在静态 IP 地址 10.0.0.16/24,这可能是由于以下原因:
- Netplan 配置冲突:Netplan 配置文件中可能同时配置了静态 IP 和 DHCP
- 旧配置残留:之前手动配置了静态 IP,后来改为 DHCP,但旧配置没有完全清除
- 多个网络配置文件:存在多个有效的网络配置文件
2. IP 地址类型分析
从 ip a 输出可以看出:
10.0.0.16/24:没有dynamic标记,说明是静态配置的172.24.100.2/24:有dynamic标记,说明是通过 DHCP 动态获取的
解决方案
方法一:使用 ip 命令临时移除 IP 地址
如果只是临时需要移除 IP 地址,可以使用 ip 命令:
# 移除指定的 IP 地址
ip addr del 10.0.0.16/24 dev eth0
# 验证是否移除成功
ip a show eth0
注意:这种方法只是临时生效,系统重启后 IP 地址会重新出现。
方法二:检查并修改 Netplan 配置
Netplan 是 Ubuntu 18.04 及以上版本的默认网络配置工具。需要检查 Netplan 配置文件:
- 查看 Netplan 配置文件
ls -la /etc/netplan/ cat /etc/netplan/*.yaml 修改 Netplan 配置 如果发现配置文件中同时配置了静态 IP 和 DHCP,需要修改为只使用一种方式。
示例:只使用 DHCP
network: version: 2 renderer: NetworkManager ethernets: eth0: dhcp4: true dhcp6: true示例:只使用静态 IP
network: version: 2 renderer: NetworkManager ethernets: eth0: addresses: - 172.24.100.2/24 gateway4: 172.24.100.1 nameservers: addresses: [8.8.8.8, 8.8.4.4]- 应用 Netplan 配置
netplan apply或者
netplan generate && netplan apply
方法三:使用 NetworkManager 命令行工具移除 IP
- 查看当前连接的 IP 配置
nmcli con show eth0 | grep ipv4.addresses - 移除静态 IP 地址
# 查看当前 ipv4 配置 nmcli con show eth0 ipv4 # 修改连接,移除静态 IP 配置(设置为自动获取) nmcli con mod eth0 ipv4.method auto ipv4.addresses "" # 重启连接 nmcli con down eth0 && nmcli con up eth0
方法四:删除旧的网络配置文件
如果存在多个网络配置文件,可能会导致冲突:
- 查看所有 NetworkManager 配置文件
ls -la /etc/NetworkManager/system-connections/ ls -la /run/NetworkManager/system-connections/ - 删除不需要的配置文件
# 先备份 cp /etc/NetworkManager/system-connections/旧配置.nmconnection /root/ # 删除旧配置 rm /etc/NetworkManager/system-connections/旧配置.nmconnection - 重启 NetworkManager 服务
systemctl restart NetworkManager
方法五:检查并清理旧的 IP 配置
- 检查是否有旧的 ifupdown 配置
cat /etc/network/interfaces如果有 eth0 的配置,需要注释或删除。
- 检查是否有 systemd-networkd 配置
ls -la /etc/systemd/network/如果有相关配置,需要调整。
验证解决方案
执行上述操作后,使用 ip a 命令验证 IP 地址是否已经移除:
ip a show eth0
常见问题及解决方法
问题:使用 nmcli 配置静态 IP 时出现 “method ‘manual’ requires at least an address or a route” 错误
现象:当尝试使用 nmcli con mod eth1 ipv4.method manual 命令将网络连接改为静态 IP 配置时,出现以下错误:
错误:修改连接 "eth1" 失败:ipv4.method: method 'manual' requires at least an address or a route
原因:NetworkManager 要求当 IP 配置方法为 manual(静态 IP)时,必须同时提供至少一个 IP 地址或路由信息。
解决方案:在同一个命令中同时指定 IP 配置方法和 IP 地址:
# 同时设置 IP 配置方法和 IP 地址
nmcli con mod eth1 \
ipv4.method manual \
ipv4.addresses "192.168.1.100/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8,8.8.4.4"
# 重启连接以应用配置
nmcli con down eth1 && nmcli con up eth1
完整操作流程:
- 查看当前连接信息
- 同时修改 IP 方法和地址
- 重启连接
- 验证配置
# 查看当前连接
nmcli con show
# 配置静态 IP
nmcli con mod eth1 ipv4.method manual ipv4.addresses "192.168.1.100/24" ipv4.gateway "192.168.1.1"
# 重启连接
nmcli con down eth1 && nmcli con up eth1
# 验证配置
ip a show eth1
问题:修改配置后 IP 地址没有立即生效
现象:使用 nmcli 修改网络配置后,IP 地址没有立即变化。
原因:NetworkManager 需要重启连接才能应用新的配置。
解决方案:使用 nmcli con down 和 nmcli con up 命令重启连接:
nmcli con down eth0 && nmcli con up eth0
问题:无法删除旧的 IP 地址
现象:尝试删除旧的 IP 地址时,命令执行成功但 IP 地址仍然存在。
原因:可能存在多个网络配置文件或配置冲突。
解决方案:
- 检查是否有多个网络配置文件
- 重启 NetworkManager 服务
- 重新启动系统(如果必要)
# 检查配置文件
ls -la /etc/NetworkManager/system-connections/
ls -la /run/NetworkManager/system-connections/
# 重启 NetworkManager
systemctl restart NetworkManager
ip a show eth0
预防措施
统一网络配置工具:在 Ubuntu 系统中,建议只使用一种网络配置工具(Netplan + NetworkManager 或 systemd-networkd)
定期清理旧配置:在修改网络配置时,及时清理旧的配置文件
使用一致的配置方式:对于同一个网卡,不要同时配置静态 IP 和 DHCP
重启网络服务:修改网络配置后,确保重启相关服务以应用更改
检查配置文件语法:使用
netplan try命令测试 Netplan 配置语法是否正确
总结
Linux 网卡出现两个 IP 地址通常是由于网络配置冲突导致的。通过以下步骤可以解决:
- 分析 IP 地址类型(静态或动态)
- 检查 Netplan 配置文件
- 检查 NetworkManager 配置
- 移除冲突的配置
- 应用新配置并验证
选择合适的解决方案取决于你的网络环境和需求。对于临时需求,可以使用 ip 命令临时移除;对于长期解决方案,建议修改 Netplan 或 NetworkManager 配置。
文档信息
- 本文作者:soveran zhong
- 本文链接:https://blog.clockwingsoar.cyou/2025/11/28/remove-duplicate-ip-address/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)