1. 问题场景与需求分析
在移动办公或临时网络环境中,我们经常需要在固定IP和DHCP自动获取IP两种网络配置间切换。比如:
- 在办公室连接有线网络时需要使用固定IP接入内网
- 外出时需要通过手机热点(DHCP)上网
- 实验室环境中需要在不同网络环境间快速切换
传统解决方案需要手动修改网络配置文件,既繁琐又容易出错。本文将介绍三种实用方案实现一键切换:
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 方案一:使用netplan配置多配置文件
2.1 创建不同网络配置文件
bash复制sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak
sudo touch /etc/netplan/01-dhcp.yaml /etc/netplan/02-static.yaml
2.2 配置DHCP模式文件
yaml复制# /etc/netplan/01-dhcp.yaml
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: true
dhcp6: false
2.3 配置静态IP模式文件
yaml复制# /etc/netplan/02-static.yaml
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: false
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
2.4 实现切换脚本
创建切换脚本/usr/local/bin/net-switch:
bash复制#!/bin/bash
if [ "$1" == "dhcp" ]; then
sudo rm /etc/netplan/00-installer-config.yaml
sudo ln -s /etc/netplan/01-dhcp.yaml /etc/netplan/00-installer-config.yaml
elif [ "$1" == "static" ]; then
sudo rm /etc/netplan/00-installer-config.yaml
sudo ln -s /etc/netplan/02-static.yaml /etc/netplan/00-installer-config.yaml
else
echo "Usage: net-switch [dhcp|static]"
exit 1
fi
sudo netplan apply
3. 方案二:使用NetworkManager命令行工具
3.1 查看当前连接
bash复制nmcli connection show
3.2 创建静态IP连接配置
bash复制nmcli connection add con-name "static-eth" ifname ens33 type ethernet \
ip4 192.168.1.100/24 gw4 192.168.1.1 \
ipv4.dns "8.8.8.8 114.114.114.114" \
ipv4.method manual
3.3 创建DHCP连接配置
bash复制nmcli connection add con-name "dhcp-eth" ifname ens33 type ethernet \
ipv4.method auto
3.4 实现切换脚本
创建/usr/local/bin/nm-switch:
bash复制#!/bin/bash
if [ "$1" == "dhcp" ]; then
nmcli connection up dhcp-eth
elif [ "$1" == "static" ]; then
nmcli connection up static-eth
else
echo "Usage: nm-switch [dhcp|static]"
exit 1
fi
4. 方案三:使用ifmetric设置优先级
4.1 安装ifmetric工具
bash复制sudo apt install ifmetric
4.2 配置接口metric值
bash复制# 设置DHCP连接metric值较低(优先级高)
nmcli connection modify dhcp-eth ipv4.route-metric 100
# 设置静态连接metric值较高(优先级低)
nmcli connection modify static-eth ipv4.route-metric 200
4.3 自动切换逻辑
当两个连接都处于活动状态时,系统会自动选择metric值较低的连接。
5. 进阶技巧与注意事项
5.1 网络连接状态检测
可以添加网络检测逻辑,自动选择合适的连接方式:
bash复制#!/bin/bash
# 检测是否连接到手机热点
if iwconfig | grep -q "Mode:Managed"; then
nmcli connection up dhcp-eth
else
nmcli connection up static-eth
fi
5.2 开机自动切换
创建systemd服务实现开机自动切换:
ini复制# /etc/systemd/system/auto-net-switch.service
[Unit]
Description=Auto Network Switcher
After=network.target
[Service]
ExecStart=/usr/local/bin/auto-net-switch
Type=oneshot
[Install]
WantedBy=multi-user.target
5.3 常见问题排查
- 连接失败:检查物理连接和接口名称
- DNS解析问题:确认nameserver配置正确
- 权限问题:确保脚本有执行权限
- 配置冲突:避免同时激活多个连接配置
6. 方案对比与选择建议
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| netplan多配置 | 系统原生支持,稳定性高 | 需要手动切换 | 需要明确控制切换的场景 |
| NetworkManager | 功能丰富,支持更多网络类型 | 配置稍复杂 | 需要灵活配置的移动设备 |
| ifmetric | 自动切换,无需人工干预 | 需要额外工具 | 需要智能切换的环境 |
对于大多数用户,推荐使用NetworkManager方案,它提供了最灵活的控制方式。如果需要更自动化的解决方案,可以考虑结合ifmetric实现智能切换。
