前言

在组建企业的数据网络时,我们可能经常会遇到各种流量隔离的需求。

如图,该企业通过一台交换机连接着三个用户群体,分别是部门A的用户、部门B的用户以及访客;

除此之外交换机上还连接着公共服务器(Server),用于部署公司的官网页面。

现在企业的需求是:

  • A 部门内的用户之间能够进行二层通信,B 部门同理;但是 A、B 部门的用户之间不能进行二层通信。
  • 访客区的任意一台PC除了能访问服务器外、不能访问任何其他设备、包括其他访客PC。

接下来,我们就分情况讨论,判断该采用什么方案,什么技术。

另外,因为正好涉及了vlan知识,还提及了vlan聚合技术,所以本文也一并介绍该技术。

vlan—hybrid接口

假设这是一个小型公司,交换机只是二层交换机。

那么根据需求,我们似乎可以给部门A划分一个vlan、部门B划分另一个vlan、然后访客机每一台再单独划分一个vlan。

这就就能实现“A、B 部门的用户之间不能进行二层通信”,“访客不能访问任何其他设备、包括其他访客PC”这两大需求了。

那么服务器呢?服务器应该配置为什么vlan才能保持所有设备都可以访问服务器?

。。

是的,只用现在学习过常规的access与trunk接口技术无法实现这个需求,毕竟交换机与服务器上的链路只能通行一个vlan的流量。

除非给所有接口都配置为hybrid接口,连接到服务器的接口剥离所有vlan标签,连接到其他设备的接口剥离服务器所在vlan的标签:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
vlan batch 12 34 5 6 100

int g0/0/1
port link hybrid
port hybrid untagged vlan 12 100
port hybrid pvid vlan 12

int g0/0/2
port link hybrid
port hybrid untagged vlan 12 100
port hybrid pvid vlan 12

int g0/0/3
port link hybrid
port hybrid untagged vlan 34 100
port hybrid pvid vlan 34

int g0/0/4
port link hybrid
port hybrid untagged vlan 34 100
port hybrid pvid vlan 34

int g0/0/5
port link hybrid
port hybrid untagged vlan 5 100
port hybrid pvid vlan 5

int g0/0/6
port link hybrid
port hybrid untagged vlan 6 100
port hybrid pvid vlan 6

int g0/0/23
port link hybrid
port hybrid untagged vlan all
port hybrid pvid vlan 100

如此一来,就能满足所有的要求了。

端口隔离

上述使用hybrid接口的方式确实可行,但是麻烦,尤其是需要使用大量的vlan去让访客区互相隔离。如果应用场景更复杂一些,设备数量多一些,配置将会很难。(比如放行vlan、配置vlanif)

实现设备之间的流量隔离,除了使用vlan,还有另外一种技术——端口隔离。

端口隔离是指交换机上的每个端口或者说接口,之间互相流量隔离。

隔离模式

端口隔离有两种模式——单向隔离与组内隔离。

单向隔离是一个接口单方面的隔离另一个接口(丢弃收到的报文),但不影响自己发送给对方,类似于“屏蔽”。

组内隔离是配置端口隔离时划分分组,同一分组内的接口之间互相隔离,分组内接口可以与组外接口通信。

配置

  • 配置端口单向隔离

    1. 执行命令system-view,进入系统视图。

    2. (可选)执行命令port-isolate mode { l2 | all },配置端口隔离模式。

      默认情况下,端口隔离模式为二层隔离,但三层互通。

      配置为all的话就是二层三层都隔离。

    3. 执行命令interface interface-type interface-number,进入以太网接口视图。

    4. 执行命令am isolate interface-type interface-number ,配置端口单向隔离。

    如果是希望接口A单向隔离接口B,也就是接口A可以发送报文给接口B,但接口B无法发送给接口A。

    就再接口A的视图下进行am isolate 接口B的配置。

  • 配置端口隔离组

    1. 执行命令system-view,进入系统视图。

    2. (可选)执行命令port-isolate mode { l2 | all },配置端口隔离模式。

      默认情况下,端口隔离模式为二层隔离,但三层互通。

      配置为all的话就是二层三层都隔离。

    3. 执行命令interface interface-type interface-number,进入以太网接口视图。

    4. 执行命令port-isolate enable [ group group-id ],启动端口隔离功能。

