Ubuntu各个版本网络配置方法

不管是在学习还是工作中,我接触比较多的Linux发行版都是CentOS,对Ubuntu不是很熟悉,经常在处理一些Ubuntu问题的时候捉襟见肘,比如在网络配置上,不同版本的配置方式和工具是不一样的,每次遇到都要查下对应版本的配置方法。为了不再如此被动,决定花点时间整理下常见的Ubuntu LTS版本的网络配置方法

ifupdown、NetworkManager、nmcli、systemd-networkd和netplan都是什么呢?


Ubuntu操作系统中,网络管理工具和守护进程有多种,它们各自有不同的用途和特点。下面是对ifupdown、NetworkManager、nmcli、systemd-networkd和netplan这几个组件的简要解释和它们之间的关系:

  1. ifupdown

    • ifupdown是一个较旧的网络配置工具,用于管理Debian系列Linux发行版的网络接口。它使用/etc/network/interfaces文件来定义网络接口的配置。
    • 在Ubuntu 16.04及之前的版本中,ifupdown是默认的网络管理工具。
  2. NetworkManager

    • NetworkManager是一个动态网络控制和配置守护进程,它可以自动检测网络设备并管理网络连接。它支持多种网络设备和协议,包括有线、无线、移动宽带等。
    • NetworkManager提供了一个图形界面和命令行工具(nmcli),使得用户可以方便地配置和管理网络。
    • Ubuntu桌面版(Desktop版)默认会安装NetworkManager;Ubuntu服务器版(Server版)不会安装NetworkManager
  3. nmcli

    • nmcli是NetworkManager的命令行界面,用户可以通过它来执行各种网络配置任务,如添加、删除、启用或禁用网络连接等。
  4. systemd-networkd

    • systemd-networkd是systemd系统和服务管理器的一部分,用于管理网络设备和网络连接。它提供了一种基于网络配置文件的网络管理方式。
    • systemd-networkd与NetworkManager可以同时存在,但它们通常不会同时管理同一个网络接口,以避免冲突。
  5. netplan

    • netplan是Ubuntu 17.10及以后版本中引入的网络配置抽象化工具,用于简化网络配置的复杂性。它使用YAML格式的配置文件来定义网络接口的配置。
    • netplan的设计目标是提供一种统一的方式来定义网络接口的配置,无论是通过systemd-networkd还是NetworkManager来管理。

关系

  • NetworkManager和systemd-networkd都可以独立管理网络设备,但通常不会同时使用它们来管理同一个设备,因为它们可能会产生冲突。
  • nmcli是NetworkManager的命令行工具,用于配置和管理NetworkManager。
  • ifupdown是较旧的网络配置工具,已经被netplan取代。
  • netplan提供了一种统一的方式来定义网络接口的配置,可以与systemd-networkd或NetworkManager配合使用。

netplan


Netplan是所有最新Ubuntu版本中的Ubuntu网络配置工具。Netplan基于YAML的配置系统,简化了配置过程。它取代了我们在Ubuntu和其他Linux发行版中用于配置网络接口的旧配置文件/etc/network/interfaces

netplan工作原理

