在不同網段使用 VLAN 通訊 - SVI,單臂路由

以終為始發表於2020-08-03

VLAN 這篇文章 中知道,設定 VLAN 目的是隔離大型的廣播域,將其分成很小的廣播域,從而更好的管理。但也就帶來了一些問題:如流量不能在不同的 VLAN 間通訊。

而為了解決這個問題,可以採用如下技術:

  • 新增路由器(單臂路由)
  • 三層交換機(SVI)

單臂路由

首先可以增加一個路由器,採用如下的拓撲結構:

但這同樣有一個問題,就是一個 VLAN 需要佔用一個路由器上的介面,那麼,能不能向交換機的 Trunk 口那樣,在一個介面上跑所有的 VLAN 呢。

答案是肯定的,就是通過子介面的概念,將一個物理介面虛擬成多個子介面,並且為每個子介面配置一個 VLAN。這一技術也稱為單臂路由。

簡單來說,單臂路由是指在路由器的一個介面上通過配置子介面(邏輯介面)的方式,實現原來相互隔離不同的 VLAN 之間的互聯互通。

配置單臂路由:

#  Switch
Switch>en
Switch#conf t
Switch(config)#vlan 10,20
Switch(config)#int e  0/0
Switch(config-if)#switchport mode ac
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 10
Switch(config)#int e  0/1
Switch(config-if)#switchport access vlan 20
Switch(config-if)#no shu
Switch(config-if)#int e 0/2
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#switchport mode trunk
Switch(config-if)#no shu

# PC: R1
Router>en
Router#conf t
Router(config)#no ip routing
Router(config)#ho R1
R1(config)#ip default-gateway 192.168.10.254
R1(config)#int e 0/0
R1(config-if)#ip add 192.168.10.1 255.255.255.0
R1(config-if)#no shu
R1(config-if)#do wr

# PC: R2
Router>en
Router#conf t
Router(config)#no ip routing
Router(config)#ho R2
R2(config)#ip default-gateway 192.168.20.254
R2(config)#int e 0/0
R2(config-if)#ip add 192.168.20.1 255.255.255.0
R2(config-if)#no shu
R2(config-if)#do wr


# Router: r4
Router>en
Router#conf t
Router(config)#ho r
r(config)#int e0/0
r(config)#no shu

# configure sub-interface 10
r(config)#int e0/0.10
# config vlan for this sub-interface
r(config-subif)#encapsulation dot1Q 10
r(config-subif)#ip add 192.168.10.254 255.255.255.0
r(config-subif)#no shu

# configure sub-interface 20
r(config)#int e0/0.20 
r(config-subif)#encapsulation dot1Q 20
r(config-subif)#ip add 192.168.20.254 255.255.255.0
r(config-subif)#no shu

分析一下通訊過程:

R1 要給 R2 傳送 ICMP,發現沒有對應閘道器的 MAC 地址,將包擱置。傳送 ARP 請求閘道器的 MAC 地址

Switch 學習後進行泛洪,R4 收到 ARP 請求,並做出 ARP 應答。

Switch 再次學習來自 R4 的 Arp 應答,並直接轉發給 R1.

R1 解封裝 ARP 應答包,並且將擱置的 ICMP 包新增 MAC 地址後,發出。

Switch 收到 ICMP 後,之間轉發給 R4,R4 解封裝發現 三層 IP 是給自己能到達網段的,進行封包:
4 層:ICMP 報頭
3 層:IP 報頭,源 IP 192.168.10.1/24 目的 IP 192.168.20.1/24
2 層: 源 MAC:aabb.cc00.4000 目的 MAC:不清楚
將包擱置,傳送 Arp 請求 獲取 R2 的MAC 地址

Switch 學習發來的 ARP 請求,並泛洪。R2 收到 Arp 請求做出應答,Switch 再次學習,然後直接轉發給 R1。

R1 解析 ARP 應答,並將擱置的 ICMP 包發給 R2。

R2 又會做出 ICMP 應答,Switch 之間轉發給 R1,R1 解封裝發現 ICMP 的應答報文的目的 IP 是 R1,接著重新封裝轉發給 Switch。

Switch 再直接轉發給 R1。

綜上:我們可以發現一個有趣的現象,在 R4 和 交換機的鏈路上可以看到有雙重的 Icmp 的 reqeust 和 reply 如下:

這裡在解釋一下兩個 request 和 reply 的含義:

第一個 request 是:R1 傳送 R4 (R4 是 R1 的閘道器) 並且應該帶有 VLANID = 10 的 Tag,如下

第二個 request 是:R4 發給 R2 的 ICMP 包,並且應該帶有 VLANID = 20 的 TAG,因為是從虛擬的子介面 Vlan20 發出,如下

第一個 reply 是:R2 發給 R4,帶有 VLANID = 20 的 Tag,如下

第二個 replay 是:R4 發給 R1 的,帶有 VLANID = 10 的 TAG,如下

因此我們可以推測出在 R4 內部,進行了 Tag 的去除和封裝。

