linux多网卡配置自动化需动态识别网卡、按发行版写入对应配置文件、分步应用避免断连,并支持双网段/主备/策略路由等场景,全程强调安全与可回滚。

Linux 多网卡网络配置可通过 Shell 脚本自动化完成,核心是准确识别网卡、安全修改配置文件、按需启用/禁用接口,并避免重启网络服务导致连接中断。关键不在于写得复杂,而在于稳——尤其在远程操作时,必须保留至少一条可用路径。
识别并确认目标网卡名称
不同发行版网卡命名可能为 eth0、ens33、enp0s3 或 eno1,不能硬编码。建议脚本开头用 ip -br link 或 ls /sys/class/net/ 动态获取,过滤掉 lo、docker0 等非物理接口:
- 用 ip -br link | awk '$1 !~ /^lo|docker|^br/ && $2 == "UP" {print $1; exit}' 获取首个已启用的物理网卡
- 若需多网卡,可用 ip -br link | awk '$2 == "UP" && $1 !~ /^lo|docker|^veth|^br/ {print $1}' 列出全部
- 对虚拟机或云环境,可结合 lspci | grep -i ethernet 辅助验证
区分发行版写入对应配置文件
CentOS/RHEL 使用 /etc/sysconfig/network-scripts/ifcfg-xxx,Ubuntu/Debian 使用 /etc/netplan/*.yaml,混用会失效。脚本应先判断系统类型再生成配置:
- 用 grep -q "ubuntu\|debian" /etc/os-release 或 grep -q "centos\|rhel" /etc/os-release 分支处理
- CentOS 示例:写入 ifcfg-ens33 包含 BOOTPROTO=static、IPADDR=192.168.1.100、NETMASK=255.255.255.0、GATEWAY=192.168.1.1
- Ubuntu 示例:生成 /etc/netplan/01-multi-nic.yaml,用 YAML 格式定义多个 ethernets 条目,注意缩进与冒号后空格
安全应用配置,避免失连
远程执行时,直接 systemctl restart network 或 netplan apply 可能断开 SSH。推荐分步+超时回滚:
- 先用 ip addr add 临时添加 IP(如 ip addr add 192.168.2.10/24 dev ens37),验证连通性
- 再写入持久配置,最后用 ip link set dev ens37 up 启用新接口(若未启用)
- 对 Netplan,运行 netplan try(有 120 秒倒计时,无响应则自动回退)
- 关键步骤前加 sleep 2 && ping -c 2 -W 1 192.168.1.1 &>/dev/null || { echo "网关不可达,终止"; exit 1; }
支持常见多网卡场景
脚本可预设几种典型模式,通过参数调用,例如:./netconf.sh --dual --primary ens33 --secondary ens37 --ip1 192.168.1.10 --ip2 10.0.0.10:
- 双网卡双网段:各自独立子网,不设默认路由,仅用于业务隔离
- 主备模式:主卡配默认网关,备卡仅配 IP 不设 gateway,用 ip route replace default via ... dev ens37 onlink 手动切换
- 策略路由:为某网卡添加独立路由表(如 echo "200 table2" >> /etc/iproute2/rt_tables),配合 ip rule 实现源地址选路
不复杂但容易忽略:每次改完务必检查 ip route show 和 ip rule show,确认路由无冲突;备份原配置(cp /etc/netplan/*.yaml /etc/netplan/backup_$(date +%s).yaml)是必选项。











