今天小有收获一下,就是Linux上关于VLAN与Cisco交换机中继连接,其实接入连接也可以。

环境:CentOS 5.2

最小化安装,物理网卡eth1,作为VLAN交换机连接的Trunk口。而另外一张物理网卡eth0作为上行口,连接外部网络。

Cisco 2960,启用VLAN,VLAN的网段规划入下:

VLAN 2:192.168.1.0/24

VLAN 3:192.168.2.0/24

VLAN 4:192.168.3.0/24

*主要步骤:

--------------------------------------------------

1.确认当前Linux内核是否已经支持VLAN功能。

2.决定系统上启用VLAN功能的物理网卡,并且保证该物理网卡启用。

3.在物理网卡上添加多个VLAN虚拟网卡。

4.在每个VLAN网卡上分配规划的IP地址并启动该VLAN虚拟网卡。

5.清除启用VLAN功能的物理网卡上的IP地址,以及清除该网卡上的所有系统子网卡。

6.重新启动网络服务,进行网络重新初始化。

--------------------------------------------------

一.首先要确认Linux系统内核是否已经支持VLAN功能:

当前使用内核以及操作系统版本:

[root@VlanLinux ~]# cat /proc/version

--------------------------------------------------

Linux version 2.6.18-8.el5

这里我的内核使用的是2.6.18的版本。