既然是配置命令一样,又是对多个接口进行配置,所以配置端口隔离组可以先配置端口组,然后在接口组下启用port-isolate enable

隔离组与隔离组之间是能够互相访问的,如果要禁止隔离,就再配置单向隔离。

回到前言中的案例进行配置

(重新贴一下图)

我们可以为访客区配置端口隔离,解放一部分vlan。

1
2
3
4
5
6
7
8
#创建名为pi的接口组,添加组成员,然后配置port-isolate enable
[magiku]port-group pi
[magiku-port-group-pi]group-member GigabitEthernet 0/0/5 to GigabitEthernet 0/0/6
[magiku-port-group-pi]port-isolate enable
#以下两条命令为自动生成输入的
[magiku-GigabitEthernet0/0/5]port-isolate enable
[magiku-GigabitEthernet0/0/6]port-isolate enable
[magiku-port-group-pi]

但我们还得保持访客区除了服务器外,不能与其他部门设备通信,所以vlan还得保留。(别忘了vlan间不可二层通信)

但可以配置整个访客区为同一个vlan,这里我直接新建一个vlan

1
2
3
4
5
6
7
8
9
10
[magiku]vlan 56
[magiku-vlan56]q
#既然配置过接口组了,那么就在接口组下配吧。(会复读你在接口组下配的命令)
[magiku]port-group pi
[magiku-port-group-pi]port hybrid pvid vlan 56
[magiku-GigabitEthernet0/0/5]port hybrid pvid vlan 56
[magiku-GigabitEthernet0/0/6]port hybrid pvid vlan 56
[magiku-port-group-pi]port hybrid untagged vlan 56 100
[magiku-GigabitEthernet0/0/5]port hybrid untagged vlan 56 100
[magiku-GigabitEthernet0/0/6]port hybrid untagged vlan 56 100

MUX VLAN

我们前面的配置都满足了需求,也避免了配置大量的vlan,但其实还有一个问题。

那就是我们是用的hybrid接口技术进行vlan的配置,而hybrid接口属于华为私有技术,同时华为没有做低端的交换机产品,在普通中小企业中占有量很少,所以这总归不是一个通用性高的方案。

MUX VLAN(Multiplex VLAN,多路复用形vlan)提供了一种通过VLAN进行网络资源控制的机制,是公开通用的一种技术。

MUX VLAN是通过设置主vlan与从vlan来实现vlan的弹性管控。

我们形象的在拓扑上比划一下。

把整个大区域定为主vlan,而部门是从vlan。那么部门之间就无法访问,因为它们属于不同的从vlan。

而服务器不属于从vlan,它在主vlan里,可以与整个主vlan内设备互相访问。

另外,MUX LAN中,从vlan分两种类型:

  • Group VLAN :跟普通vlan一样,同vlan互相访问,不同vlan间隔离。
  • Separate VLAN :跟配置了端口隔离的vlan一样,不就不同vlan间隔离,同vlan内部也隔离。

配置

配置主vlan:

  1. 执行命令system-view,进入系统视图。
  2. 执行命令vlan vlan-id,创建VLAN并进入VLAN视图。如果VLAN已经创建,则直接进入VLAN视图。
  3. 执行命令mux-vlan,配置该VLAN为主VLAN。

配置从VLAN(Group VLAN类型):

  1. 执行命令vlan vlan-id,进入已经成功创建的主VLAN视图。

  2. 执行命令subordinate group { vlan-id1 [ to vlan-id2 ] } ,配置指定VLAN为互通型从VLAN。

    配置VLAN为互通型从VLAN前,该VLAN必须已经创建。

    一个主VLAN下最多配置128个互通型从VLAN。