Netplan是一个网络配置抽象层,它被设计用来简化网络配置的复杂性,特别是在使用多种网络管理工具(如NetworkManager、systemd-networkd、ifupdown等)时。Netplan的工作原理可以概括为以下几个步骤:

  1. 定义网络配置文件:Netplan使用YAML格式的配置文件来描述网络接口的配置。这些配置文件通常位于/etc/netplan/01-netcfg.yaml或者/etc/netplan/*.yaml

  2. 抽象层解析:当系统需要配置网络时,Netplan会读取YAML配置文件,并将其解析成具体的网络管理工具可以理解的格式。

  3. 生成网络配置:根据解析的结果,Netplan会生成适用于特定网络管理工具的配置文件。例如,如果系统使用NetworkManager,Netplan会生成/etc/NetworkManager/system-connections/*目录下的.nmconnection文件。

  4. 应用配置:生成的配置文件会被相应的网络管理工具读取,并应用到系统中。例如,NetworkManager会读取.nmconnection文件,并根据这些文件配置网络。

  5. 状态反馈:网络管理工具在应用配置后,会向Netplan提供当前网络的状态信息,Netplan可以利用这些信息来更新系统的网络状态。

  6. 用户交互:用户可以通过命令行工具(如 netplan applynetplan generate)与Netplan交互,查看、应用或生成网络配置。

Netplan的设计目标是提供一个统一的接口来管理网络配置,使得在不同的网络管理工具之间切换变得更加容易,同时减少了配置错误的可能性。

Ubuntu16.04


桌面版(Desktop版)

  1. 执行以下命令查询要配置的网卡对应的连接名称(CONNECTTION字段),并确认STATEconnected
1
sudo nmcli dev status
  1. 配置网络
  • DHCP自动获取
1
2
sudo nmcli connection modify "Wired connection 1" ipv4.method auto
sudo nmcli connection up "Wired connection 1"

说明
如果先前配置过静态地址要改成动态获取,需要先按照以下步骤把之前静态地址的配置删除

1
2
3
4
5
6
7
sudo nmcli connection edit "Wired connection 1"
nmcli> goto ipv4
nmcli ipv4> remove ipv4.address
nmcli ipv4> remove ipv4.gateway
nmcli ipv4> remove ipv4.dns
nmcli ipv4> save
nmcli ipv4> quit
  • 静态IP
1
2
3
4
5
sudo nmcli connection modify "Wired connection 1" ipv4.addresses 10.211.55.33/24
sudo nmcli connection modify "Wired connection 1" ipv4.gateway 10.211.55.1
sudo nmcli connection modify "Wired connection 1" ipv4.dns "114.114.114.114 8.8.8.8"
sudo nmcli connection modify "Wired connection 1" ipv4.method manual
sudo nmcli connection up "Wired connection 1"
  1. 查看配置信息
1
sudo nmcli connection show "Wired connection 1"

服务器版(Server版)

  1. 执行以下命令编辑网络接口配置文件/etc/network/interfaces
1
sudo vim /etc/network/interfaces
  1. 修改或添加以下内容,并保存退出
  • DHCP自动获取
1
2
auto enp0s5
iface enp0s5 inet dhcp
  • 静态IP
1
2
3
4
5
6
auto enp0s5
iface enp0s5 inet static
address 10.211.55.33
netmask 255.255.255.0
gateway 10.211.55.1
dns-nameservers 114.114.114.114 8.8.8.8
  1. 重启网络服务
1
sudo ip addr flush enp0s5 && sudo systemctl restart networking

Ubuntu18.04


桌面版(Desktop版)

nmcli

  1. 执行以下命令查询要配置的网卡对应的连接名称(CONNECTTION字段),并确认STATEconnected
1
sudo nmcli dev status
  1. 配置网络
  • DHCP自动获取
1
2
sudo nmcli connection modify "Wired connection 1" ipv4.method auto
sudo nmcli connection up "Wired connection 1"

说明
如果先前配置过静态地址要改成动态获取,需要先按照以下步骤把之前静态地址的配置删除

1
2
3
4
5
6
7
sudo nmcli connection edit "Wired connection 1"
nmcli> goto ipv4
nmcli ipv4> remove ipv4.address
nmcli ipv4> remove ipv4.gateway
nmcli ipv4> remove ipv4.dns
nmcli ipv4> save
nmcli ipv4> quit
  • 静态IP
1
2
3
4
5
sudo nmcli connection modify "Wired connection 1" ipv4.addresses 10.211.55.33/24
sudo nmcli connection modify "Wired connection 1" ipv4.gateway 10.211.55.1
sudo nmcli connection modify "Wired connection 1" ipv4.dns "114.114.114.114 8.8.8.8"
sudo nmcli connection modify "Wired connection 1" ipv4.method manual
sudo nmcli connection up "Wired connection 1"
  1. 查看配置信息
1
sudo nmcli connection show "Wired connection 1"

netplan

说明
我在Ubuntu18.04桌面版上多次尝试使用netplan配置网络,每次执行sudo netplan apply后网络就中断,在控制台里查看网络配置,网卡是UP的,但是配置都没生效,不管是DHCP动态获取还是静态IP。一时没查到问题在哪里,如果有知道原因的小伙伴欢迎在评论区留言(/≧▽≦)/

服务器版(Server版)

  1. 执行以下命令编辑netplan配置文件/etc/netplan/00-installer-config.yaml
1
sudo vim /etc/netplan/00-installer-config.yaml
  1. 修改或添加以下内容,并保存退出

说明
netplan配置文件使用YAML格式,可参考以下说明

1
2
3
4
5
6
7
8
9
10
network:
version: 2
renderer: NetworkManager/ networkd
ethernets:
DEVICE_NAME:
dhcp4: yes/no
addresses: [IP_ADDRESS/NETMASK]
gateway4: GATEWAY
nameservers:
addresses: [NAMESERVER_1, NAMESERVER_2]
变量 说明
DEVICE_NAME 接口的名称
dhcp4 yes或no取决于动态或静态IP寻址
IP_ADDRESS/NETMASK 设备的IP地址(采用前缀表示法),不要使用网络掩码
GATEWAY 指定网关IP地址
NAMESERVER DNS名称服务器的地址,多个之前用,隔开
  • DHCP自动获取
1
2
3
4
5
6
network:
version: 2
renderer: networkd
ethernets:
enp0s5:
dhcp4: yes
  • 静态IP
1
2
3
4
5
6
7
8
9
10
network:
version: 2
renderer: networkd
ethernets:
enp0s5:
dhcp4: no
addresses: [10.211.55.33/24]
gateway4: 10.211.55.1
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
  1. 应用配置
1
sudo reboot

说明
Ubuntu18.04服务器版执行sudo netplan apply后旧配置不会自动清理,重启就可以。如果有知道原因的小伙伴欢迎在评论区留言(/≧▽≦)/

Ubuntu20.04


桌面版(Desktop版)

nmcli

  1. 执行以下命令查询要配置的网卡对应的连接名称(CONNECTTION字段),并确认STATEconnected
1
sudo nmcli dev status
  1. 配置网络
  • DHCP自动获取
1
2
sudo nmcli connection modify "Wired connection 1" ipv4.method auto
sudo nmcli connection up "Wired connection 1"

说明
如果先前配置过静态地址要改成动态获取,需要先按照以下步骤把之前静态地址的配置删除

1
2
3
4
5
6
7
sudo nmcli connection edit "Wired connection 1"
nmcli> goto ipv4
nmcli ipv4> remove ipv4.address
nmcli ipv4> remove ipv4.gateway
nmcli ipv4> remove ipv4.dns
nmcli ipv4> save
nmcli ipv4> quit
  • 静态IP
1
2
3
4
5
sudo nmcli connection modify "Wired connection 1" ipv4.addresses 10.211.55.33/24
sudo nmcli connection modify "Wired connection 1" ipv4.gateway 10.211.55.1
sudo nmcli connection modify "Wired connection 1" ipv4.dns "114.114.114.114 8.8.8.8"
sudo nmcli connection modify "Wired connection 1" ipv4.method manual
sudo nmcli connection up "Wired connection 1"
  1. 查看配置信息
1
sudo nmcli connection show "Wired connection 1"

netplan

  1. 执行以下命令编辑netplan配置文件/etc/netplan/01-network-manager-all.yaml
1
sudo vim /etc/netplan/01-network-manager-all.yaml
  1. 修改或添加以下内容,并保存退出

说明
netplan配置文件使用YAML格式,可参考以下说明

1
2
3
4
5
6
7
8
9
10
network:
version: 2
renderer: NetworkManager/ networkd
ethernets:
DEVICE_NAME:
dhcp4: yes/no
addresses: [IP_ADDRESS/NETMASK]
gateway4: GATEWAY
nameservers:
addresses: [NAMESERVER_1, NAMESERVER_2]
变量 说明
DEVICE_NAME 接口的名称
dhcp4 yes或no取决于动态或静态IP寻址
IP_ADDRESS/NETMASK 设备的IP地址(采用前缀表示法),不要使用网络掩码
GATEWAY 指定网关IP地址
NAMESERVER DNS名称服务器的地址,多个之前用,隔开
  • DHCP自动获取
1
2
3
4
5
6
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s5:
dhcp4: yes
  • 静态IP
1
2
3
4
5
6
7
8
9
10
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s5:
dhcp4: no
addresses: [10.211.55.33/24]
gateway4: 10.211.55.1
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
  1. 应用配置
1
sudo netplan apply

服务器版(Server版)

  1. 执行以下命令编辑netplan配置文件/etc/netplan/00-installer-config.yaml
1
sudo vim /etc/netplan/00-installer-config.yaml
  1. 修改或添加以下内容,并保存退出

说明
netplan配置文件使用YAML格式,可参考以下说明

1
2
3
4
5
6
7
8
9
10
network:
version: 2
renderer: NetworkManager/ networkd
ethernets:
DEVICE_NAME:
dhcp4: yes/no
addresses: [IP_ADDRESS/NETMASK]
gateway4: GATEWAY
nameservers:
addresses: [NAMESERVER_1, NAMESERVER_2]
变量 说明
DEVICE_NAME 接口的名称
dhcp4 yes或no取决于动态或静态IP寻址
IP_ADDRESS/NETMASK 设备的IP地址(采用前缀表示法),不要使用网络掩码
GATEWAY 指定网关IP地址
NAMESERVER DNS名称服务器的地址,多个之前用,隔开
  • DHCP自动获取
1
2
3
4
5
6
network:
version: 2
renderer: networkd
ethernets:
enp0s5:
dhcp4: yes
  • 静态IP
1
2
3
4
5
6
7
8
9
10
network:
version: 2
renderer: networkd
ethernets:
enp0s5:
dhcp4: no
addresses: [10.211.55.33/24]
gateway4: 10.211.55.1
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
  1. 应用配置
1
sudo netplan apply

Ubuntu22.04


桌面版(Desktop版)

nmcli

  1. 执行以下命令查询要配置的网卡对应的连接名称(CONNECTTION字段),并确认STATEconnected
1
sudo nmcli dev status
  1. 配置网络
  • DHCP自动获取
1
2
sudo nmcli connection modify "Wired connection 1" ipv4.method auto
sudo nmcli connection up "Wired connection 1"

说明
如果先前配置过静态地址要改成动态获取,需要先按照以下步骤把之前静态地址的配置删除

1
2
3
4
5
6
7
sudo nmcli connection edit "Wired connection 1"
nmcli> goto ipv4
nmcli ipv4> remove ipv4.address
nmcli ipv4> remove ipv4.gateway
nmcli ipv4> remove ipv4.dns
nmcli ipv4> save
nmcli ipv4> quit
  • 静态IP
1
2
3
4
5
sudo nmcli connection modify "Wired connection 1" ipv4.addresses 10.211.55.33/24
sudo nmcli connection modify "Wired connection 1" ipv4.gateway 10.211.55.1
sudo nmcli connection modify "Wired connection 1" ipv4.dns "114.114.114.114 8.8.8.8"
sudo nmcli connection modify "Wired connection 1" ipv4.method manual
sudo nmcli connection up "Wired connection 1"
  1. 查看配置信息
1
sudo nmcli connection show "Wired connection 1"

netplan

  1. 执行以下命令编辑netplan配置文件/etc/netplan/01-network-manager-all.yaml
1
sudo vim /etc/netplan/01-network-manager-all.yaml
  1. 修改或添加以下内容,并保存退出

说明
netplan配置文件使用YAML格式,可参考以下说明

1
2
3
4
5
6
7
8
9
10
11
12
network:
version: 2
renderer: NetworkManager/ networkd
ethernets:
DEVICE_NAME:
dhcp4: yes/no
addresses: [IP_ADDRESS/NETMASK]
routes:
- to: default
via: GATEWAY
nameservers:
addresses: [NAMESERVER_1, NAMESERVER_2]
变量 说明
DEVICE_NAME 接口的名称
dhcp4 yes或no取决于动态或静态IP寻址
IP_ADDRESS/NETMASK 设备的IP地址(采用前缀表示法),不要使用网络掩码
GATEWAY 指定网关IP地址
NAMESERVER DNS名称服务器的地址,多个之前用,隔开
  • DHCP自动获取
1
2
3
4
5
6
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s5:
dhcp4: yes
  • 静态IP
1
2
3
4
5
6
7
8
9
10
11
12
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s5:
dhcp4: no
addresses: [10.211.55.33/24]
routes:
- to: default
via: 10.211.55.1
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
  1. 应用配置
1
sudo netplan apply

服务器版(Server版)

  1. 执行以下命令编辑netplan配置文件/etc/netplan/00-installer-config.yaml
1
sudo vim /etc/netplan/00-installer-config.yaml
  1. 修改或添加以下内容,并保存退出

说明
netplan配置文件使用YAML格式,可参考以下说明

1
2
3
4
5
6
7
8
9
10
11
12
network:
version: 2
renderer: NetworkManager/ networkd
ethernets:
DEVICE_NAME:
dhcp4: yes/no
addresses: [IP_ADDRESS/NETMASK]
routes:
- to: default
via: GATEWAY
nameservers:
addresses: [NAMESERVER_1, NAMESERVER_2]
变量 说明
DEVICE_NAME 接口的名称
dhcp4 yes或no取决于动态或静态IP寻址
IP_ADDRESS/NETMASK 设备的IP地址(采用前缀表示法),不要使用网络掩码
GATEWAY 指定网关IP地址
NAMESERVER DNS名称服务器的地址,多个之前用,隔开
  • DHCP自动获取
1
2
3
4
5
6
network:
version: 2
renderer: networkd
ethernets:
enp0s5:
dhcp4: yes
  • 静态IP
1
2
3
4
5
6
7
8
9
10
11
12
network:
version: 2
renderer: networkd
ethernets:
enp0s5:
dhcp4: no
addresses: [10.211.55.33/24]
routes:
- to: default
via: 10.211.55.1
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
  1. 应用配置
1
sudo netplan apply

Ubuntu24.04


桌面版(Desktop版)

nmcli

  1. 执行以下命令查询要配置的网卡对应的连接名称(CONNECTTION字段),并确认STATEconnected
1
sudo nmcli dev status
  1. 配置网络
  • DHCP自动获取
1
2
sudo nmcli connection modify "netplan-enp0s5" ipv4.method auto
sudo nmcli connection up "netplan-enp0s5"

说明
如果先前配置过静态地址要改成动态获取,需要先按照以下步骤把之前静态地址的配置删除

1
2
3
4
5
6
7
sudo nmcli connection edit "netplan-enp0s5"
nmcli> goto ipv4
nmcli ipv4> remove ipv4.address
nmcli ipv4> remove ipv4.gateway
nmcli ipv4> remove ipv4.dns
nmcli ipv4> save
nmcli ipv4> quit
  • 静态IP
1
2
3
4
5
sudo nmcli connection modify "netplan-enp0s5" ipv4.addresses 10.211.55.33/24
sudo nmcli connection modify "netplan-enp0s5" ipv4.gateway 10.211.55.1
sudo nmcli connection modify "netplan-enp0s5" ipv4.dns "114.114.114.114 8.8.8.8"
sudo nmcli connection modify "netplan-enp0s5" ipv4.method manual
sudo nmcli connection up "netplan-enp0s5"
  1. 查看配置信息
1
sudo nmcli connection show "netplan-enp0s5"

netplan

  1. 执行以下命令编辑netplan配置文件/etc/netplan/01-network-manager-all.yaml
1
sudo vim /etc/netplan/01-network-manager-all.yaml
  1. 修改或添加以下内容,并保存退出

说明
netplan配置文件使用YAML格式,可参考以下说明

1
2
3
4
5
6
7
8
9
10
11
12
network:
version: 2
renderer: NetworkManager/ networkd
ethernets:
DEVICE_NAME:
dhcp4: yes/no
addresses: [IP_ADDRESS/NETMASK]
routes:
- to: default
via: GATEWAY
nameservers:
addresses: [NAMESERVER_1, NAMESERVER_2]
变量 说明
DEVICE_NAME 接口的名称
dhcp4 yes或no取决于动态或静态IP寻址
IP_ADDRESS/NETMASK 设备的IP地址(采用前缀表示法),不要使用网络掩码
GATEWAY 指定网关IP地址
NAMESERVER DNS名称服务器的地址,多个之前用,隔开
  • DHCP自动获取
1
2
3
4
5
6
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s5:
dhcp4: yes
  • 静态IP
1
2
3
4
5
6
7
8
9
10
11
12
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s5:
dhcp4: no
addresses: [10.211.55.33/24]
routes:
- to: default
via: 10.211.55.1
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
  1. 应用配置
1
sudo netplan apply

服务器版(Server版)

  1. 执行以下命令编辑netplan配置文件/etc/netplan/50-cloud-init.yaml
1
sudo vim /etc/netplan/50-cloud-init.yaml
  1. 修改或添加以下内容,并保存退出

说明
netplan配置文件使用YAML格式,可参考以下说明

1
2
3
4
5
6
7
8
9
10
11
12
network:
version: 2
renderer: NetworkManager/ networkd
ethernets:
DEVICE_NAME:
dhcp4: yes/no
addresses: [IP_ADDRESS/NETMASK]
routes:
- to: default
via: GATEWAY
nameservers:
addresses: [NAMESERVER_1, NAMESERVER_2]
变量 说明
DEVICE_NAME 接口的名称
dhcp4 yes或no取决于动态或静态IP寻址
IP_ADDRESS/NETMASK 设备的IP地址(采用前缀表示法),不要使用网络掩码
GATEWAY 指定网关IP地址
NAMESERVER DNS名称服务器的地址,多个之前用,隔开
  • DHCP自动获取
1
2
3
4
5
6
network:
version: 2
renderer: networkd
ethernets:
enp0s5:
dhcp4: yes
  • 静态IP
1
2
3
4
5
6
7
8
9
10
11
12
network:
version: 2
renderer: networkd
ethernets:
enp0s5:
dhcp4: no
addresses: [10.211.55.33/24]
routes:
- to: default
via: 10.211.55.1
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
  1. 应用配置
1
sudo netplan apply