Skip to content

Linux 网络配置

网络配置分临时和持久化两种。临时命令用于抢修、快速验证,重启就丢;持久化配置写进文件,重启不丢,但写法跟发行版有关——RHEL 系用 ifcfg 文件或者 NetworkManager,Ubuntu 用 netplan。两边的配置入口和命令差异不小,搞混了改半天发现不生效是常事。

一、ip 命令查看网络状态

ip 命令是查看和配置网络的主力工具(取代了老的 ifconfig/route)。从三个视角看网络:

bash
ip link            # 链路层:网卡 UP/DOWN 状态、MAC 地址
ip addr            # 网络层:网卡上绑了哪些 IP、掩码多少
ip route           # 路由层:流量走哪个网卡、下一跳是谁

老命令 ifconfig 在一些老脚本和文档里还会出现,但新系统默认不装了(属于 net-tools 包)。要用的话得手动装:

bash
yum install net-tools -y
apt install net-tools -y

新写脚本和排查习惯,推荐统一用 ip 系列命令——ifconfig 在某些场景下信息不全(比如一张网卡绑多个 IP 时显示有问题),ip 才是现代标准。

二、临时网络配置

ip 命令改的是内核当前的网络状态,不会自动写进配置文件,重启网络服务或者重启机器就丢。所以临时配置只适合抢修和验证,正式环境一定要做持久化。

给网卡加 IP:

bash
ip addr add 192.168.1.10/24 dev eth0
ip link set eth0 up

删 IP:

bash
ip addr del 192.168.1.10/24 dev eth0

加默认路由(网关):

bash
ip route add default via 192.168.1.1

加针对特定网段的静态路由:

bash
ip route add 10.10.0.0/16 via 192.168.1.254 dev eth0

这条规则的意思:访问 10.10.0.0/16 这个网段时,包从 eth0 发出,交给下一跳 192.168.1.254这里有个关键点——下一跳必须是本机能直接到达的地址(在同一二层网络内)。填一个远端路由器够不到的 IP,这条路由不会生效。

删路由:

bash
ip route del 10.10.0.0/16

多网卡机器上排查"流量到底走的哪条路",ip route get 比翻完整路由表快得多:

bash
ip route get 10.10.1.20

它会告诉你访问这个目标地址实际走哪条路由、用哪个源 IP。多网卡环境下这个命令特别有用,能立刻看出流量有没有走错网卡。

三、RHEL 系持久化网络配置

RHEL 系有两种持久化方式:传统的 ifcfg 文件,和新式的 NetworkManager(nmcli)。

传统配置文件在 /etc/sysconfig/network-scripts/ 下:

bash
ls /etc/sysconfig/network-scripts/ifcfg-*

ifcfg 文件示例:

ini
TYPE=Ethernet
BOOTPROTO=none               # none/static=静态IP,dhcp=动态获取
NAME=eth0
DEVICE=eth0
ONBOOT=yes                   # 开机自动启用,这行漏了网卡不会起来
IPADDR=192.168.1.10
PREFIX=24                    # 等价于掩码 255.255.255.0
GATEWAY=192.168.1.1
DNS1=223.5.5.5

NetworkManager 是更现代的管理方式,命令行工具是 nmcli。这里要分清两个概念:Device(网卡硬件)和 Connection(一套配置参数)是分开的,一个 device 可以切换不同的 connection

bash
nmcli device status                  # 查看所有网卡的状态
nmcli connection show                # 查看所有连接配置

用 nmcli 改静态地址:

bash
nmcli connection modify eth0 \
    ipv4.method manual \
    ipv4.addresses 192.168.1.10/24 \
    ipv4.gateway 192.168.1.1 \
    ipv4.dns 223.5.5.5
nmcli connection up eth0

远程机器上改网络配置,务必先做好两手准备:开一个 tmux 保持会话(防止 SSH 断了命令也断了)、确认云厂商 VNC 或控制台能登录进去。改错网关或者网卡配置,可能直接把 SSH 连接断了,这时候如果没有别的登录途径,就只能去机房或者控制台救了——这种事故真实发生过无数次。

四、Ubuntu netplan 配置

Ubuntu 17.10 之后默认用 netplan 管理网络,配置文件是 YAML 格式,在 /etc/netplan/ 下:

bash
ls /etc/netplan/

一个典型的 netplan 配置:

yaml
network:
  version: 2
  ethernets:
    ens33:
      dhcp4: false
      addresses:
        - 192.168.1.10/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 223.5.5.5
          - 8.8.8.8

几个字段:version 是配置格式版本(目前是 2)、dhcp4 是否用 DHCP 获取 IP、addresses 静态 IP 列表(可配多个)、routes 路由规则(to: default 就是默认路由)、nameservers DNS 服务器列表。

应用配置有两种方式:

bash
netplan try       # 试应用,超时未确认会自动回滚
netplan apply     # 直接应用

远程改网络一定要用 netplan try 而不是 applynetplan try 应用之后会等你确认,如果你没在规定时间内确认(比如 SSH 断了没法确认),它会自动回滚到之前的配置——这就避免了"配置写错把自己关在外面"的灾难。直接 apply 没有这个保护,配错了网立刻就断。

五、DNS 客户端配置

/etc/resolv.conf 是 DNS 解析器的配置文件。但在现代系统里,这个文件可能不是手动编辑的——NetworkManager、systemd-resolved、netplan 都会自动生成或管理它。你手动改了,可能重启后被覆盖。

bash
cat /etc/resolv.conf
resolvectl status              # systemd-resolved 管理的系统,看实际 DNS 配置

临时指定某个 DNS 服务器测试解析(绕过本地配置):

bash
dig @8.8.8.8 example.com
dig @223.5.5.5 example.com

排查"域名解析异常"时,先确认 /etc/resolv.conf 里实际用的是哪个 DNS,再看是不是被某个网络管理工具覆盖了。

六、路由表详解

bash
ip route

多网卡机器上有个常见问题:比如同时有内网卡和外网卡,两个网卡可能各配了一个默认网关,但同一时间只有一个默认网关生效。业务流量走错了网卡,表现就是"包发出去了,但回包走了另一条路"——单向通,业务还是连不上。

这种情况下要设置不同路由的 metric(优先级,值越低优先级越高):

bash
ip route add default via 192.168.1.1 dev eth0 metric 100
ip route add default via 10.0.0.1 dev eth1 metric 200

这样默认走 metric 100 的 eth0,eth1 作为备用。理解 metric 机制,多网卡的流量调度才能控制得住。

七、bonding 网卡绑定

Bonding 把多块物理网卡聚合成一个逻辑网卡,目的是提供更高带宽或者冗余——某块网卡或者网线坏了,业务不中断。常见两种模式:mode 1(active-backup,主备,一块坏了切另一块)、mode 4(802.3ad/LACP,链路聚合,带宽叠加)。

查看 bonding 状态:

bash
cat /proc/net/bonding/bond0

mode 1(主备)实施最简单,交换机侧不需要特殊配置,所以物理服务器做网卡冗余基本都用 mode 1。mode 4(LACP)要求服务器和交换机两端都开启 LACP 协议,两边配置不一致会出现隐蔽问题——比如偶发丢包、吞吐上不去。排查这种问题特别费劲,因为不是完全不通,是"时好时坏",得从交换机侧一起查。