#!/bin/bash
自动配置所有物理网卡由 systemd-networkd 管理
支持 DHCP 或静态 IP
set -e
echo "=== systemd-networkd 网卡配置脚本 ==="
确保目录存在
sudo mkdir -p /etc/systemd/network
获取所有物理网卡(排除 lo, docker, veth, br-)
interfaces=$(ip -o link show | awk -F': ' '{print $2}' | grep -Ev '^(lo|docker|veth|br-)')
if [ -z "$interfaces" ]; then
echo "没有检测到物理网卡"
exit 1
fi
echo "检测到网卡: $interfaces"
for iface in $interfaces; do
echo
echo "配置网卡: $iface"
# 提示用户选择 DHCP 或静态
read -p "是否使用 DHCP 自动获取 IP?(y/n) " use_dhcp
if [[ "$use_dhcp" =~ ^[Yy]$ ]]; then
cat <<EOF | sudo tee /etc/systemd/network/10-$iface.network
[Match]
Name=$iface
[Network]
DHCP=yes
EOF
echo "已配置 $iface 为 DHCP"
else
read -p "请输入静态 IP 地址(例如 192.168.1.100/24): " ip_addr
read -p "请输入网关(例如 192.168.1.1): " gw
read -p "请输入 DNS 服务器(例如 8.8.8.8): " dns
cat <<EOF | sudo tee /etc/systemd/network/10-$iface.network
[Match]
Name=$iface
[Network]
Address=$ip_addr
Gateway=$gw
DNS=$dns
EOF
echo "已配置 $iface 为静态 IP"
fi
done
停用 dhclient
echo
echo "停止并禁用 dhclient"
sudo systemctl stop dhclient@.service 2>/dev/null || true
sudo systemctl disable dhclient@.service 2>/dev/null || true
启用并重启 systemd-networkd
echo "启用并启动 systemd-networkd"
sudo systemctl enable systemd-networkd
sudo systemctl restart systemd-networkd
echo
echo "=== 配置完成 ==="
echo "使用 'networkctl' 或 'ip addr' 查看网卡状态"