Linux下单网卡配置属于不同vlan的ip(vlan子接口)

一台服务器上一块网卡想同时划到两个不同vlan,并且让他们之间可以互相通信。

1、首先确认Linux系统内核是否已经支持VLAN功能,加载了8021q模块,lsmod |grep 8021q。
2、关于网卡的解释,好多人不知道网卡接口上的冒号和点号的区别,以下是一些解释(我也是从网上查的,仅供参考)
a、物理网卡:物理网卡指的是服务器上实际的网络接口设备,如在系统中看到的2个物理网卡分别对应是eth0和eth1这两个网络接口。
b、子网卡:子网卡并不是实际上的网络接口设备,但是可以作为网络接口在系统中出现,如eth0:1、eth1:2这种网络接口。它们必须要依赖 于物理网卡,虽然可以与物理网卡的网络接口同时在系统中存在并使用不同的IP地址,而且也拥有它们自己的网络接口配置文件。但是当所依赖的物理网卡不启用 时(Down状态)这些子网卡也将一同不能工作。
c、虚拟VLAN网卡:这些虚拟VLAN网卡也不是实际上的网络接口设备,也可以作为网络接口在系统中出现,但是与子网卡不同的是,他们没有自己 的配置文件。他们只是通过将物理网加入不同的VLAN而生成的VLAN虚拟网卡。如果将一个物理网卡添加到多个VLAN当中去的话,就会有多个VLAN虚 拟网卡出现,他们的信息以及相关的VLAN信息都是保存在/proc/net /vlan/config这个临时文件中的,而没有独自的配置文件。它们的网络接口名是eth0.1、eth1.2这种名字。

下面为实际操作,我的环境是一台H3C S5120三层交换机,服务器有4个网卡。

交换机配置

配置trunk,并且配置允许vlan id,我这里端口是g1/0/11 到g1/0/15

设置该端口为trunk模式

1
2
3
[H3C-Git1/0/11]port link-type trunk //vlan端口默认为access模式
```
设置允许vlan 10和20的tag通过该端口

[H3c-Git1/0/11]port trunk permit vlan 40 50 //替换后面的数字为all则是允许所有vlan tag通过该端口

1
2
3
4
5
其他12,13,14,15口一样配置
接下来给vlan配置ip(配置网关)

[H3C]interface Vlan-interface 40
[H3C-Vlan-interface1]ip address 192.168.4.254 255.255.255.0

[H3C]interface Vlan-interface 50
[H3C-Vlan-interface1]ip address 192.168.5.254 255.255.255.0

1
2
3
4
5
6
7
8
9
10
11
12
交换机配置到此结束,接下来是Linux网卡配置
Linux要配置多vlan口。注:当需要启用VLAN虚拟网卡工作的时候,关联的物理网卡网络接口上必须没有IP地址的配置信息。
首先确认是否安装vconfig
然后查看核心是否提供VLAN 功能,执行

dmesg | grep -i 802

[root@test]# dmesg | grep -i 802

802.1Q VLAN Support v1.8 Ben Greeargreearb@candelatech.com

[root@test]# modprobe 8021q

[root@test~]#lsmod |grep 8021q //查看系统内核是否支持802.1q协议

8021q 18633 0

1
2

vconfig add eno3 300 // eno3为物理网络接口名称,300为 802.1q tag id 也即 vlan ID
vconfig add eno3 500

ifconfig eno3.300 192.168.4.5/24 up
ifconfig eno3.500 172.31.5.5/24 up

1
2
3
4
5
6
7
8
9
10
11
最终可以在可以创建成功的vlan接口
root@node-78:~# ls /proc/net/vlan/
然后把这些写进配置文件不然重启就没有了
vim /etc/network/interfaces

auto lo eno3
iface lo inet loopback
iface eno3.300 inet static
address 192.168.4.5
netmask 255.255.255.0
iface eno3.500 inet static
address 172.31.5.5
netmask 255.255.255.0

1
2
3
4
5
6
7
8
9
10
11
测试在服务器上分别ping 192.168.4.254和172.31.5.254可以ping通就行。
不能通的话, router -n 查看路由,是不是还是以前的老路由,是的话要删除
ip route del xxxx via xxx.xxx.xxx.xxx
dev 接口
5,删除VLAN命令

[root@test0001~]#vconfig rem eth0.100
Removed VLAN -:eth0.100:-
[root@test0001~]#vconfig rem eth0.200
Removed VLAN -:eth0.200:-
```
在openstack虚拟机里不能做操作,不过newton版开发了这个plugin叫VLAN-aware-VMs
http://blog.csdn.net/bc_vnetwork/article/details/53927687