Ubuntu系统网卡地址定制
一、前期准备:确认系统环境与网卡信息
1. 确认Ubuntu系统版本(关键!区分netplan配置方式)
执行命令:
bash
lsb_release -a
预期结果示例:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
- 核心说明:Ubuntu 18.04+ 均支持netplan,配置文件格式统一;16.04及以下需用传统方式(文末附补充)。
2. 查看所有网卡信息(核心!确定要配置的网卡名)
方法1:用 ip a 命令(推荐,显示最全面)
执行命令:
bash
ip a
预期结果示例(重点解读):
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:xx:xx:xx brd ff:ff:ff:ff:ff:ff # 网卡MAC地址
inet 192.168.1.6/24 brd 192.168.1.255 scope global dynamic noprefixroute ens33 # 当前IP(dynamic=DHCP获取)
valid_lft 86395sec preferred_lft 86395sec
3: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 7c:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff # 无线网卡(若有,按需配置)
关键解读:
- 排除
lo(本地回环网卡,无需配置); - 重点关注状态为
UP的网卡(如ens33,物理有线网卡)或无线网卡(wlp2s0); - 记好网卡名(可能是
ens33、eth0、enp0s3等),后续配置均针对此网卡。
方法2:用 nmcli device 命令(确认网卡是否被系统管理)
执行命令:
bash
nmcli device
预期结果示例:
DEVICE TYPE STATE CONNECTION
ens33 ethernet connected ens33 # 已连接,被管理
wlp2s0 wifi disconnected --
lo loopback unmanaged --
- 确保目标网卡的
TYPE为ethernet(有线)或wifi(无线),STATE不为unmanaged。
3. 查看当前网络配置(IP/网关/DNS,备份参考)
(1)查看当前IP和子网掩码
bash
ip addr show ens33 # 替换为你的网卡名
预期结果 :显示该网卡的IP(如 192.168.1.6/24,/24 对应子网掩码 255.255.255.0)。
(2)查看当前网关
bash
ip route show # 简写 ip r
预期结果示例:
default via 192.168.1.1 dev ens33 proto dhcp src 192.168.1.6 metric 100 # default via 后为网关(192.168.1.1)
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.6 metric 100
(3)查看当前DNS
bash
cat /etc/resolv.conf
预期结果示例:
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 114.114.114.114
二、核心配置:用netplan定制网卡地址(Ubuntu 18.04+推荐)
netplan的配置文件为YAML格式(后缀 .yaml),默认存放在 /etc/netplan/ 目录,步骤如下:
1. 查看现有netplan配置文件
执行命令:
bash
ls /etc/netplan/
预期结果示例:
00-installer-config.yaml # 系统默认配置文件(文件名可能不同,如50-cloud-init.yaml)
- 记好配置文件名(后续直接修改该文件,或新建文件覆盖)。
2. 备份原有配置文件(重要!避免配置错误无法恢复)
执行备份命令(替换文件名和网卡名为你的实际信息):
bash
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak
验证备份是否成功:
bash
ls /etc/netplan/
预期结果 :同时显示原文件和备份文件(如 00-installer-config.yaml 和 00-installer-config.yaml.bak)。
3. 编辑netplan配置文件(YAML格式,严格缩进!)
用 vim 编辑文件(若未安装vim,先执行 sudo apt install vim -y):
bash
sudo vim /etc/netplan/00-installer-config.yaml
场景1:配置静态IP(常用,固定IP地址)
删除原有内容,按以下格式添加(缩进用2个空格,不能用Tab! 否则配置失效):
yaml
# 网络配置文件(netplan)
network:
version: 2 # 固定版本号,必须为2
renderer: NetworkManager # 渲染器(Ubuntu桌面版推荐,服务器版可改为networkd)
ethernets:
ens33: # 替换为你的网卡名(如ens33、eth0)
dhcp4: no # 禁用IPv4 DHCP(静态IP必须设为no)
dhcp6: no # 禁用IPv6 DHCP(无需IPv6则设为no)
addresses: # 静态IP+子网掩码(格式:[IP/子网前缀])
- 192.168.1.100/24 # 定制的静态IP,/24对应子网掩码255.255.255.0
gateway4: 192.168.1.1 # 网关地址(与路由器/网关一致,参考前期查看结果)
nameservers: # DNS配置
addresses: [8.8.8.8, 114.114.114.114] # 首选DNS+备选DNS,用逗号分隔
场景2:配置动态IP(DHCP,自动获取IP)
若无需固定IP,让路由器自动分配,配置如下:
yaml
network:
version: 2
renderer: NetworkManager
ethernets:
ens33: # 替换为你的网卡名
dhcp4: yes # 启用IPv4 DHCP(自动获取IP)
dhcp6: no # 禁用IPv6(按需开启)
nameservers: # 可选:指定DNS,不指定则用路由器分配的DNS
addresses: [8.8.8.8, 114.114.114.114]
场景3:配置无线网卡(WiFi)静态IP(额外补充)
若需配置WiFi的静态IP,修改配置如下(替换WiFi名称、密码和网卡名):
yaml
network:
version: 2
renderer: NetworkManager
wifis:
wlp2s0: # 替换为你的无线网卡名(如wlp2s0)
dhcp4: no
dhcp6: no
addresses: [192.168.1.101/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
access-points:
"WiFi名称": # 你的WiFi名称(双引号必须保留,含特殊字符也需包含)
password: "WiFi密码" # 你的WiFi密码(双引号保留)
4. 保存文件并退出vim
- 按
Esc键,输入:wq(冒号+wq),回车保存退出; - 若误操作需放弃修改,输入
:q!回车强制退出。
5. 应用netplan配置(使配置生效)
步骤1:验证配置文件语法是否正确(避免缩进错误)
执行命令(替换配置文件名):
bash
sudo netplan try
预期结果:
- 若语法正确,会提示
Do you want to keep these settings? (yes/no),输入yes确认; - 若语法错误,会提示具体行数(如
Error in network definition at /etc/netplan/00-installer-config.yaml line 8: expected indentation),需返回编辑文件修正缩进。
步骤2:正式应用配置(永久生效)
bash
sudo netplan apply
- 无报错即表示应用成功(无需重启系统,即时生效)。
三、验证配置是否生效(完整验证流程)
1. 基础验证:IP/网关/DNS是否正确
bash
# (1)查看网卡IP是否更新
ip addr show ens33 # 替换为你的网卡名
# 预期结果:静态IP显示192.168.1.100/24,动态IP显示新分配地址
# (2)查看网关是否正确
ip route show
# 预期结果:default via 192.168.1.1 dev ens33(静态IP场景)
# (3)查看DNS是否正确
cat /etc/resolv.conf
# 预期结果:包含设置的DNS(8.8.8.8和114.114.114.114)
2. 网络连通性验证
bash
# (1)ping网关(测试内网连通性)
ping 192.168.1.1 -c 4 # -c 4 表示ping4次后停止
# 预期结果:0% packet loss(无丢包)
# (2)ping公网IP(测试外网连通性)
ping 223.5.5.5 -c 4 # 阿里公共DNS IP,无需解析
# 预期结果:0% packet loss
# (3)ping域名(测试DNS解析是否正常)
ping www.baidu.com -c 4
# 预期结果:能解析出百度IP(如183.232.231.172)并ping通
3. 开机自启验证(确保重启后生效)
bash
# 重启系统(谨慎!保存当前工作)
sudo reboot
# 重启后执行以下命令验证
ip a show ens33 # IP是否正确
ping www.baidu.com # 网络是否连通
四、常见问题排查(配置失败时用)
1. netplan apply 无报错,但IP未更新
- 原因1:配置文件缩进错误(YAML对缩进敏感);
解决:重新编辑文件,确保所有层级用2个空格缩进,无Tab键。 - 原因2:网卡名填错;
解决:重新执行ip a确认网卡名,修正配置文件中的网卡名。 - 原因3:渲染器冲突(桌面版用了networkd);
解决:将配置文件中的renderer: networkd改为renderer: NetworkManager,重新执行sudo netplan apply。
2. ping不通网关/外网
- 检查网关是否正确(对比路由器后台的网关地址,如192.168.0.1而非192.168.1.1);
- 检查子网前缀是否正确(如网关是192.168.1.1,IP必须是192.168.1.x/24,不能是192.168.0.x/24);
- 临时关闭防火墙测试(Ubuntu默认防火墙不拦截ping,若手动开启过,执行
sudo ufw disable关闭)。
3. DNS解析失败(ping IP通,ping域名不通)
-
检查配置文件中
nameservers.addresses是否填写正确(无多余逗号、括号); -
手动修改DNS临时测试:
bashsudo echo "nameserver 8.8.8.8" > /etc/resolv.conf若能解析,重新执行
sudo netplan apply让配置永久生效。
4. 配置文件丢失/误删
-
用备份文件恢复:
bashsudo cp /etc/netplan/00-installer-config.yaml.bak /etc/netplan/00-installer-config.yaml sudo netplan apply
五、补充:Ubuntu 16.04及以下(传统配置方式)
若你的系统是Ubuntu 16.04或更早(不支持netplan),通过编辑 /etc/network/interfaces 配置:
1. 备份配置文件
bash
sudo cp /etc/network/interfaces /etc/network/interfaces.bak
2. 编辑文件
bash
sudo vim /etc/network/interfaces
3. 配置静态IP
bash
# 本地回环网卡
auto lo
iface lo inet loopback
# 有线网卡(ens33)
auto ens33 # 开机自动激活
iface ens33 inet static # 静态IP
address 192.168.1.100 # 静态IP
netmask 255.255.255.0 # 子网掩码
gateway 192.168.1.1 # 网关
dns-nameservers 8.8.8.8 114.114.114.114 # DNS
4. 配置动态IP
bash
auto ens33
iface ens33 inet dhcp # 动态IP
5. 重启网络生效
bash
sudo /etc/init.d/networking restart