配置从VLAN(Separate VLAN)

  1. 执行命令vlan vlan-id,进入已经成功创建的主VLAN视图。

  2. 执行命令subordinate separate vlan-id,配置指定VLAN为隔离型从VLAN。

    配置VLAN为隔离型从VLAN前,该VLAN必须已经创建。

    一个主VLAN下只能配置一个隔离型从VLAN。

    同一MUX VLAN中互通型从VLAN和隔离型从VLAN的VLAN ID不能相同。

在接口上启用MUX VLAN功能:

  1. 执行命令interface interface-type interface-number,进入接口视图。
  2. 执行命令port mux-vlan enable,启用接口的MUX VLAN功能。

配置案例

还是这张图,我们按图中的划分从0配置一遍:

完成基础的vlan划分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#创建需要的vlan
[magiku]vlan batch 12 34 56 100
#为每个接口配置好vlan
[magiku]interface GigabitEthernet 0/0/1
[magiku-GigabitEthernet0/0/1]port link-type access
[magiku-GigabitEthernet0/0/1]port default vlan 12
[magiku-GigabitEthernet0/0/1]interface GigabitEthernet 0/0/2
[magiku-GigabitEthernet0/0/2]port link-type access
[magiku-GigabitEthernet0/0/2]port default vlan 12
[magiku-GigabitEthernet0/0/2]interface GigabitEthernet 0/0/3
[magiku-GigabitEthernet0/0/3]port link-type access
[magiku-GigabitEthernet0/0/3]port default vlan 34
[magiku-GigabitEthernet0/0/3]interface GigabitEthernet 0/0/4
[magiku-GigabitEthernet0/0/4]port link-type access
[magiku-GigabitEthernet0/0/4]port default vlan 34
[magiku-GigabitEthernet0/0/4]interface GigabitEthernet 0/0/5
[magiku-GigabitEthernet0/0/5]port link-type access
[magiku-GigabitEthernet0/0/5]port default vlan 56
[magiku-GigabitEthernet0/0/5]interface GigabitEthernet 0/0/6
[magiku-GigabitEthernet0/0/6]port link-type access
[magiku-GigabitEthernet0/0/6]port default vlan 56
[magiku-GigabitEthernet0/0/6]interface GigabitEthernet 0/0/23
[magiku-GigabitEthernet0/0/23]port link-type access
[magiku-GigabitEthernet0/0/23]port default vlan 100
[magiku-GigabitEthernet0/0/23]q

配置MUX VLAN:

1
2
3
4
[magiku]vlan 100
[magiku-vlan100]mux-vlan
[magiku-vlan100]subordinate group 12 34
[magiku-vlan100]subordinate separate 56

在接口上开启MUX VLAN功能:

1
2
3
[magiku]port-group muxvlan
[magiku-port-group-muxvlan]group-member GigabitEthernet 0/0/1 to GigabitEthernet0/0/6 GigabitEthernet 0/0/23
[magiku-port-group-muxvlan]port mux-vlan enable

验证:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
PC>ping 192.168.1.250

Ping 192.168.1.250: 32 data bytes, Press Ctrl_C to break
From 192.168.1.250: bytes=32 seq=1 ttl=255 time=15 ms
From 192.168.1.250: bytes=32 seq=2 ttl=255 time<1 ms
From 192.168.1.250: bytes=32 seq=3 ttl=255 time=31 ms
From 192.168.1.250: bytes=32 seq=4 ttl=255 time=32 ms
From 192.168.1.250: bytes=32 seq=5 ttl=255 time=15 ms

--- 192.168.1.250 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 0/18/32 ms

PC>ping 192.168.1.5

