⚠️ 提示:本站 AI 助手使用博主个人 API Token,没事别特么瞎用。
网络 · · 约 41 分钟阅读

Linux IP 地址与网络配置完全指南:iproute2、Netplan、ifcfg、systemd-networkd、DNS、静态路由全方法 + 排障

Linux 配 IP 至少有 6 种方法,每个发行版默认工具还不一样——CentOS 上你改 ifcfg-eth0 到 Ubuntu 24.04 上压根就没这目录;有 NetworkManager 用 nmcli;没桌面的服务器经常跑 systemd-networkd;老工程师还会跟你说「别 ifconfig 了,用 ip addr」。本文把常见发行版、常见配置后端、临时/永久、IPv4/IPv6、DNS 解析、默认网关、多条静态路由、Bond/VLAN 统统对应起来写,每种方法都给完整可复制的文件模板和验证命令,最后一张「发行版→配置方法」对照表、加上 12 条高频坑的排障决策树,看完以后你在任何一台陌生 Linux 上 ssh 进去都能知道「到底该改哪个文件」。

Linux IP 地址与网络配置完全指南

一. 6 种方案一张表:新机器先挑对工具

一句话:先看你的发行版用的是哪套「网络管理后端」,再选对命令/文件,别在 Ubuntu Server 上 nmcli connection show 找不到任何连接就骂娘,人家默认跑的是 systemd-networkd。

