一、前言
针对需要在系统中(只有一个物理网卡),添加一个虚拟网卡并给定其一个静态IP以供调试使用,同时不影响另一个正常的网卡进行DHCP获取IP的需求,可以在系统中增加一个macvlan虚拟网卡。macvlan 一种虚拟网卡解决方案。
二、什么是macvlan
三、内核修改配置
可以执行以下命令测试内核是否支持
sudo ip link add macvlan0 link enp1s0 type macvlan mode bridge
如未支持,需要修改内核设置
CONFIG_MACVLAN=y
CONFIG_MACVTAP=y
修改/etc/network/interfaces
增加以下内容,给添加的虚拟网卡设置一个静态IP
auto macvlan0
iface macvlan0 inet static
address 192.168.200.4
netmask 255.255.255.0
#gateway 192.168.1.1
#dns-nameservers 8.8.8.8
pre-up ip link add macvlan0 link enp1s0 type macvlan mode bridge
post-down ip link del macvlan0
四、开机执行脚本
macvlan虚拟网卡是基于网卡enp1s0的,所以必须得enp1s0 up后才能upmacvlan。该脚本开机后检测enp1s0是否up,如果已经up,则up macvlan0。
#!/bin/bash
MAX_RETRIES=10
DELAY_SEC=1
counter=0
while true; do
if ip link | grep -q enp1s0; then
break
fi
((counter++))
if [ $counter -eq $MAX_RETRIES ]; then
echo "Interface not found after maximum attempts. Exiting..."
exit 1
else
echo "Interface not found yet. Waiting for ${DELAY_SEC}s (attempt ${counter})..."
sleep $DELAY_SEC
fi
done
# Enable macvlan0 interface
ifup macvlan0
echo "Enabled macvlan0 interface."
exit 0
比如在 rc.local或者其他开机启动脚本中 增加
sudo createMacvlan.sh &
开机自启动 createMacvlan.sh
五、最终效果
enp1s0 DHCP动态获取IP,macvlan0使用静态IP,两者互不影响。