1. 背景
一般實現VLAN間通訊,要不就用三層交換器,要不就是用單臂路由,這兩種方式都很燒錢,所以當有VLAN間通訊的需求,並且VLAN間通訊的資料量不是很大的話,用50塊的SOHO路由搭建網路就很實惠了。
我原始的需求是這樣的:
有一個N口的二層交換器,需要為其做一個Test Case,這個Test Case的核心環節是需要一個乙太網路資料包能經過它所有的N個口。
為了達到這個目的,就要把N個口兩兩分成一個VLAN,分別為VLAN0,VLAN1,VLAN2…,相鄰的VLAN之間能通訊,這樣資料就能這樣走:VLAN0的port1->VLAN0的port2->VLAN1的port1->VLAN1的port2->VLAN2的port1->VLAN2的port2…->VLANn的port1->VLANn的port2。
PS. 這裡用的SOHO路由必須支援靜態路由表。 2. 原理
首先,在考慮這個問題之前,我看到別人的一個交換器實現VLAN間通訊,只需要用一根交叉網線把不同的VLAN串連起來就可以了,然後我就很天真地回去也這麼試了,結果很受傷。這是我至今百思都不得其解的一件事情,基於連接埠的VLAN如果用交叉網線接起來就能通訊,那VLAN本身還有什麼意義。
扯遠了。
先說交換器。
基於連接埠的VLAN一般是這樣工作的,交換器接收到一個乙太網路幀的時候,會對這個乙太網路幀進行標記,其中的標記資訊就會包含這個乙太網路幀是哪個連接埠收到的,如果設定了VLAN,那麼交換器就會根據VLAN的配置還有標記裡面的連接埠資訊把這包乙太網路幀轉寄到特定的連接埠(同一個VLAN的連接埠)。
再說SOHO路由器。
SOHO路由器為什麼能勝任這個工作呢。首先SOHO路由器會有兩種連接埠,LAN口和WAN口。VLAN間需要通訊,就必須來到協議的第三層以上。LAN口和WAN口之間的通訊是走NAT協議的,比如LAN口的IP地址是192.168.1.123,WAN口的IP地址是10.10.11.1,192.168.1.123去ping 10.10.11.1是能ping成功的,因為SOHO路由內部做了NAT轉換。所以,基本的思想是,一個VLAN接到LAN口上,一個VLAN接到WAN口上,這樣這兩個VLAN就能通訊了,並且VLAN內部產生的廣播風暴也不會影響到別的VLAN。
那麼問題來了,如果是很多個VLAN間要通訊,怎麼搭。
這時候就得用到SOHO路由的靜態路由表了。基本想法是這樣的:如果把路由器1的WAN口和路由器2的LAN口用網線串連起來,那麼這兩個口就處於一個區域網路了,那麼這時候只要WAN的IP地址和LAN的IP地址在同一個網段,那麼它們就可以通訊了,並且把路由器2的LAN口通過NAT可以和路由器2的WAN口通訊,於是路由器1的WAN口也就可以和路由器2的WAN口通訊,按照這個思路依次級聯下去,那麼跨VLAN通訊就可以實現了,於是有了我下面這個拓撲:
在這個拓撲裡,PC1和PC2就是兩台在不同VLAN,而且需要通訊的機器。對於這台交換器,port1和port2是一個VLAN,port3和port4是一個VLAN,port5和port6是一個VLAN…,以此類推,一共劃分了6個VLAN。 3. 配置
搭建好了上面的拓撲圖後,還需要做一個工作,就是設定所有路由器的靜態路由表。
一條靜態路由表的條目有3部分:
1) 目的網路地址
2) 子網路遮罩
3) 網關
所以靜態路由表的作用就是,把目的網路地址的資料包轉寄到網關地址去。
所以,按照上面的拓撲,PC1要ping 10.30.11.1這個地址,就要在router 1上面添加靜態路由條目:
目的網路地址:10.30.11.0
子網路遮罩:255.255.255.0
網關:10.20.11.2
這樣,所有目的IP為10.30.11.0~10.30.11.255的資料包都會被轉寄到10.20.11.2去,然後通過router 2的NAT,資料就能達到10.30.11.1,按照這個原理,完成上面所有路由的靜態路由表添加:
4. 還有一點要注意的
按照上面的步驟弄完,會發現,有時候PC1和PC2還是無法相互ping通,這是因為電腦上有兩個以上網卡,所以路由表也要改:
1)PC1運行“cmd.exe”,win7以上系統要管理員權限運行。
2)輸入:
route delete 0.0.0.0
route add 0.0.0.0 mask 0.0.0.0 10.10.11.1 -p
跟添加靜態路由條目的意思一樣,這裡意思就是說,所有的資料包都給我轉寄到10.10.11.1這個地址去。