nmcli 多网卡 多ip创建虚拟网卡 macvlan 比ip link add好用

三个网卡

一个网卡由于管理,自动获取ip

另外2个为业务ip 

地址为:192.168.1.5/24 

                192.168.1.6/24

网关都为192.168.1.1

解决了ip link add 添加的虚拟网卡 重启系统ip不能保存问题。

解决了ip link add 添加的虚拟网卡 设置了ip ,插拔网线ip不能保存问题。

#!/bin/bash
echo "以下是所有可用的网卡及其IP和MAC地址:"

for interface in $(ip -o -4 addr show | awk -F ' |/' '{print $2}' | uniq); do
  ip_address=$(ip -o -4 addr show $interface | awk -F ' |/' '{print $7}')
  mac_address=$(ip link show $interface | awk '/ether/ {print $2}')
  echo "网卡名称: $interface, IP地址: $ip_address, MAC地址: $mac_address"
done
function valid_ip() {
    local ip=$1
    local valid_regex="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
    if [[ $ip =~ $valid_regex ]]; then
        return 0
    else
        return 1
    fi
}

function valid_subnet_mask() {
    local mask=$1
    if [[ $mask -ge 0 && $mask -le 32 ]]; then
        return 0
    else
        return 1
    fi
}

echo "以下是可用的网卡:"
ip -o -4 addr show | awk -F ' |/' '{print $2}' | uniq
echo -n "请输入要绑定的网卡名称(例如:enp0s8):"
read interface

echo -n "请输入新虚拟网卡的名称(例如:ppp001):"
read vnic_name

while true; do
    echo -n "请输入新虚拟网卡的IP地址(例如:192.168.250.5):"
    read ip_address
    if valid_ip $ip_address; then
        break
    else
        echo "输入的IP地址不合法,请重新输入。"
    fi
done

while true; do
    echo -n "请输入子网掩码(例如:24):"
    read subnet_mask
    if valid_subnet_mask $subnet_mask; then
        break
    else
        echo "输入的子网掩码不合法,请重新输入。"
    fi
done

while true; do
    echo -n "请输入网关地址(例如:192.168.250.1):"
    read gateway
    if valid_ip $gateway; then
        break
    else
        echo "输入的网关地址不合法,请重新输入。"
    fi
done

echo "创建虚拟网卡..."


# 使用 nmcli 创建虚拟网卡
sudo nmcli connection add type macvlan con-name $vnic_name  ifname $vnic_name dev "$interface" mode bridge
echo "分配IP地址和子网掩码..."
sudo nmcli connection modify $vnic_name ipv4.addresses "${ip_address}/${subnet_mask}"
echo "设置网关..."
sudo nmcli connection modify $vnic_name ipv4.gateway "$gateway"
sudo nmcli connection modify $vnic_name ipv4.method "manual"

echo "设置虚拟网卡启动.."
sudo nmcli connection up $vnic_name 
sudo nmcli connection modify $vnic_name connection.autoconnect yes


echo "以下是新创建的虚拟网卡信息:"
ip addr show $vnic_name

echo "虚拟网卡创建并设置成功!"

echo "虚拟网卡创建并设置成功!开始重启网卡"
systemctl restart network

 感谢ChatGPT ,一起完成的脚本制作。

机器人wx FzAIRobot

猜你喜欢

转载自blog.csdn.net/jxyk2007/article/details/130267972