Ubuntu 的网络配置方式在较新的版本(特别是 18.04 LTS 及以后)中发生了重大变化,传统的 interfaces 文件虽然仍然可用,但官方推荐使用 Netplan。

我们将从两个方面来讲解:
- 推荐方式:Netplan (Ubuntu 18.04, 20.04, 22.04 等)
- 传统方式:/etc/network/interfaces (适用于旧版 Ubuntu)
推荐方式:Netplan (Ubuntu 18.04 及以后版本)
Netplan 是一个命令行网络配置工具,它使用 YAML 文件来定义网络接口,这些 YAML 文件会由后端渲染成传统的配置文件(NetworkManager 或 systemd-networkd 的配置)。
配置文件位置
Netplan 的配置文件通常位于 /etc/netplan/ 目录下,文件名可以是任意形式,但常见的有 01-netcfg.yaml, 50-cloud-init.yaml 等。
在云环境中(如 AWS, Azure),云初始化(cloud-init)会自动生成一个配置文件,/etc/netplan/50-cloud-init.yaml,对于本地虚拟机或物理机,你可能需要手动创建或编辑这个文件。

配置文件示例与解析
让我们来看一个典型的配置文件 /etc/netplan/01-netcfg.yaml:
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
renderer: networkd # 后端渲染器,可以是 networkd 或 NetworkManager
ethernets:
# "enp0s3" 是你的网卡名称,使用 `ip a` 命令可以查看到
enp0s3:
dhcp4: true # 启用 IPv4 的 DHCP
# dhcp4: no # 如果不使用 DHCP,则手动配置 IP
# addresses: [192.168.1.100/24] # 静态 IP 地址和子网掩码
# gateway4: 192.168.1.1 # 网关地址
# nameservers:
# addresses: [8.8.8.8, 1.1.1.1] # DNS 服务器
# search: [mydomain.local] # DNS 搜索域
# 可以配置多个网卡
enp0s8:
dhcp4: false
addresses: [10.0.0.50/24]
gateway4: 10.0.0.1
nameservers:
addresses: [8.8.8.8]
# 配置无线网络
wifis:
wlp3s0:
access-points:
"MyWiFiNetwork":
password: "MyWiFiPassword"
dhcp4: true
关键配置项解析
version: 2: 指定 Netplan 的版本,目前必须是 2。renderer: networkd或renderer: NetworkManager:networkd: 这是 Ubuntu Server 的默认后端,由systemd管理。NetworkManager: 这是 Ubuntu Desktop 的默认后端,图形界面和nmcli命令行工具都依赖它。
ethernets:: 定义有线网络接口。wifis:: 定义无线网络接口。enp0s3: 网卡名称。如何找到你的网卡名?- 使用
ip a或ifconfig命令查看,在现代 Linux 系统中,网卡名通常遵循enp<bus>s<slot>(如enp0s3) 或eth<id>(如eth0) 的命名规则。
- 使用
dhcp4: true/false: 是否启用 IPv4 的 DHCP。dhcp6: true/false: 是否启用 IPv6 的 DHCP。addresses: [IP/MASK]: 配置静态 IP 地址。168.1.100/24表示 IP 是168.1.100,子网掩码是255.255.0。gateway4: IP: 设置 IPv4 网关。nameservers: 设置 DNS 服务器。addresses: DNS 服务器 IP 列表。search: DNS 搜索域。
wifis下的access-points: 定义要连接的 Wi-Fi 名称和密码。
应用配置
编辑完 Netplan 配置文件后,需要应用它才能生效。
-
检查配置文件语法(非常重要,可以避免配置错误导致网络断开):
sudo netplan try
这个命令会先验证语法,然后尝试应用新配置,60 秒内没有按
Ctrl+C,它会永久应用配置,如果出错,它会回滚到之前的配置。
(图片来源网络,侵删) -
应用配置:
sudo netplan apply
传统方式:/etc/network/interfaces (适用于旧版 Ubuntu)
在 Ubuntu 16.04 及更早的版本中,网络配置主要通过 /etc/network/interfaces 文件完成,虽然在新版中不推荐,但如果你在使用旧系统或某些特殊场景,它仍然有效。
配置文件位置
/etc/network/interfaces: 主配置文件。/etc/network/interfaces.d/: 可以将不同接口的配置拆分到这个目录下的独立文件中。
配置文件示例与解析
# /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
# auto eth0 # 系统启动时自动启用此接口
# iface eth0 inet dhcp # 使用 DHCP 获取 IP
# 手动配置静态 IP
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
# dns-nameservers 8.8.8.8 1.1.1.1
# 配置第二个接口
auto eth1
iface eth1 inet manual
up ifconfig eth1 up
down ifconfig eth1 down
关键配置项解析
auto <interface_name>: 在系统启动时自动激活(启动)指定的接口。iface <interface_name> inet <method>: 定义接口的配置。<interface_name>: 网卡名,如eth0。<method>: 配置方法,常见有:loopback: 用于回环接口lo。dhcp: 通过 DHCP 自动获取 IP。static: 手动配置静态 IP。manual: 手动配置,通常用于桥接或 VLAN,up和down命令会在此接口激活/关闭时执行。
address: 静态 IP 地址。netmask: 子网掩码。gateway: 默认网关。dns-nameservers: 指定 DNS 服务器,注意,这个指令在interfaces文件中有时需要配合resolvconf服务才能完全生效。
应用配置
编辑 /etc/network/interfaces 文件后,需要重启网络服务或重启系统来应用更改。
- 重启网络服务:
sudo systemctl restart networking # 或者使用旧的命令 sudo /etc/init.d/networking restart
- 重启系统:
sudo reboot
其他重要的网络配置文件和工具
除了上述主要配置文件,还有一些其他文件和工具也用于网络管理。
/etc/hosts
这是一个静态的域名解析文件,当系统需要解析一个域名时,它会首先查询这个文件。
# /etc/hosts 127.0.0.1 localhost 127.0.1.1 myubuntu-server 192.168.1.100 fileserver.localdomain fileserver # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
/etc/resolv.conf
这个文件包含了 DNS 服务器的信息。注意:在 Netplan + systemd-resolved 或 NetworkManager 的环境中,这个文件通常是动态管理的(它可能是一个指向 /run/systemd/resolve/stub-resolv.conf 的符号链接),不建议直接手动编辑。
# /etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4 search mydomain.local
/etc/hostname
定义了系统的主机名,修改后需要重启或使用 hostnamectl 命令来使更改立即生效。
# /etc/hostname myubuntu-server
命令行工具
ip a/ip link: 查看所有网络接口及其状态。ip addr add <ip>/24 dev <interface>: 临时为接口添加一个 IP 地址。ip route show: 查看路由表。nmcli: NetworkManager 的命令行工具,在 Ubuntu Desktop 上非常强大,可以管理连接、配置 Wi-Fi 等。netplan --debug try: 在netplan try的基础上提供更详细的调试信息。
| 特性 | Netplan (新版) | /etc/network/interfaces (旧版) |
|---|---|---|
| 适用版本 | Ubuntu 18.04 LTS 及以后 | Ubuntu 16.04 及以前 |
| 配置文件 | /etc/netplan/*.yaml |
/etc/network/interfaces |
| 配置语言 | YAML | 简单的文本指令 |
| 后端 | systemd-networkd 或 NetworkManager |
ifupdown |
| 管理方式 | 集中化、声明式 | 命令式 |
| 优点 | 现代、灵活、支持多种后端、易于自动化 | 简单直接、在旧系统上稳定 |
| 缺点 | 学习曲线稍陡(YAML语法) | 功能相对有限,不适合复杂网络 |
对于新安装的 Ubuntu 系统,强烈建议学习和使用 Netplan,它代表了网络配置的未来方向,更加强大和灵活。