方案 / 工具配置落在哪常见发行版临时/永久推荐度
iproute2(ip 命令)内存(重启丢)所有现代 Linux(Busybox 也自带)✅ 临时⭐⭐⭐⭐⭐ 必会基础
NetworkManager(nmcli / nmtui)/etc/NetworkManager/system-connections/*.nmconnectionRHEL/CentOS 桌面、Fedora、Ubuntu Desktop、Rocky/Alma 桌面版永久⭐⭐⭐⭐⭐ 桌面/工作站首选
Netplan/etc/netplan/*.yaml → render 给 NetworkManager 或 networkdUbuntu 18.04 ~ 24.04 全部、Pop!_OS永久⭐⭐⭐⭐ Ubuntu 必用
systemd-networkd/etc/systemd/network/*.networkUbuntu Server、无 NM 的 Debian/RHEL、容器化 OS永久⭐⭐⭐⭐ 纯系统化服务器
ifcfg-*(红帽老派)/etc/sysconfig/network-scripts/ifcfg-<IF> + /etc/sysconfig/network-scripts/route-<IF>RHEL 7/CentOS 7、RHEL 8 兼容、Alma/Rocky 8 兼容永久⭐⭐ 老环境兼容(RHEL9+ 已移到 NM keyfile)
/etc/network/interfaces就这个文件本身Debian 9 以前、Ubuntu 16.04 以前永久⭐ 古董,只在老系统里见

新机器 5 秒定方案的决策流程

# ① 先看 NetworkManager 有没有起来
systemctl is-active NetworkManager
# active → 用 nmcli(或 nmtui)

# ② 再看 systemd-networkd
systemctl is-active systemd-networkd
# active → 用 *.network 文件,或者如果是 Ubuntu 直接看 /etc/netplan/

# ③ Ubuntu 上
ls /etc/netplan/*.yaml   # 有文件 → Netplan 模式,renderer 定后端

# ④ CentOS/RHEL 7 老机器
ls /etc/sysconfig/network-scripts/ifcfg-*  # 有 → 走 ifcfg-*

# ⑤ 啥都没有 → 临时 ip 命令先救命,按生产要求再部署

二. 基础概念扫盲

网卡名(接口名)到底怎么来的

现在主流发行版不再是 eth0/eth1 这种顺序命名,物理网卡用 systemd 可预测网络接口名规则(前缀 en/wl/ww),而虚拟/逻辑接口名由内核或管理员命名:

前缀含义示例
enEthernet 有线网卡(可预测命名)ens33(PCI-E 槽位)、eno1(板载 1 号口)、enp0s3(PCI 总线 0/槽 3)
wlWLAN 无线(可预测命名)wlp2s0
wwWWAN 4G/5G 移动网络(可预测命名)wwp0s20u2i3
bond绑定(逻辑接口,管理员创建)bond0
br网桥(逻辑接口,管理员创建)br0
vlanVLAN 子接口(逻辑接口,两种写法都行)eth0.10、vlan10

先查网卡名,后面所有命令里 <IF> 就是这个:

ip link show
# 1: lo: <LOOPBACK,UP,LOWER_UP> ...
# 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> state UP ...
# 3: enp0s8: <BROADCAST,MULTICAST> state DOWN ...

# 更漂亮:颜色 + 详情(需要装)
nmcli device status

IP / CIDR / 广播 / 网关 的最小必须知道

  • 192.168.1.100/24 → IP 是 192.168.1.100,掩码 255.255.255.0(24 个 1)
  • 网段(网络地址):192.168.1.0
  • 广播:192.168.1.255
  • 默认网关:同一网段里能出公网的路由器 IP,通常是 .1 或 .254

没默认网关 = 局域网可以通,外网 ping 不通。


三. iproute2(ip 命令)—— 临时配置,所有发行版通吃

这是所有人必须会的一套。临时改,重启/重启网络服务就失效,适合临时测试、脚本里批量改网卡、或修复远程 ssh 连不上把网卡搞挂了的紧急救援。

2.1 查信息(最常用的 4 条)

# ① 看所有网卡 + 状态 + MAC
ip link show
# 简写 ip l

# ② 看所有 IP(inet IPv4 / inet6 IPv6)
ip addr show
# 简写 ip a
# 只看某个网卡
ip a show ens33

# ③ 看路由表(最关键——你连不上外网先看这个)
ip route show
# 简写 ip r
# 输出 1:default via 192.168.1.1 dev ens33 proto dhcp src 192.168.1.100 metric 100
#          ↑ 这一行就是默认网关
# 输出 2:192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.100
#          ↑ 直连网段路由(自动由内核生成,scope link 就是"直连,不用下一跳")

# ④ 看邻居(ARP 表,你 ping 过谁)
ip neigh show

2.2 起/停网卡

# 先 DOWN,再 UP,别搞错顺序
ip link set ens33 down
ip link set ens33 up

# 注意:
# - 如果走 NetworkManager/systemd-networkd,这里 ip link 只改当时状态,
#   配置本身还在数据库里,下一次 ifup 还会被管理器覆盖
# - 远程 ssh 连接到某网卡上时,DOWN 那个网卡 = 立刻断网自己下线自己!
#   生产一定要要么写 atd 定时回滚,要么双网卡或有 console

2.3 加/删 IP

# 加 IP(加主 IP/次 IP 都用这个,现代 Linux 不区分主从)
ip addr add 192.168.1.100/24 dev ens33
# IPv6
ip -6 addr add 2001:db8::100/64 dev ens33

# 删 IP
ip addr del 192.168.1.100/24 dev ens33
# 清掉此网卡所有 IP
ip addr flush dev ens33

# 老写法 ifconfig(不推荐,很多发行版已经不带 net-tools 包了)
ifconfig ens33 192.168.1.100 netmask 255.255.255.0 up

2.4 加/删 静态路由 + 默认网关

# 默认网关
ip route add default via 192.168.1.1 dev ens33
# 改默认网关(先删旧的,再加新的,或者 replace 一步)
ip route replace default via 192.168.1.254 dev ens33
ip route del default via 192.168.1.1

# 去特定网段走指定下一跳
ip route add 10.10.0.0/16 via 192.168.1.2 dev ens33
# 去特定网段走"直连"(下一跳就是接口自己,L2 同网段)
ip route add 172.16.8.0/24 dev ens38

# 删静态路由
ip route del 10.10.0.0/16 via 192.168.1.2

# 查某条包会怎么选路出
ip route get 8.8.8.8
# 输出:8.8.8.8 via 192.168.1.1 dev ens33 src 192.168.1.100 uid 1000
#       ↑ 告诉你走哪个网卡、用哪个源 IP,排错神器

2.5 DNS 临时

# 最直给:直接写 /etc/resolv.conf
# 注意:如果你跑了 NetworkManager/systemd-resolved,重启就会被覆盖
echo 'nameserver 223.5.5.5'       > /etc/resolv.conf
echo 'nameserver 119.29.29.29'    >> /etc/resolv.conf
echo 'search example.local'       >> /etc/resolv.conf

⚠️ /etc/resolv.conf 现在基本都是”被别的程序管理”的文件,ls -l /etc/resolv.conf 看一下是不是一个符号链接。如果是,你手动改它,就像在别人的草稿纸上写字,人家一保存你就没了。详见第四节。


四. 六大后端 永久 配置方案

每次改完配置都要:重启网络服务 → 验证 ip a + ip r + ping。

3.1 NetworkManager:nmcli(RHEL/Fedora/Ubuntu Desktop)

nmcli connection show 先看有哪些”连接配置”。概念:连接 connection ≠ 物理网卡 device。 一台物理机一块网卡(dev ens33)可以有多个 connection(家/公司/移动),但同一时刻只能 active 一个。

① 新建一个静态 IP 连接

nmcli connection add \
  type ethernet ifname ens33 con-name 公司-静态 \
  ipv4.method manual \
  ipv4.addresses "192.168.1.100/24" \
  ipv4.gateway "192.168.1.1" \
  ipv4.dns "223.5.5.5,119.29.29.29" \
  ipv4.dns-search "example.local" \
  connection.autoconnect yes

# 让它立即生效
nmcli connection up 公司-静态

② 改已有连接(一般是装系统时默认的”Wired connection 1”)

# 连接名可能带空格,用引号
CON='Wired connection 1'

nmcli connection modify "$CON" \
  ipv4.method manual \
  ipv4.addresses "192.168.1.100/24" \
  +ipv4.addresses "10.0.0.5/24" \
  ipv4.gateway "192.168.1.1" \
  ipv4.dns "223.5.5.5,119.29.29.29" \
  +ipv4.dns "1.1.1.1" \
  ipv4.dns-search "example.local,corp.example"
# 注:+ipv4.addresses / +ipv4.dns 的 + 表示追加(次 IP / 追加 DNS),不写 + 则覆盖原值

# 让它重新加载
nmcli connection up "$CON"

DHCP 改回动态只需要 1 行:

nmcli connection modify "$CON" ipv4.method auto ipv4.addresses "" ipv4.gateway ""
nmcli connection up "$CON"

③ 加静态路由

# +ipv4.routes "网段/掩码 下一跳 可选metric"
nmcli connection modify "$CON" +ipv4.routes "10.10.0.0/16 192.168.1.2 100"
nmcli connection up "$CON"

④ VLAN 子接口

nmcli connection add type vlan ifname ens33.10 dev ens33 id 10 \
  con-name vlan-ens33-10 \
  ipv4.method manual ipv4.addresses "10.0.10.1/24"
nmcli connection up vlan-ens33-10

⑤ Bond 双网卡绑定(比如主备模式)

# 先建 bond(mode=active-backup 主备)
nmcli connection add type bond ifname bond0 con-name bond0 \
  bond.options "mode=active-backup,miimon=100" \
  ipv4.method manual ipv4.addresses "192.168.1.100/24" \
  ipv4.gateway "192.168.1.1" ipv4.dns "223.5.5.5"

# 把 ens33 ens34 加进去当 slave
nmcli connection add type bond-slave ifname ens33 master bond0
nmcli connection add type bond-slave ifname ens34 master bond0

nmcli connection up bond0

⑥ nmtui:图形化 TUI

ssh 进服务器懒得记命令的时候:

nmtui
# 上下箭头选:Edit a connection → Add/Edit → IPv4 CONFIGURATION <Manual>
# 最实用的是「Set system hostname」直接改 hostname 不用记命令

⑦ 验证三板斧

nmcli connection show --active
nmcli device status
nmcli -f GENERAL,IP4 connection show "$CON"

3.2 Netplan(Ubuntu 18.04 ~ 24.04 必用)

Netplan 不是后端,是一个中间翻译层:你写 /etc/netplan/*.yaml,它再 renderer: 给 NetworkManager(桌面)或 systemd-networkd(服务器)。写错空格缩进 = 全挂。YAML 用 2 空格缩进,绝对不能 tab。

① 先找文件 + 看 renderer

ls /etc/netplan/*.yaml
# 常见文件名:00-installer-config.yaml / 01-netcfg.yaml / 50-cloud-init.yaml

cat /etc/netplan/01-netcfg.yaml

② 静态 IP 完整模板(服务器后端 networkd)

# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd     # 桌面版这里是 NetworkManager
  ethernets:
    ens33:
      addresses:
        - 192.168.1.100/24
        - "2001:db8::100/64"   # 双栈 IPv6 加一条就好
      routes:
        - to: default
          via: 192.168.1.1
          metric: 100
      nameservers:
        search: [example.local, corp.example]
        addresses: [223.5.5.5, 119.29.29.29, "2400:3200::1"]

③ Ubuntu Desktop:后端是 NetworkManager(注意大小写!NetworkManager 首字母大写 N 和 M,写错直接失效)

# /etc/netplan/01-network-manager-all.yaml
# ⚠️ 注意 renderer: NetworkManager(两个大写)是 Ubuntu 桌面版唯一正确的写法
# 小写 networkmanager / Networkmanager 都会导致 netplan 忽略这段
network:
  version: 2
  renderer: NetworkManager

之后真正调 IP 用图形界面或 nmcli 就行,Netplan 只负责把控制权交给 NM。桌面版如果你还把下面的 addresses/routes 写满 YAML,系统里两套配置同时存在,Netplan 生成的 NM 连接会和你手动 nmcli connection modify 出来的冲突。桌面版推荐就保留上面这 4 行,然后 nm-connection-editor(图形)或 nmcli(命令行)改网络。

④ DHCP 模板(服务器 networkd 后端,最简单)

network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: true
      dhcp6: true

⑤ VLAN + Bond 双网卡(主备)模板

network:
  version: 2
  renderer: networkd
  bonds:
    bond0:
      interfaces: [ens33, ens34]
      parameters:
        mode: active-backup
        primary: ens33
        mii-monitor-interval: 100
      addresses: [192.168.1.100/24]
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [223.5.5.5]
  vlans:
    bond0.10:
      id: 10
      link: bond0
      addresses: [10.0.10.1/24]

⑥ 网桥 br0(给 KVM/docker/VM 桥接用)

network:
  version: 2
  renderer: networkd
  bridges:
    br0:
      interfaces: [ens33]
      addresses: [192.168.1.100/24]
      routes: [{to: default, via: 192.168.1.1}]
      nameservers:
        addresses: [223.5.5.5, 119.29.29.29]
      parameters:
        stp: false
        forward-delay: 0

⑦ 应用配置(救命参数必须记住!)

# 1) 先检查语法(必跑!语法错直接不给你 apply)
netplan generate

# 2) 真正应用(两种模式,第一次一定要用 try,远程 ssh 不后悔)
netplan try
# 上面这条会:应用 120 秒,期间如果你没回车确认,120 秒后自动回滚
# - ssh 连不上?等 120 秒自己恢复
# - ssh 正常?按回车保存,永久

# 如果你物理机在面前(不怕断开),直接
netplan apply

💡 Netplan 排坑 3 条:① 2 空格不用 tab ② addresses 是数组用 - 1.2.3.4/24 带 CIDR ③ 改完一定要先 generate 再 apply/try。


3.3 systemd-networkd(纯服务器化,Ubuntu Server 默认)

有时候你要在非 Ubuntu 的机器上纯手写这套,或者不装 NM。文件存在 /etc/systemd/network/,后缀 .network,命名约定一般 20-<网卡名>.network(前两位数字决定加载顺序)。

# /etc/systemd/network/20-ens33.network
[Match]
Name=ens33
# 或者按 MAC 绑,防止虚拟机迁移网卡名跳:MACAddress=00:0c:29:xx:xx:xx

[Network]
Address=192.168.1.100/24
Address=2001:db8::100/64
Gateway=192.168.1.1
DNS=223.5.5.5
DNS=119.29.29.29
Domains=example.local corp.example
# IP 转发(如果要当路由器)
# IPForward=yes

[Route]
Destination=10.10.0.0/16
Gateway=192.168.1.2
Metric=100

[DHCPv4]
# 要 DHCP 的话这里 UseRoutes=true ClientIdentifier=mac 就行

DHCP 极简版:

[Match]
Name=ens33
[Network]
DHCP=yes

应用:

systemctl daemon-reload
systemctl restart systemd-networkd
# 验证
networkctl status ens33
networkctl list

3.4 ifcfg-*(RHEL 7 / CentOS 7 老派风格)

文件:/etc/sysconfig/network-scripts/ifcfg-<IF>

# /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static          # static=固定IP,dhcp=动态,none=不用协议
NAME=ens33
DEVICE=ens33
ONBOOT=yes                # 开机是否启用!忘写 yes 开机网卡不起来!
UUID=(装系统带的就保留,不带可以不写)

IPADDR=192.168.1.100
NETMASK=255.255.255.0
PREFIX=24                 # PREFIX 比 NETMASK 更好,二选一写一个就行
GATEWAY=192.168.1.1
DNS1=223.5.5.5
DNS2=119.29.29.29
DOMAIN="example.local corp.example"

# 可选
IPV6INIT=yes
IPV6ADDR=2001:db8::100/64
IPV6_DEFAULTGW=2001:db8::1

静态路由 文件 /etc/sysconfig/network-scripts/route-ens33:

# 每行一条:目标网段 via 下一跳
10.10.0.0/16 via 192.168.1.2
172.16.8.0/24 via 192.168.1.3

DHCP 版只要 5 行:

TYPE=Ethernet
BOOTPROTO=dhcp
NAME=ens33
DEVICE=ens33
ONBOOT=yes

应用:

# CentOS 7
systemctl restart network

# 单接口(更安全)
ifdown ens33 && ifup ens33

3.5 /etc/network/interfaces(Debian 默认 / Ubuntu 16.04 以前)

Debian 系(含 Debian 12)默认仍走 ifupdown + networking.service;Ubuntu 18.04 以后被 Netplan 取代。文件 /etc/network/interfaces:

# 回环
auto lo
iface lo inet loopback

# 静态 IP
auto ens33
iface ens33 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1
    dns-nameservers 223.5.5.5 119.29.29.29
    dns-search example.local corp.example
# 注:dns-nameservers 需 resolvconf/openresolv 包才会写入 /etc/resolv.conf;
#     没装时被静默忽略,需手动写 /etc/resolv.conf 或用 dnsmasq 钩子

# DHCP
auto ens34
iface ens34 inet dhcp

# 静态路由
up   ip route add 10.10.0.0/16 via 192.168.1.2 dev ens33
down ip route del 10.10.0.0/16 via 192.168.1.2 dev ens33

# VLAN 子接口(要先装 vlan 包 + 加载 8021q 模块)
auto ens33.10
iface ens33.10 inet static
    address 10.0.10.1/24
    vlan-raw-device ens33

应用:

systemctl restart networking
# 或者
ifdown ens33 && ifup ens33

五. DNS 解析配置(三大模式全解)

先看你现在是哪种管理方式:

ls -l /etc/resolv.conf
# 可能的 4 种情况:
# ① lrwxrwxrwx -> /run/NetworkManager/resolv.conf  → 归 NM 管
# ② lrwxrwxrwx -> /run/systemd/resolve/stub-resolv.conf → 归 systemd-resolved 管(最常见)
# ③ lrwxrwxrwx -> /run/systemd/resolve/resolv.conf → 同上(直连模式)
# ④ 普通文件,root:root 644 → 你自己能直接写,或云厂商 cloud-init 管

4.1 NetworkManager 管 DNS → 用 nmcli 改(前面 3.1 已写)

改完自动写到 NM 的配置里,/etc/resolv.conf 由 symlink 同步。

4.2 systemd-resolved 管 DNS → 改 /etc/systemd/resolved.conf 全局 + 按网卡分

# /etc/systemd/resolved.conf
[Resolve]
DNS=223.5.5.5 119.29.29.29
FallbackDNS=1.1.1.1 8.8.8.8 2400:3200::1
Domains=example.local
# 开启 LLMNR + mDNS(局域网 .local 主机名解析)
LLMNR=yes
MulticastDNS=yes
DNSStubListener=yes
DNSSEC=no
systemctl restart systemd-resolved
# 验证
resolvectl status
resolvectl query baidu.com
# 强制刷新缓存
resolvectl flush-caches

4.3 都不管,直接手工写 /etc/resolv.conf

# 先把 symlink 去掉(如果是软链),不然还会被覆盖
unlink /etc/resolv.conf
# 然后手写永久
cat > /etc/resolv.conf << 'EOF'
# 解析器
nameserver 223.5.5.5
nameserver 119.29.29.29
nameserver 1.1.1.1

# 主机名补全(ping db → 会先试 db.example.local)
search example.local corp.example

# 最多并发发 2 个解析请求,超时 3s,轮询 2 次
options timeout:2 attempts:2 rotate
EOF

chmod 644 /etc/resolv.conf
chattr +i /etc/resolv.conf   # !防被别的服务偷偷覆盖(可选)
# 想改回再 chattr -i

4.4 hosts 文件 / hostname

# 临时加一条映射
echo "10.0.0.254 ceph-osd1 ceph-osd1.example.local" >> /etc/hosts

# 临时改 hostname
hostname prod-web-01
# 永久改 hostname(所有 systemd 版本通用)
hostnamectl set-hostname prod-web-01
# 注:systemd ≥249 也可用属性式写法 hostnamectl hostname prod-web-01
# 或 Debian 系 /etc/hostname 单独一行
# 或 RHEL 系 /etc/sysconfig/network 里 HOSTNAME=xxx(老)

六. 验证 + 排障

5.1 每次改完都跑这 7 步

# ① 网卡起来没,状态是不是 UNKNOWN 还是 UP
ip link show ens33 | head -1
# 正常应该带 <BROADCAST,MULTICAST,UP,LOWER_UP> 以及 state UP

# ② IP 上对了吗?scope global 的那个就是外网能通你的那个
ip -4 -br addr show ens33
# ens33    UP     192.168.1.100/24

# ③ 默认网关在不在?
ip route | grep default
# 没有 default 行 → 内网通、外网全不通,直接回去重写网关

# ④ DNS 能不能解析?
getent hosts baidu.com        # 最标准(走 nsswitch 的 hosts 顺序)
nslookup baidu.com            # 强制走 DNS(不读 /etc/hosts)
dig baidu.com +short          # 更详细

# ⑤ 通不通网关?
ping -c 3 192.168.1.1
# 网关都 ping 不通 → 网线/WiFi/VMware 网卡模式/VLAN 先物理排查

# ⑥ 通不通外网 IP
ping -c 3 8.8.8.8
# ping 8.8.8.8 通但 ping baidu.com 不通 → 100% DNS 问题

# ⑦ 路由选路正确性
ip route get 1.1.1.1

5.2 12 个高频坑排障决策树

现象先查什么典型根因
网线插上但 state DOWNip link show + dmesg | grep eth|ens + 换线物理链路/模块不支持/光模块单通/VM 没 Attach NIC
ip a 有 IP 但 ping 不通网关ip r 看直连路由 + ip neigh 看 ARP + 同网段另一台 ping 你子网掩码写错(比如 /32)、VLAN tag 错、交换机端口 PVID 错
网关通但 ping 8.8.8.8 不通ip route get 8.8.8.8 + traceroute -n 8.8.8.8默认网关没写 / 防火墙 FORWARD 把你丢了 / 没 SNAT
ping 8.8.8.8 通 ping baidu.com 不通cat /etc/resolv.conf + dig + nslookupDNS 没写对 / UDP 53 被防火墙拦 / systemd-resolved stub listener 挂了
重启后 IP 又变 DHCP 的了grep ONBOOT /etc/sysconfig/network-scripts/* 或 Netplan renderer / NM autoconnect配置文件落了但没写入对应后端(比如你改了 ifcfg- 实际机器跑的是 NM)
改完 nmcli/networkctl 感觉”没生效”ip a 再对比配置里写的你改的那个 connection 没 connection up / .network 文件没 restart systemd-networkd
ssh 远程改完 IP 自己掉了远程机房带外 IPMI/console / VMware 控制台远程改 IP 必用:netplan try 或 nmcli device checkpoint 300(300 秒后自动回滚,确认正常后 nmcli device checkpoint --timeout 0 取消回滚)或 at 命令定时 nmcli con up 旧连接
hostname 改了不生效再 hostnamectl set-hostname xxx 或重新登陆 bash老 shell 缓存了 hostname;/etc/hosts 里还要写 127.0.1.1
/etc/resolv.conf 手动改完下次又变ls -l /etc/resolv.conf 看它被谁 symlink 的有 manager 管着,你应该去改 NM / systemd-resolved / resolvconf 的配置
同网段两台机器互 ping 丢包 50%ip a 看两台机器是不是 IP 一样 + arping -D -I ens33 192.168.1.100IP 冲突(最常见);其次 Bond 配置错主备反复跳
Bond 主备模式下 standby 网卡插了也不能提高带宽cat /proc/net/bonding/bond0 看 modeactive-backup 只有一张发流量,要高带宽得 mode=4 LACP(802.3ad)配合交换机
多网卡多默认网关 ip r 看到两个 defaultip rule show / sysctl net.ipv4.conf.all.rp_filterrp_filter=strict 导致从网卡 A 进来的包从网卡 B 出去被内核丢掉 → 策略路由或把 rp_filter 改 2

七. 发行版 × 配置方法速查 + 常用命令表

6.1 发行版对照表

发行版默认网络后端永久配置入口应用命令
Ubuntu 24.04 Serversystemd-networkd + Netplan/etc/netplan/*.yamlnetplan generate && netplan try
Ubuntu 24.04 DesktopNetworkManager + Netplan/etc/netplan/*.yaml renderer NetworkManagernetplan try
Debian 12ifupdown(默认)/ NM(桌面可选)/etc/network/interfaces 或 NMsystemctl restart networking / nmcli connection up
RHEL 9 / Rocky 9 / Alma 9NetworkManager keyfilenmcli / /etc/NetworkManager/system-connections/*.nmconnectionnmcli connection up
RHEL 8 / Rocky 8NM(默认)+ ifcfg 兼容两者都行nmcli connection up / nmcli c reload
CentOS 7ifcfg-* + NM(可选)/etc/sysconfig/network-scripts/ifcfg-*systemctl restart network
Alpine / 精简 Busybox无守护/etc/network/interfaces 或 setup-interfaces/etc/init.d/networking restart

6.2 常用命令对照

需求iproute2(通吃临时)nmclisystemd-networkd / networkctl
看 IPip -br anmcli -f IP4.ADDRESS con show Xnetworkctl status ens33
看路由ip rnmcli -f IP4.GATEWAY,IP4.ROUTES con show Xnetworkctl status
看 DNScat /etc/resolv.confnmcli -f IP4.DNS con show Xresolvectl status
起ip link set up ens33nmcli con up Xnetworkctl up ens33
停ip link set down ens33nmcli con down Xnetworkctl down ens33
DHCP 重新获取dhclient -v ens33nmcli con up X 自动 renewnetworkctl renew ens33(systemd ≥256;旧版用 networkctl reconfigure ens33)

6.3 「第一次 ssh 上陌生 Linux」60 秒掌握网络全貌

把下面这条 alias 加到你的 ~/.bashrc,到哪都能跑:

alias netinfo='echo "== OS =="; . /etc/os-release; echo $PRETTY_NAME; echo "== Kernel / Hostname =="; uname -r; hostnamectl 2>/dev/null | head -1 || hostname; echo "== 网卡 =="; ip -br link show; echo "== IP =="; ip -br addr show scope global; echo "== IPv6 =="; ip -6 -br addr show scope global; echo "== 路由 =="; ip route | head -5; echo "== 默认网关 =="; ip route | grep default; echo "== DNS =="; ls -l /etc/resolv.conf; cat /etc/resolv.conf | head -6; echo "== 后端服务 =="; for s in NetworkManager systemd-networkd systemd-resolved networking; do echo -n "$s: "; systemctl is-active $s 2>/dev/null; done; echo "== Netplan? =="; ls /etc/netplan/*.yaml 2>/dev/null || echo "无";'

八. 最佳实践总结

  1. 远程改 IP 永远用「定时回滚」技巧:netplan try 首选;NM 环境用 nmcli device checkpoint 300(300 秒未确认自动回滚);都没有就 echo "systemctl restart NetworkManager" | at now + 5 minutes 先挂上再改。
  2. 一套后端到底:一台机器别让 NetworkManager 和 systemd-networkd 和 ifcfg 都同时跑,会互相抢。
  3. DNS 走 manager,不手写 /etc/resolv.conf:除非你 chattr +i 或者真的确认没有 manager。
  4. 多网卡多网段一定画拓扑:画清楚默认网关走哪个网卡、其余网段走哪条静态路由,然后 ip route get <目标> 验证结果。
  5. Bond / VLAN 配完第一件事:cat /proc/net/bonding/bond0 + ip -d link show bond0.10,别靠 ifconfig。
  6. DHCP 环境要固定 IP:在 DHCP 服务器上按 MAC 绑静态租约(Static Reservation),比在客户机上改手动更统一维护。
  7. 排障顺序:物理链路 → IP/掩码 → 网关 → DNS,一步不通就别往下查了。
问问 AI