Ping 192.168.1.5: 32 data bytes, Press Ctrl_C to break
From 192.168.1.2: Destination host unreachable
From 192.168.1.2: Destination host unreachable
From 192.168.1.2: Destination host unreachable
From 192.168.1.2: Destination host unreachable
From 192.168.1.2: Destination host unreachable

--- 192.168.1.5 ping statistics ---
5 packet(s) transmitted
0 packet(s) received
100.00% packet loss

完美符合要求!

注意事项

MUX VLAN接口主要用于交换机连接终端设备的链路上,接口必须以Access类型或Hybrid Untagged类型加入MUX VLAN。

另外,如果指定VLAN ID已经被用于MUX VLAN中,那么该VLAN不能用于VLANIF接口、VLAN Mapping、VLAN Stacking等其他vlan相关的配置。

如果希望为“主vlan”配置vlanif接口,让所有“从接口”使用这一个vlanif接口作为网关进行通信,那么可以考虑接下来介绍的vlan聚合技术。

Vlan聚合

在一般的三层交换机中,通常是采用一个VLAN对应一个VLANIF接口的方式实现广播域之间的互通,这在某些情况下导致了IP地址的浪费。

划分一个子网后,则会有几个IP无法被用于设备上,一个是主机号全0的表示网段,一个是主机号全1的表示该网段的广播地址,另外还需要一个IP地址用做网关(Vlanif)。

此外,每个子网并不是所有地址都会被使用。比如说某办公区有15台主机,那么我们需要划分/27的掩码,实际包含31个ip地址,去掉网络地址、广播地址、网关地址、以及办公区使用的15台主机用的地址,还留下13个地址属于空闲浪费的状态。

VLAN聚合(VLAN Aggregation,也称Super VLAN)指在一个物理网络内,用多个VLAN(称为Sub-VLAN)隔离广播域,并将这些Sub-VLAN聚合成一个逻辑的VLAN(称为Super-VLAN),这些Sub-VLAN使用同一个IP子网和网关,进而达到节约IP地址资源的目的。

相对每一个普通VLAN都有一个三层逻辑接口和若干物理接口,VLAN聚合定义的Super-VLAN和Sub-VLAN比较特殊:

  • Sub-VLAN:只包含物理接口,不能建立VLANIF接口,用于隔离广播域。每个Sub-VLAN内的主机与外部的三层通信是靠Super-VLAN的VLANIF接口来实现的。
  • Super-VLAN:只建立三层VLANIF接口,不包含物理接口,与子网网关对应。一个Super-VLAN可以包含一个或多个Sub-VLAN。

在同一个Super-VLAN中,无论主机属于哪一个Sub-VLAN,它的IP地址都配置在Super-VLAN对应的子网网段内。

这样,Sub-VLAN间可以共同一个网关,实现了不同广播域使用同一子网网段地址的目的,减少了闲置地址浪费。

事实上,vlan聚合更主要的作用是可以将多个小型VLAN(以及其子网)合并成一个较大的逻辑VLAN(子网),简化网络结构和管理。

配置

  1. 执行命令system-view,进入系统视图。

  2. 执行命令vlan vlan-id,创建VLAN并进入VLAN视图。

    本配置步骤中的vlan-id是vlan聚合后的“主vlan”的id。

  3. 执行命令aggregate-vlan,创建Super-VLAN。

    Super-VLAN中不能包含任何物理接口。

    VLAN1不能配置为Super-VLAN。

  4. 执行命令access-vlan { vlan-id1 [ to vlan-id2 ] } ,将VLAN加入Super-VLAN。

    将VLAN加入到Super-VLAN中时,必须保证VLAN没有创建对应的VLANIF接口。

案例

以图中拓扑为例,将原来的VLAN12与VLAN34聚合为VLAN100,并使用vlanif100作为主机的网关。

