Debian 命令行修改IP、网关、DNS

Debian 从 10 (Buster) 起默认使用 ifupdown 管理网络,但很多场景下也会用到 NetworkManager 或 systemd-networkd。下面按不同方式分别说明。 一、临时修改(重启失效,调试用)

Debian 从 10 (Buster) 起默认使用 ifupdown 管理网络,但很多场景下也会用到 NetworkManager 或 systemd-networkd。下面按不同方式分别说明。


一、临时修改(重启失效,调试用)

bash

# 关闭/启用接口
sudo ip link set enp3s0 down
sudo ip link set enp3s0 up

# 设置 IP 和掩码(例如 192.168.1.100/24)
sudo ip addr add 192.168.1.100/24 dev enp3s0

# 设置默认网关
sudo ip route add default via 192.168.1.1 dev enp3s0

# 设置 DNS(直接写文件)
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

删除旧地址:sudo ip addr del 192.168.1.x/24 dev enp3s0


二、永久修改(推荐)

方案 A:传统 ifupdown(Debian 默认,适用于 Debian 11/12)

编辑 /etc/network/interfaces(或拆分的 /etc/network/interfaces.d/enp3s0):

静态 IP:

bash

sudo nano /etc/network/interfaces

text

auto lo
iface lo inet loopback

auto enp3s0
iface enp3s0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8 114.114.114.114

DHCP:

text

auto enp3s0
iface enp3s0 inet dhcp

注意:dns-nameservers 需要安装 resolvconf 包才会自动写入 /etc/resolv.conf:

bash

sudo apt install resolvconf

应用:

bash

sudo ifdown enp3s0 && sudo ifup enp3s0
# 或整体重启
sudo systemctl restart networking

方案 B:NetworkManager(桌面环境或安装了 nmcli)

bash

# 查看连接名
nmcli connection show

# 修改为静态
sudo nmcli connection modify "Wired connection 1" \
    ipv4.method manual \
    ipv4.addresses 192.168.1.100/24 \
    ipv4.gateway 192.168.1.1 \
    ipv4.dns "8.8.8.8 114.114.114.114"

# 改回 DHCP
sudo nmcli connection modify "Wired connection 1" ipv4.method auto

# 应用
sudo nmcli connection up "Wired connection 1"

方案 C:systemd-networkd(精简系统 / 服务器常用)

创建 /etc/systemd/network/20-enp3s0.network:

ini

[Match]
Name=enp3s0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=114.114.114.114

启用并重启:

bash

sudo systemctl enable --now systemd-networkd
sudo systemctl restart systemd-networkd

DNS 需要让 systemd-resolved 生效:

bash

sudo systemctl enable --now systemd-resolved
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

三、DNS 单独修改

  • 若使用 resolvconf:改 /etc/network/interfaces 里的 dns-nameservers,或 /etc/resolvconf/resolv.conf.d/head

  • 若使用 NetworkManager:nmcli 里的 ipv4.dns

  • 若用 systemd-resolved:/etc/systemd/resolved.conf 里的 DNS=

  • 直接改 /etc/resolv.conf(易被覆盖):

bash

sudo nano /etc/resolv.conf

text

nameserver 8.8.8.8
nameserver 114.114.114.114

如果该文件被 NetworkManager / resolvconf / systemd-resolved 管理,chattr +i /etc/resolv.conf 可以锁定,但不推荐(会破坏自动管理)。


四、判断当前用的是哪套管理工具

bash

# 看接口详情
ip -br a
ip route

# 看是 NetworkManager 还是 networking
systemctl status NetworkManager
systemctl status networking
systemctl status systemd-networkd
  • networking.service 活跃 → 用方案 A

  • NetworkManager.service 活跃 → 用方案 B

  • systemd-networkd.service 活跃 → 用方案 C


五、常见坑

  1. 改完不生效:确认对应服务在跑,并 ifdown/ifup 或重启服务。

  2. DNS 被覆盖:多套工具同时管同一网卡会互相打架,只保留一套。

  3. 网关写错:gateway 必须在接口的子网内。

  4. 删除旧地址:静态切换时,旧 DHCP 地址可能还在,ip addr flush dev enp3s0 清一下。

  5. 远程 SSH 改网卡:最好用 tmux/screen 挂起,或准备带外访问(IPMI/iDRAC),避免断网失联。


一句话总结:Debian 12 默认用 /etc/network/interfaces + ifup/ifdown;有 NetworkManager 就用 nmcli;精简系统用 systemd-networkd。 先确认在跑哪个服务,再按对应方式改即可。

评论