背景
我下载了 Debian12 的 iso 镜像(版本:debian-12.7.0-amd64-DVD-1.iso ,无桌面),在 virtualbox7 中安装好后,我发现默认使用的网络配置服务是 networing.service
然后,我阅读了这个官方的文档: www.debian.org/doc/manuals/debian-reference/ch05.zh-cn.html
在 5.3 小结中,文档给出了如何配置静态 IP 的方案,使用的是 systemd-networkd 。
我在 virtualbox 给这个 debian 系统网络设置了桥接模式,然后根据文档配置了静态地址:
sudo vim /etc/systemd/network/static.network
[Match]
Name=en*

[Network]
DHCP=no
Address=192.168.0.201/24
Gateway=192.168.0.1
DNS=192.168.0.1

我的疑问
我把 networking.service 直接关掉了,开启了 systemd-networkd.service ,执行的是以下命令:
# 关闭 networking.service
sudo systemctl disable networking.service
sudo systemctl stop networking.service

# 开启 systemd-networkd.service
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd

第一个问题
平稳运行了一段时间后,我发现重启服务器或者重启路由器,服务器的 ip 又会变成一个不是我指定的地址,我在配置文件指定的是 192.168.0.201 ,但是它会变成 192.168.0.106 之类的,我猜测和 DHCP 有关,请问这是为什么?
第二个问题
在安装了 Debian12 系统的服务器中,我该使用哪一个配置网络,networking.service 还是 systemd-networkd.service ?
我在阿里云上买的云服务装的也是 debian12 ,它默认用的是 systemd-networkd.service 。
而我本地虚拟机安装 debian12 ,默认用的是 networking.service 。

我已经用/etc/rc.local 写 ip a 命令来管理网络了。受不了 netplan,systemd 乱搞

我是编辑 /etc/network/interfaces ,然后用 systemctl restart networking.service 重启网络
配置如下:
auto enp0s3
iface enp0s3 inet static
address 192.168.1.240/24
gateway 192.168.1.1
dns-nameservers 192.168.1.1 180.76.76.76

debian 网络配置是有点蠢,第一次用研究半天

和你是否装了 de 有关

这是我给课题组配 Debian 服务器的时候写的交接文档

无 GUI 界面 Debian 服务器,没有使用 NetworkManager ,通过编辑以下文件实现网络配置

# 网络配置文件
sudo vim /etc/network/interfaces

# 本地回环部分
# The loopback network interface
auto lo
iface lo inet loopback

# 外网访问部分
# 这里例举了 IPv4 固定 IP 地址,IPv6 通过 SLAAC 自动分配 IP 地址
# 可用 ls /sys/class/net 找到接口名称,如 enp5s0
# The primary network interface
auto enp5s0
iface enp5s0 inet static
address X.X.X.X
netmask X.X.X.X
gateway X.X.X.X

iface enp5s0 inet6 auto

# DNS 设置 (在 Linux 系统上,通常最多使用前三个 DNS 服务器)
sudo vim /etc/resolv.conf

nameserver 119.29.29.29
nameserver 223.5.5.5
nameserver 2402:4e00::
nameserver 2400:3200::1

#重启网络服务
sudo systemctl restart networking

其实非常简单 记住一个原则就好了

默认 /etc/network/interfaces 配置,且具有最高优先级。
如果配置了,其他网络管理器程序不能接管网卡。

但这个方式太古老,也不够灵活好用。

所以,安装 NetworkManager 后,需要清空 /etc/network/interface 才能被 NetworkManager 接管。
接管后就可以用 NetworkManager 的管理工具 nmcli nmtui 配置。

安装 DE 默认就会安装 NetworkManager 。

我也用 systemd-networkd

虚拟机可能有干扰了 dhcp ,networking.service 是遗留问题,systemd 以前是利用它来管理的,读取 interface 文件来启动和关闭,networkd 就是 systemd 的网络配套服务。

不过 debian 12 一般配置网络会采用 netplan 来配置网络。配置文件在/etc/netplan 下面

netplan 吧

Debian 12 的网络配置工具是有点混乱, 稍不留神就会冲突.

简单来说, 现在有三种网络配置工具,

  1. networking.service
    在 ifupdown 包中, 包含了 ifupdown 命令和 networking.service, 配置文件为/etc/network/interfaces, 通常会配合上 net-tools 包中的 ifconfig 等命令来配置, 已经不推荐使用了.
  2. systemd-networkd.service
    配置文件在/etc/systemd/network/, 主要用于 headless 的服务器, 虽然也有个前端命令 networkctl, 不过主要还是直接修改文件来配置
  3. NetworkManager
    配置文件在/etc/NetworkManager/system-connections, 一般不直接修改文件, 而是通过 nmcli 和 nmtui 命令以及各个桌面环境的 GUI 程序来配置. 主要用于桌面环境. 缺点是资源占用多.

第二个问题: Debian 12, 默认依然使用第一种网络管理方式. 阿里云上的 Debian 应该是修改过的.
至于第一个问题: 需要查看是否有冲突的服务.

个人使用经验, 我现在不管什么发行版都会统一使用 NetworkManager 来管理, nmtui 很方便, 不用去记忆配置文件语法.

如果你装了 de ,它就假设你在用台式机工作站或笔记本,那么 networkmanager 会接管,如果主机从一个网络环境移动到另一个,nm 会自动处理。。。

nm 好用,实在不行,装个 desktop ,用 gui 设置后关掉 desktop

op 贴出来的文档是没错的,一般云上都是用的云镜像 cloud-init 初始化的系统,云镜像 debian 是用的 netplan 。

一般云上 debian 系的都是 netplan 配置,桌面的大多都是 NetworkManager 来配置(可能是因为 NetworkManager 有 gui 前端吧)

sudo nmcli con mod "Ethernet connection 1" ipv4.method manual ipv4.addr 192.168.1.10/24
sudo nmcli con mod "Ethernet connection 1" ipv4.gateway 192.168.1.1 ipv4.dns 114.114.114.114
sudo nmcli device reapply eth0

用指令 nmtui 会出现一个界面直接修改 ip 地址

/etc/network/interfaces ,古老但好用

#17

是的,/etc/network/interfaces 这种古老的方式相比于 netplan 和 systemd 来说是最通用且最可简单可控的了。

如果 op 想要固定 ip ,其实搭配 vagrant 使用最简单。

手装的系统是 ifupdown ,官方 cloud image 是 netplan