(mockbuild@builder4.centos.org)
(gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP

这里我的操作系统是CentOS 5.0。

Thu Mar 15 19:57:35 EDT

2007

--------------------------------------------------

一般来说RH9以后的Linux发行版本,诸如RHEL4、RHEL5、CentOS4、CentOS5都已经默认支持了VLAN的功能。

二.物理网卡、子网卡、虚拟VLAN网卡的关系:

1.物理网卡:物理网卡这里指的是服务器上实际的网络接口设备,这里我服务器上双网卡,在系统中看到的2个物理网卡分别对应是eth0和eth1这两个网络接口。

2.子网卡:子网卡在这里并不是实际上的网络接口设备,但是可以作为网络接口在系统中出现,如eth0:1、eth1:2这种网络接口。它们必须要依赖于物理网卡,虽然可以与物理网卡的网络接口同时在系统中存在并使用不同的IP地址,而且也拥有它们自己的网络接口配置文件。但是当所依赖的物理网卡不启用时(Down状态)这些子网卡也将一同不能工作。

3.虚拟VLAN网卡:这些虚拟VLAN网卡也不是实际上的网络接口设备,也可以作为网络接口在系统中出现,但是与子网卡不同的是,他们没有自己的配置文件。他们只是通过将物理网加入不同的VLAN而生成的VLAN虚拟网卡。如果将一个物理网卡添加到多个VLAN当中去的话,就会有多个VLAN虚拟网卡出现,他们的信息以及相关的VLAN信息都是保存在/proc/net/vlan/config这个临时文件中的,而没有独自的配置文件。它们的网络接口名是eth0.1、eth1.2这种名字,另外非常重要的一点就是当需要启用VLAN虚拟网卡工作的时候,他们关联的物理网卡网络接口上必须没有IP地址的配置信息,并且,这些主物理网卡的子网卡也必须不能被启用和必须不能有IP地址配置信息。

三.规划网络:

1.VLAN的划分:

Cisco交换机2960上划分3个VLAN,分别是:

VLAN 2:192.168.1.0/24

VLAN 3:192.168.2.0/24

VLAN 4:192.168.3.0/24

然后开放一个FastEthernet 0/1

端口来作为中继口(Trunk),使用封装802.1q来连接上行路由网关。

Linux网关上将启用eth1来作为下行连接Cisco交换机2960的中继接口。CentOS

5.0默认内核支持VLAN,并且默认只支持802.1q的中继封装。另外,由于网络当中要使用3个VLAN,因此,中继网卡eth1也必须要添加虚拟网卡以及IP地址。规划如下:

eth1.2:192.168.1.123/24

eth1.3:192.168.2.123/24

eth1.4:192.168.3.123/24

2.Linux网关转发部分:

VLAN功能网卡eth1上将被划分成3个VLAN虚拟网卡,通过中继网卡eth1与Cisco交换机2950的VLAN中继端口连接,并且eth1本身不得拥有IP地址也不得拥有子网卡。另外一个物理网卡eth0作为上行网络接口,正常设置并且不启用VLAN功能,地址为192.168.0.242。而Linux服务器将在eth1与eth0之间做流量转发,这样VLAN与VLAN之间也实现了数据流的转发,如果不希望VLAN之间转发的话,可以通过iptables来进行设定,这里就不再展开iptables了。

四.在Linux配置VLAN Trunk:

由于在Linux上eth1要被设定为Trunk与Cisco交换机2960中继连接,因此,网络中有几个VLAN的话,那么中继网卡上也必须要加入多个VLAN才能支持到。

1.配置物理网卡eth0为上行接口:

[root@VlanLinux ~]# vi
/etc/sysconfig/network-scripts/ifcfg-eth0
--------------------------------------------------
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.242
NETMASK=255.255.255.0

--------------------------------------------------

2.配置物理网卡eth1为VLAN网卡:

[root@VlanLinux ~]# vi
/etc/sysconfig/network-scripts/ifcfg-eth1
--------------------------------------------------
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static

设定静态地址并且不给IP地址设定。

--------------------------------------------------

3.将eth1添加到VLAN 2中:

[root@VlanLinux ~]# vconfig add eth1 2
--------------------------------------------------
WARNING: Could not open
/proc/net/vlan/config. Maybe you need to load the 8021q
module, or maybe you are not using PROCFS??

第一次添加VLAN虚拟网卡的时候就一定会出现上面的那句提示,原因是因为默认下/proc/net/vlan/config这个专门用来保存VLAN信息的文件是没有的。由于第一次添加VLAN网卡,那么这个文件也会被自动建立起来。另外,在/proc/目录下面的文件都是系统的零时文件,因此重新启动后必定丢失休息,所以在配置并测试VLAN成功后,可以将一些相关命令添加到rc.local这个启动脚本当中去了。

Added VLAN with VID == 2 to IF
-:eth1:-

这里表示已经将eth1网卡添加到了VLAN 2中,并且它在VLAN中的虚拟网卡是eth1.2。

--------------------------------------------------

4.将eth1添加到VLAN 3中:

[root@VlanLinux ~]# vconfig add eth1 3
Added VLAN with VID == 3 to IF
-:eth1:-

这里表示已经将eth1网卡添加到了VLAN 3中,并且它在VLAN中的虚拟网卡是eth1.3。

5.将eth1添加到VLAN 4中:

[root@VlanLinux ~]# vconfig add eth1 4
Added VLAN with VID == 4 to IF
-:eth1:-

这里表示已经将eth1网卡添加到了VLAN 4中,并且它在VLAN中的虚拟网卡是eth1.4。

6.检查添加的VLAN虚拟网卡信息:

[root@VlanLinux ~]# cat /proc/net/vlan/config
--------------------------------------------------
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth1.2 | 2 | eth1
eth1.3 | 3 | eth1
eth1.4 | 4 | eth1

虚拟网卡 VLANID 归属的主网卡

--------------------------------------------------

可以看到所有的VLAN虚拟网卡以及它们所归属的主物理网卡。

五.为VLAN虚拟网卡设定IP地址并且进行启用:

设定VLAN 2虚拟网卡地址并启用

[root@VlanLinux ~]# ifconfig eth1.2 192.168.1.234 up

设定VLAN 3虚拟网卡地址并启用

[root@VlanLinux ~]# ifconfig eth1.3 192.168.2.234 up

设定VLAN 4虚拟网卡地址并启用

[root@VlanLinux ~]# ifconfig eth1.4 192.168.3.234 up

六.确认Linux系统下的所有网络接口配置:

1.重新启动网络服务

[root@VlanLinux ~]# service network restart
--------------------------------------------------
Shutting down interface
eth0: [ OK ]
Shutting down interface
eth1: [ OK ]
Shutting down loopback
interface: [ OK ]
Bringing up loopback
interface: [ OK ]
Bringing up interface
eth0: [ OK ]
Bringing up interface
eth1: [ OK ]

--------------------------------------------------

2.检查Linux系统下的所有网络接口信息:

[root@VlanLinux ~]# ifconfig | less
--------------------------------------------------
eth0 Link
encap:Ethernet HWaddr
00:0C:29:60:9C:0E inet
addr:192.168.0.242 Bcast:192.168.0.255 Mask:255.255.255.0
inet6
addr:
fe80::20c:29ff:fe60:9c0e/64
Scope:Link
UP BROADCAST
RUNNING MULTICAST MTU:1500 Metric:1
RX
packets:3349 errors:0
dropped:0 overruns:0
frame:0
TX
packets:1019 errors:0
dropped:0 overruns:0
carrier:0
collisions:0 txqueuelen:1000
RX
bytes:330286 (322.5 KiB) TX
bytes:131886 (128.7 KiB)
Interrupt:169 Base
address:0x2000

该物理网卡是上行正常网卡,不启用VLAN功能。

eth1 Link
encap:Ethernet HWaddr
00:0C:29:60:9C:18 inet6
addr:
fe80::20c:29ff:fe60:9c18/64
Scope:Link
UP BROADCAST
RUNNING MULTICAST MTU:1500 Metric:1
RX
packets:2975 errors:0
dropped:0 overruns:0
frame:0
TX
packets:901 errors:0
dropped:0 overruns:0
carrier:0
collisions:0 txqueuelen:1000
RX
bytes:286800 (280.0 KiB) TX
bytes:69709 (68.0 KiB)
Interrupt:177 Base
address:0x2080
该物理网卡是下行的VLAN中继接口,启用VLAN功能,因此必须不能有IP地址!也必须不可以有子网卡!但是它必须要启动!
eth1.2 Link
encap:Ethernet HWaddr
00:0C:29:60:9C:18 inet
addr:192.168.1.234 Bcast:192.168.1.255 Mask:255.255.255.0
inet6
addr:
fe80::20c:29ff:fe60:9c18/64
Scope:Link
UP BROADCAST
RUNNING MULTICAST MTU:1500 Metric:1
RX
packets:5 errors:0
dropped:0 overruns:0
frame:0
TX
packets:12 errors:0
dropped:0 overruns:0
carrier:0
collisions:0 txqueuelen:0
RX
bytes:1195 (1.1 KiB) TX
bytes:984 (984.0 b)
这个就是VLAN
2的虚拟网卡。
eth1.3 Link
encap:Ethernet HWaddr
00:0C:29:60:9C:18 inet
addr:192.168.2.234 Bcast:192.168.2.255 Mask:255.255.255.0
inet6
addr:
fe80::20c:29ff:fe60:9c18/64
Scope:Link
UP BROADCAST
RUNNING MULTICAST MTU:1500 Metric:1
RX
packets:0 errors:0
dropped:0 overruns:0
frame:0
TX
packets:12 errors:0
dropped:0 overruns:0
carrier:0
collisions:0 txqueuelen:0
RX
bytes:0 (0.0 b) TX bytes:984
(984.0 b)
这个就是VLAN
3的虚拟网卡。
eth1.4 Link
encap:Ethernet HWaddr
00:0C:29:60:9C:18 inet
addr:192.168.3.234 Bcast:192.168.3.255 Mask:255.255.255.0
inet6
addr:
fe80::20c:29ff:fe60:9c18/64
Scope:Link
UP BROADCAST
RUNNING MULTICAST MTU:1500 Metric:1
RX
packets:0 errors:0
dropped:0 overruns:0
frame:0
TX
packets:12 errors:0
dropped:0 overruns:0
carrier:0
collisions:0 txqueuelen:0
RX
bytes:0 (0.0 b) TX bytes:984
(984.0 b)
这个就是VLAN
4的虚拟网卡。
lo Link
encap:Local Loopback inet
addr:127.0.0.1 Mask:255.0.0.0
inet6
addr: ::1/128
Scope:Host
UP LOOPBACK
RUNNING MTU:16436 Metric:1
RX
packets:600 errors:0
dropped:0 overruns:0
frame:0
TX
packets:600 errors:0
dropped:0 overruns:0
carrier:0
collisions:0 txqueuelen:0
RX
bytes:64892 (63.3 KiB) TX
bytes:64892 (63.3 KiB)

本系统的回送接口,这个不用管了。

--------------------------------------------------

到这里已经基本上将VLAN的主要配置完成了。

七.简单测试:

测试从Linux系统上到一台VLAN 2网络的主机联通性。

[root@VlanLinux ~]# ping 192.168.1.199
--------------------------------------------------
PING 192.168.1.199 (192.168.1.199) 56(84) bytes of data.
64 bytes from 192.168.1.199: icmp_seq=1 ttl=128
time=4.76 ms
64 bytes from 192.168.1.199: icmp_seq=2 ttl=128
time=1.06 ms
64 bytes from 192.168.1.199: icmp_seq=3 ttl=128
time=0.942 ms
64 bytes from 192.168.1.199: icmp_seq=4 ttl=128
time=0.956 ms

--------------------------------------------------

八.其他工作:

其他一些相关的内容将不再在本篇中详述了,剩下的工作主要有如下。

1.打开转发ip_forward为值1。

2.配置iptables进行NAT各个网络接口间转发。

3.配置iptables来限制指定VLAN之间的转发。

4.将需要系统启动初始化的配置用命令加入到rc.local当中去。

5.安全以及性能调优等等。

九.附录:Vconfig命令的简要说明:

--------------------------------------------------

主名

vconfig - VLAN 802.1q

配置程序。

说明

Vconfig程序能够建立VLAN虚拟网卡并且与远程的VLAN设备对接,但是前提是内核首先必须支持VLAN功能。VLAN虚拟网卡是以太网卡上虚拟出来的、为了能够在一个物理网络上支持VLAN虚拟网络的虚拟网卡。

选项

add 物理网卡 VLAN-ID号

在指定的物理网卡上虚拟出指定VLAN号的VLAN虚拟网卡。VLAN虚拟网卡名将记录在/proc/net/vlan/config文件中。

rem VLAN虚拟网卡

删除指定的VLAN虚拟网卡,如果不清楚VLAN虚拟网卡名的话可以到/proc/net/vlan/config文件中查看VLAN虚拟网卡名。

相关文件

/proc/net/vlan/config

/proc/net/vlan/VLAN虚拟网卡

--------------------------------------------------

基本上,Linux支持VLAN的内容就这些了。如果不幸内核不支持VLAN功能的话...编译内核吧...= =|||