SVI(Switch Virtual Interface)

另一種方式就是通過三層交換機,來達到路由轉發的功能。

三層交換機,具有二層和三層轉發的功能。

閘道器介面,用於三層交換機跨 VLAN 間路由,具體可以通過 interface vlan 介面配置命令來建立 svi,然後實現路由功能

SVI 配置:

# switch
Switch(config)#ip routing    # 開啟路由功能
Switch(config)#no ip cef    # 關閉cef(這個屬於模擬器的bug,真實環境下不用)

# 建立 vlan
Switch(config)# vlan 10,20
# 配置模式
Switch(config-vlan)#int e 0/0
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 10
Switch(config-if)#no shutdown
Switch(config-vlan)#int e 0/1
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 20
Switch(config-if)#no shutdown

# 建立SVI介面
Switch(config)#interface vlan 10
Switch(config-if)#no sh
Switch(config-if)#ip address 192.168.1.254 255.255.255.0

Switch(config)#interface vlan 20
Switch(config-if)#no sh
Switch(config-if)#ip address 192.168.2.254 255.255.255.0

# PC 
# 關閉路由功能
PC1(config)#no ip routing

# 配置 ip
PC1(config)#interface e0/0
PC1(config-if)#no sh
PC1(config-if)#ip address 192.168.1.1 255.255.255.0

# PC 配置閘道器
PC1(config)#ip default-gateway 192.168.1.254

由於是三層交換機,192.168.1.0/24 和 192.168.2.0/24 兩個網段直接就可以互通了,不需要再去配置路由表,我們可以看一下路由表:

對三層交換機內部的講解:

由於 e0/0 口是 access 口,所以會被打上相應 vlan ID=10 的 tag。

由於是三層交換機,通過 SVI 模擬路由器,也就是說明進行的是三層通訊,可是傳送過來的資料包中包含 tag,

也就說明存在一個能把 tag 拆掉的 access 口才能通訊,所以推測這個口是虛擬的 Vlan 10,同時 Vlan 也是通往新網段的閘道器。

EtherChannel

有時交換機的頻寬無法滿足轉發流量的需要,就會出現阻塞的情況。一般會升級介面的頻寬,但有時往往特別大型的流量不是時常發生。手動的升級介面麻煩,甚至有些浪費。為了解決這個問題,EtherChannel 介面出現了,它可以將多個物理介面捆綁在一起同時進行流量的轉發,在流量較大時增加連線介面的數量,從鏈路視角看,就是同時連線多根鏈路,實現並行傳輸。

同時也出現了一個問題,在之前介紹交換機 STP 的內容時,瞭解交換機內部通過 STP 來防止環路,會將某些介面 Block。當如果想用這種並行的鏈路連線,就必須形成環路。

最後為了保證在 STP 不失效的情況下,應用並行鏈路,就會採用 EtherChannel 這種配置。會將所有繫結的介面視為同一個介面,這樣 STP 還能正常的執行。

但想要實現 Port-channel 介面,需要保證所有的介面配置完全相同:

  1. 物理介面支援 Etherchanbnel
  2. 物理介面保持一致
  3. 繫結的數量一致
  4. 介面模式一樣(如二層介面,三層介面)
  5. 介面型別必須相同(頻寬)
  6. 雙工,
  7. 工作模式,trunk,switch
  8. vlan 相同

配置了 EtherChannel 的介面,具有如下優點:

  • 邏輯聚合介面
  • 高頻寬
  • 負載均衡
  • 為 STP 提供一個邏輯介面
  • 冗餘(在斷開下,仍能保持執行)

配置 EtherChannel

配置 EtherChannel 有兩種方式:

  1. 手動
    • 手動將交換機上多個埠,捆綁成一個
  2. 自動學習(PAGP思科私有,LACP公有)

LACP 的模式:

  • Passive:等待主動的介面,建立連線
  • Active:主動傳送訊息,和另一端的介面建立連線

下面是 LACP 的建立原則:

# bind interfaces
s1(config)#interface range ethernet 0/0 - 1
s1(config)#shutdown
s1(config)#channel-group 1 mode active
s1(config)#no shutdown
# apply configuration
s1(config)#interface port-channel 1
s1(config)#switchport trunk encapsulation dot1q
s1(config)#switchport mode trunk

s1#show ip int bri
s1#show etherchannel summary

# bind interfaces
s2(config)#interface range ethernet 0/0 - 1
s2(config)#shutdown
s2(config)#channel-group 1 mode active
s2(config)#no shutdown
# apply configuration
s2(config)#interface port-channel 1
s2(config)#switchport trunk encapsulation dot1q
s2(config)#switchport mode trunk

s2#show ip int bri
s2#show etherchannel summary

總結

這篇文章中主要提到了三種技術:

  • 單臂路由和 SVI 是為了解決 VLAN 在不同網段間通訊的問題。

  • EtherChannel 是為了解決物理埠頻寬不夠時,如果去調整的方案。

相關文章