1
2
3
4
5
6
7
8
9
10
<Huawei>system-view 
[Huawei]sysname SW1
[SW1]VLAN batch 12 34 100
[SW1]VLAN 100
[SW1-vlan100]aggregate-vlan
[SW1-vlan100]access-vlan 12 34
[SW1-vlan100]q
[SW1]interface Vlanif 100
[SW1-Vlanif100]ip address 192.168.1.254 24
[SW1-Vlanif100]q

配置SW1接口类型,放行vlan。

1
2
3
4
5
6
[SW1]interface GigabitEthernet 0/0/1
[SW1-GigabitEthernet0/0/1]port link-type trunk
[SW1-GigabitEthernet0/0/1]port trunk allow-pass vlan 12
[SW1-GigabitEthernet0/0/1]interface GigabitEthernet 0/0/2
[SW1-GigabitEthernet0/0/2]port link-type trunk
[SW1-GigabitEthernet0/0/2]port trunk allow-pass vlan 34

SW2与SW3的配置就不做展示了,基础的vlan配置。

现在vlan聚合就已经配置好了,使用PC1可以进行测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
PC>ping 192.168.1.254

Ping 192.168.1.254: 32 data bytes, Press Ctrl_C to break
From 192.168.1.254: bytes=32 seq=1 ttl=255 time=62 ms
From 192.168.1.254: bytes=32 seq=2 ttl=255 time=94 ms
From 192.168.1.254: bytes=32 seq=3 ttl=255 time=63 ms
From 192.168.1.254: bytes=32 seq=4 ttl=255 time=47 ms
From 192.168.1.254: bytes=32 seq=5 ttl=255 time=93 ms

--- 192.168.1.254 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 47/71/94 ms

PC>ping 192.168.1.2

Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
From 192.168.1.2: bytes=32 seq=1 ttl=128 time=47 ms
From 192.168.1.2: bytes=32 seq=2 ttl=128 time=47 ms
From 192.168.1.2: bytes=32 seq=3 ttl=128 time=62 ms
From 192.168.1.2: bytes=32 seq=4 ttl=128 time=63 ms
From 192.168.1.2: bytes=32 seq=5 ttl=128 time=31 ms

--- 192.168.1.2 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 31/50/63 ms

PC>ping 192.168.1.3

Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break
From 192.168.1.1: Destination host unreachable
From 192.168.1.1: Destination host unreachable
From 192.168.1.1: Destination host unreachable
From 192.168.1.1: Destination host unreachable
From 192.168.1.1: Destination host unreachable

--- 192.168.1.3 ping statistics ---
5 packet(s) transmitted
0 packet(s) received
100.00% packet loss

能通网关,能通同子vlan的PC2,不能通不同子vlan的PC2;都符合预期。

假如希望不同子vlan可以互通,因为网关都是同一个ip,所以可以在网关配置ARP代理。

1
2
[SW1]interface Vlanif 100
[SW1-Vlanif100]arp-proxy inter-sub-vlan-proxy enable

注意配置时,不要输入错为arp-proxy inner-sub-vlan-proxy enable,这个命令

这时PC1就可以ping通不同子vlan下的PC3了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PC>ping 192.168.1.3

Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break
From 192.168.1.3: bytes=32 seq=1 ttl=127 time=109 ms
From 192.168.1.3: bytes=32 seq=2 ttl=127 time=125 ms
From 192.168.1.3: bytes=32 seq=3 ttl=127 time=94 ms
From 192.168.1.3: bytes=32 seq=4 ttl=127 time=156 ms
From 192.168.1.3: bytes=32 seq=5 ttl=127 time=140 ms

--- 192.168.1.3 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 94/124/156 ms

另外强调一下聚合vlan不能用于二层通信,也就是不能配置在接口上(包括在trunk上放行也是不允许的)

假设在SW1另一侧连接一台交换机,配置trunk口,放行所有vlan。

子vlan发出的二层通信会维持其原有vlan标签,比如说该拓扑下PC1对外发送的二层通信会一直保持其vlan12的标签,不会被转换成vlan100。