引言:为什么需要手动配置IP
在Ubuntu日常使用中,网络连接通常由DHCP自动分配IP地址,这能满足大部分即插即用的场景。然而,当你在搭建服务器、配置虚拟机、连接嵌入式开发板,或者处于一个没有DHCP服务的局域网环境时,手动配置静态IP就变得不可或缺。静态IP能确保设备地址固定,便于远程SSH连接、端口转发以及服务发现。本文将基于Ubuntu 20.04及22.04 LTS版本,系统讲解使用netplan工具和传统ifupdown方式配置网卡IP的完整流程,并涵盖常见故障排查。

准备工作:确认网卡名称与当前状态
在修改任何配置之前,必须先准确识别系统的网卡接口名。现代Ubuntu使用可预测的网络接口命名规则,常见名称如ens33、enp0s3、eth0或无线网卡wlp2s0。打开终端,执行以下命令查看所有网络接口:
ip addr show
输出中会列出类似2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP>的内容,其中ens33就是接口名。同时注意state UP表示接口已启用。如果没有看到IP地址,说明该接口尚未获取到地址。另外,可以使用nmcli device status来查看NetworkManager管理的设备状态,这有助于判断网络服务是否正常。
方法一:使用Netplan配置静态IP(推荐)
自Ubuntu 17.10起,系统默认使用netplan作为网络配置前端,它通过YAML格式的配置文件来管理网络。
1. 定位配置文件
配置文件位于/etc/netplan/目录下,通常命名为01-network-manager-all.yaml或50-cloud-init.yaml。使用ls /etc/netplan/查看现有文件。编辑前建议先备份:
sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.bak
2. 编辑YAML文件
使用sudo nano /etc/netplan/01-network-manager-all.yaml打开文件。一个典型的静态IP配置示例如下:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
其中关键字段解释:dhcp4: no明确关闭DHCP;addresses列表填写IP地址和子网掩码(CIDR格式,/24对应255.255.255.0);routes定义默认网关;nameservers设置DNS服务器。注意缩进必须严格使用两个空格,不能使用Tab键。
3. 应用配置
保存文件后,先测试配置是否正确:
sudo netplan try
该命令会应用配置并等待用户确认(默认120秒)。如果配置有误,系统会自动回滚。确认无误后,按回车键接受,或者直接执行sudo netplan apply立即生效。验证IP是否配置成功:
ip addr show ens33
如果看到inet 192.168.1.100/24,说明配置成功。此时可以尝试ping 192.168.1.1测试网关连通性。
4. 多IP地址配置
有时一个网卡需要绑定多个IP,只需在addresses列表中增加条目:
addresses:
- 192.168.1.100/24
- 10.0.0.5/24
方法二:使用nmcli(NetworkManager命令行)
对于使用NetworkManager的桌面版Ubuntu,也可以直接用nmcli命令快速配置,无需编辑文件。
1. 查看连接
nmcli connection show
记下要修改的连接名称(如Wired connection 1)。
2. 修改为静态IP
假设将ens33的IP改为192.168.1.100,网关192.168.1.1,DNS为8.8.8.8,执行:
nmcli connection modify \"Wired connection 1\" ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns \"8.8.8.8 114.114.114.114\" ipv4.method manual
最后重新激活连接:
nmcli connection up \"Wired connection 1\"
这种方法适合临时修改,且不会破坏netplan配置(前提是netplan的renderer为NetworkManager)。
方法三:传统ifupdown方式(适用于旧系统)
如果你还在使用Ubuntu 16.04或更早版本,或者系统安装了ifupdown包,可以编辑/etc/network/interfaces文件:
auto ens33
iface ens33 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8
然后重启网络服务sudo systemctl restart networking。但请注意,在Ubuntu 18.04以上版本中,此方式可能被netplan覆盖,不建议混用。
常见问题排查
1. 配置后无法上网
首先检查网关是否可达:ping -c 3 192.168.1.1。如果网关不通,确认IP和网关是否在同一网段,子网掩码是否正确。其次检查DNS:nslookup www.ubuntu.com,如果DNS解析失败,尝试修改nameservers为公共DNS如223.5.5.5。
2. netplan apply报错
错误信息通常能指明问题,如Invalid YAML或unknown key。检查是否使用了Tab缩进,或者字段名拼写错误。可以使用sudo netplan generate来生成底层配置,帮助定位错误。
3. 接口名不对
如果ip addr看到的接口名是enp0s3而非ens33,只需将配置中的接口名替换即可。另外,某些云主机(如AWS)使用eth0,配置方法相同。
4. 重启后配置丢失
确认你修改的是netplan配置文件而非临时命令。另外,如果系统同时安装了cloud-init,它可能会覆盖网络配置。可以禁用cloud-init的网络管理功能:sudo touch /etc/cloud/cloud-init.disabled(慎用,仅适用于不需要云初始化的机器)。
动态IP与静态IP的切换
如果你需要临时恢复DHCP,只需修改netplan文件,将dhcp4: no改为dhcp4: yes,并删除addresses和routes中的静态配置项,然后sudo netplan apply。或者使用nmcli connection modify将ipv4.method改为auto。
结语
配置Ubuntu网卡IP并不复杂,关键在于理解网络配置文件的结构和命令的用法。推荐优先使用netplan,因为它简洁且是Ubuntu未来的方向。无论你是在物理机、虚拟机还是云服务器上,掌握上述方法都能游刃有余地管理网络。最后提醒,修改网络配置前务必备份原文件,并确保你有其他方式(如物理终端)能访问系统,以免配置错误导致失联。