1. ifconfig添加

使用 ifconfig -a 命令查看已有物理网卡,一般得到如下输出:

eno1     ...(省略)
lo       ...
ppp0     ...

然后向物理网卡eno1中添加一块虚拟网卡:

sudoifconfig eno1:1 192.168.0.10 up

以上命令创建了一个叫 eno1:1 的虚拟网卡,地址是 192.168.0.10

可以使用如下命令删除:

sudoifconfig eno1:1 down

用这种方式添加的虚拟网卡,重启服务器或网络后就没了。

2. 修改网卡配置文件

在Ubuntu下,网卡的配置文件是 /etc/network/interfaces

sudo vim /etc/network/interfaces

增加如下内容:

auto eno1:1
iface eno1:1 inet static
address 192.168.0.10
netmask 255.255.255.0
# network 192.168.10.1# broadcast 192.168.1.255

然后重启网卡(重新加载配置文件):

sudo /etc/init.d/networking restart

这种方式在重启服务器或者网卡后配置不会丢失。

3. 创建TAP

前面两种方式创建的虚拟网卡和物理网卡相比,IP地址不同,但是Mac地址相同:

eno1      Link encap:以太网  硬件地址 da:3d:b0:a0:13:p9  
          ...(省略)
eno1:1    Link encap:以太网  硬件地址 da:3d:b0:a0:13:p9  (相同Mac地址)
          inet 地址:192.168.0.10  广播:192.168.0.255  掩码:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1

如果需要不同的Mac地址,可以添加虚拟网卡TAP。先安装uml-utilities:

sudoapt-getinstall uml-utilities

然后使用 tunctl 添加虚拟网卡,该命令会生成一个TAP,后缀从0递增:

$ sudo tunctl -b
tap0
$ sudo tunctl -b
tap1

最后激活创建的TAP:

$ sudo ip linkset tap0 up
$ sudo ip linkset tap1 up

查看网卡信息可以看到TAP有不同的Mac地址:

tap0      Link encap:以太网  硬件地址 be:74:81:f7:27:97  
          ...(省略)
tap1      Link encap:以太网  硬件地址 b2:da:ce:f0:45:5d  
          ...

这种方式创建的虚拟网卡在重启后也会消失,需要编写脚本作为系统服务随系统自动启动创建虚拟网卡,可以根据具体需求修改此脚本(符合chkconfig规范)。脚本如下:

$ cat /etc/init.d/config_tap 
#!/bin/bash## config_tap          Start up the tun/tap virtual nic## chkconfig: 2345 55 25
USER="root"
TAP_NETWORK="192.168.0.1"
TAP_DEV_NUM=0
DESC="TAP config"
do_start(){if[! -x /usr/sbin/tunctl ];thenecho"/usr/sbin/tunctl was NOT found!"exit 1
  fi
  tunctl -t tap$TAP_DEV_NUM -u root
  ifconfig tap$TAP_DEV_NUM${TAP_NETWORK}  netmask 255.255.255.0 promisc
  ifconfig tap$TAP_DEV_NUM}
do_stop(){ifconfig tap$TAP_DEV_NUM down 
}
do_restart(){
  do_stop
  do_start
}
check_status(){ifconfig tap$TAP_DEV_NUM}case$1in 
  start)    do_start;;
  stop)     do_stop;;
  restart)  do_restart;;
  status)echo"Status of $DESC: "
            check_status
            exit"$?";;
  *)echo"Usage: $0 {start|stop|restart|status}"exit 1 
esac

然后将脚本加入到系统服务中:

chkconfig --add config_tap 
chkconfig --level 345 config_tap on

操作完成后,就可以像其他标准服务一样,通过 service config_tap start 来进行创建和启动操作。

参考文章