網(wǎng)絡(luò)架構(gòu)實(shí)戰(zhàn):從VLAN到三層交換的兩層網(wǎng)絡(luò)設(shè)計(jì)與配置)
1. 項(xiàng)目概述為什么需要“兩層網(wǎng)絡(luò)”最近在折騰一個(gè)內(nèi)部系統(tǒng)需要把開(kāi)發(fā)、測(cè)試和生產(chǎn)環(huán)境徹底隔離開(kāi)同時(shí)還得保證它們之間能按需通信。直接用一個(gè)大的扁平網(wǎng)絡(luò)管理起來(lái)簡(jiǎn)直是災(zāi)難權(quán)限混亂、廣播風(fēng)暴、安全風(fēng)險(xiǎn)一個(gè)都跑不了。這時(shí)候“兩層網(wǎng)絡(luò)”的架構(gòu)思路就派上用場(chǎng)了。簡(jiǎn)單來(lái)說(shuō)它不是一個(gè)具體的產(chǎn)品而是一種網(wǎng)絡(luò)設(shè)計(jì)模式將網(wǎng)絡(luò)在邏輯上劃分為“核心層”和“接入層”。核心層負(fù)責(zé)高速、可靠的數(shù)據(jù)轉(zhuǎn)發(fā)和不同區(qū)域間的互聯(lián)接入層則負(fù)責(zé)連接具體的終端設(shè)備并實(shí)施基礎(chǔ)的訪問(wèn)控制和策略。這種架構(gòu)在中小型數(shù)據(jù)中心、企業(yè)辦公網(wǎng)甚至復(fù)雜的家庭實(shí)驗(yàn)室里都非常常見(jiàn)。它解決的不僅僅是連通性問(wèn)題更是關(guān)于網(wǎng)絡(luò)的可管理性、可擴(kuò)展性和安全性。如果你正在規(guī)劃一個(gè)稍具規(guī)模、且對(duì)未來(lái)增長(zhǎng)有預(yù)期的網(wǎng)絡(luò)環(huán)境理解并動(dòng)手搭建一個(gè)兩層網(wǎng)絡(luò)會(huì)是性價(jià)比極高的技術(shù)投資。接下來(lái)我就結(jié)合自己的實(shí)操經(jīng)驗(yàn)拆解一下從設(shè)計(jì)到落地的全過(guò)程。2. 網(wǎng)絡(luò)架構(gòu)核心思路與設(shè)計(jì)考量搭建網(wǎng)絡(luò)最忌諱的就是拿到設(shè)備就開(kāi)始配配到哪算哪。合理的規(guī)劃是成功的一半。對(duì)于兩層網(wǎng)絡(luò)我們需要先想清楚幾個(gè)核心問(wèn)題。2.1 邏輯分層核心與接入的職責(zé)分離兩層網(wǎng)絡(luò)的核心思想是“各司其職”。我們來(lái)明確一下每一層的任務(wù)核心層這是網(wǎng)絡(luò)的骨干和心臟。它的唯一目標(biāo)就是“快”和“穩(wěn)”。所有跨區(qū)域、跨網(wǎng)段的數(shù)據(jù)流最終都要經(jīng)過(guò)這里。因此核心層設(shè)備通常是核心交換機(jī)不應(yīng)該處理復(fù)雜的策略如ACL、安全過(guò)濾或者VLAN間的路由除非是集中式路由模型。它的主要工作是提供高帶寬、低延遲的交換能力并確保高可用性比如通過(guò)堆疊或MLAG技術(shù)。在實(shí)際項(xiàng)目中如果規(guī)模不大一臺(tái)性能較強(qiáng)的三層交換機(jī)也可以兼任核心層和部分分布層的功能這就是所謂的“核心-接入”兩層簡(jiǎn)化模型也是我們今天討論的重點(diǎn)。接入層這是網(wǎng)絡(luò)的“最后一公里”直接面對(duì)用戶、服務(wù)器、攝像頭等終端設(shè)備。接入層交換機(jī)或AP負(fù)責(zé)將終端接入網(wǎng)絡(luò)并執(zhí)行最基礎(chǔ)的策略。這里的關(guān)鍵任務(wù)包括端口安全防止MAC地址泛洪、VLAN劃分基于端口或基于MAC地址將終端劃入不同廣播域、生成樹(shù)協(xié)議STP/RSTP/MSTP配置以防止環(huán)路以及PoE供電如果需要。接入層設(shè)備數(shù)量通常最多但功能相對(duì)單一配置強(qiáng)調(diào)一致性和可批量部署。為什么要這么分從運(yùn)維角度看當(dāng)網(wǎng)絡(luò)出現(xiàn)性能瓶頸時(shí)你可以快速定位是核心轉(zhuǎn)發(fā)能力不足還是接入層策略不當(dāng)當(dāng)需要擴(kuò)容時(shí)可以在接入層平滑增加交換機(jī)而無(wú)需改動(dòng)核心架構(gòu)當(dāng)需要調(diào)整安全策略時(shí)可以在接入層端口上精細(xì)控制避免影響核心轉(zhuǎn)發(fā)效率。2.2 關(guān)鍵技術(shù)選型VLAN、Trunk與路由確定了架構(gòu)就要選擇實(shí)現(xiàn)的技術(shù)。對(duì)于兩層網(wǎng)絡(luò)以下幾項(xiàng)是基石VLAN虛擬局域網(wǎng)這是實(shí)現(xiàn)邏輯隔離的核心。我們可以根據(jù)部門如研發(fā)VLAN 10、財(cái)務(wù)VLAN 20、功能如服務(wù)器VLAN 100、無(wú)線用戶VLAN 200或安全等級(jí)來(lái)劃分VLAN。VLAN內(nèi)的設(shè)備像在一個(gè)獨(dú)立的交換機(jī)上廣播幀只在同一VLAN內(nèi)傳播不同VLAN間默認(rèn)不能通信這極大地提升了安全性和網(wǎng)絡(luò)效率。Trunk干道鏈路當(dāng)多個(gè)VLAN的數(shù)據(jù)需要跨越交換機(jī)比如從接入交換機(jī)到核心交換機(jī)傳輸時(shí)我們需要使用Trunk鏈路。Trunk鏈路通過(guò)在以太網(wǎng)幀中插入VLAN標(biāo)簽如IEEE 802.1Q標(biāo)準(zhǔn)來(lái)區(qū)分不同VLAN的數(shù)據(jù)。配置Trunk時(shí)務(wù)必遵循“最小權(quán)限原則”只允許必要的VLAN通過(guò)該Trunk。層間路由Inter-VLAN RoutingVLAN間需要通信怎么辦這就需要三層路由功能。在兩層網(wǎng)絡(luò)中通常采用“單臂路由”或“三層交換機(jī)SVI路由”。單臂路由在核心路由器的一個(gè)物理接口上創(chuàng)建多個(gè)子接口每個(gè)子接口對(duì)應(yīng)一個(gè)VLAN并配置為對(duì)應(yīng)VLAN的網(wǎng)關(guān)。所有跨VLAN流量都需經(jīng)過(guò)這個(gè)路由器。這種方式適用于早期路由器性能強(qiáng)、交換機(jī)性能弱的場(chǎng)景或作為臨時(shí)過(guò)渡方案容易形成單點(diǎn)瓶頸。三層交換機(jī)SVI路由這是當(dāng)前的主流方案。在三層交換機(jī)上為每個(gè)VLAN創(chuàng)建一個(gè)虛擬接口Switch Virtual Interface, SVI并配置IP地址作為該VLAN內(nèi)設(shè)備的默認(rèn)網(wǎng)關(guān)。當(dāng)VLAN間需要通信時(shí)流量在交換機(jī)的硬件ASIC芯片中進(jìn)行高速路由效率遠(yuǎn)高于單臂路由。我們的實(shí)驗(yàn)將采用這種方式。2.3 IP地址規(guī)劃一切管理的基礎(chǔ)混亂的IP規(guī)劃是運(yùn)維的噩夢(mèng)。在動(dòng)工前必須畫好一張IP地址分配表。規(guī)劃原則包括按VLAN分配網(wǎng)段為每個(gè)VLAN規(guī)劃一個(gè)獨(dú)立的子網(wǎng)。例如192.168.10.0/24給研發(fā)192.168.20.0/24給財(cái)務(wù)。預(yù)留地址空間子網(wǎng)劃分時(shí)考慮未來(lái)擴(kuò)容避免使用過(guò)小的子網(wǎng)如/29導(dǎo)致很快耗盡。固定關(guān)鍵設(shè)備IP核心交換機(jī)管理地址、網(wǎng)關(guān)地址、服務(wù)器地址等都應(yīng)采用靜態(tài)分配并記錄在案。規(guī)劃DHCP范圍為終端用戶所在的VLAN規(guī)劃DHCP地址池并排除已靜態(tài)分配的地址。一個(gè)清晰的規(guī)劃表能讓你在配置和排錯(cuò)時(shí)事半功倍。3. 實(shí)驗(yàn)環(huán)境搭建與設(shè)備配置詳解理論說(shuō)得再多不如動(dòng)手配一遍。我以一個(gè)典型的“核心-接入”兩層網(wǎng)絡(luò)為例使用兩臺(tái)支持VLAN和三層路由的交換機(jī)品牌以行業(yè)通用的CLI語(yǔ)法為例原理相通進(jìn)行演示。假設(shè)拓?fù)涫且慌_(tái)作為核心層Core-SW另一臺(tái)作為接入層Access-SW兩者之間通過(guò)千兆光纖或網(wǎng)線連接。3.1 基礎(chǔ)環(huán)境與拓?fù)涑跏蓟紫任覀冃枰獙?duì)設(shè)備進(jìn)行基礎(chǔ)配置包括主機(jī)名、管理IP和遠(yuǎn)程登錄。! 在核心交換機(jī)上配置 Core-SW enable Core-SW# configure terminal Core-SW(config)# hostname Core-SW Core-SW(config)# interface vlan 99 ! 創(chuàng)建一個(gè)管理VLAN 99 Core-SW(config-if)# description Management_VLAN Core-SW(config-if)# ip address 192.168.99.1 255.255.255.0 Core-SW(config-if)# no shutdown Core-SW(config-if)# exit Core-SW(config)# ip default-gateway 192.168.99.254 ! 假設(shè)上層路由器地址 Core-SW(config)# line vty 0 4 Core-SW(config-line)# password YourSecurePassword Core-SW(config-line)# login Core-SW(config-line)# transport input ssh ! 啟用SSH更安全 Core-SW(config-line)# exit Core-SW(config)# crypto key generate rsa modulus 2048 ! 生成SSH密鑰 Core-SW(config)# ip ssh version 2 Core-SW(config)# username admin privilege 15 secret YourAdminSecret接入層交換機(jī)也進(jìn)行類似配置只需將管理IP設(shè)為同網(wǎng)段另一個(gè)地址如192.168.99.2。注意管理VLAN最好獨(dú)立于業(yè)務(wù)VLAN并嚴(yán)格限制訪問(wèn)來(lái)源。secret命令會(huì)加密密碼比password命令更安全。3.2 VLAN創(chuàng)建與端口分配接下來(lái)創(chuàng)建業(yè)務(wù)VLAN并配置接入層端口。假設(shè)我們需要三個(gè)VLAN研發(fā)(VLAN 10)、財(cái)務(wù)(VLAN 20)、服務(wù)器(VLAN 100)。! 在核心和接入交換機(jī)上均需創(chuàng)建VLANVLAN信息通常通過(guò)VTP或手動(dòng)同步這里采用手動(dòng)創(chuàng)建確保一致 Core-SW(config)# vlan 10 Core-SW(config-vlan)# name RD Core-SW(config-vlan)# exit Core-SW(config)# vlan 20 Core-SW(config-vlan)# name Finance Core-SW(config-vlan)# exit Core-SW(config)# vlan 100 Core-SW(config-vlan)# name Servers Core-SW(config-vlan)# exit ! 在接入交換機(jī)上配置連接終端的接口為Access模式 Access-SW(config)# interface gigabitEthernet 0/1 Access-SW(config-if)# description To-PC-RD Access-SW(config-if)# switchport mode access ! 端口模式設(shè)為接入 Access-SW(config-if)# switchport access vlan 10 ! 將端口劃入VLAN 10 Access-SW(config-if)# spanning-tree portfast ! 啟用PortFast加速終端接入 Access-SW(config-if)# no shutdown Access-SW(config-if)# exit ! 配置連接財(cái)務(wù)部門PC的端口 Access-SW(config)# interface gigabitEthernet 0/2 Access-SW(config-if)# description To-PC-Finance Access-SW(config-if)# switchport mode access Access-SW(config-if)# switchport access vlan 20 Access-SW(config-if)# spanning-tree portfast Access-SW(config-if)# no shutdown Access-SW(config-if)# exit3.3 配置Trunk鏈路與核心層路由現(xiàn)在配置接入交換機(jī)與核心交換機(jī)之間的互聯(lián)鏈路為Trunk。! 在接入交換機(jī)上配置上聯(lián)口為Trunk Access-SW(config)# interface gigabitEthernet 0/24 ! 假設(shè)使用24口上聯(lián) Access-SW(config-if)# description Uplink-to-Core-SW Access-SW(config-if)# switchport mode trunk ! 端口模式設(shè)為干道 Access-SW(config-if)# switchport trunk native vlan 99 ! 設(shè)置本征VLAN為管理VLAN Access-SW(config-if)# switchport trunk allowed vlan 10,20,100,99 ! 只允許必要的VLAN通過(guò) Access-SW(config-if)# no shutdown Access-SW(config-if)# exit ! 在核心交換機(jī)上配置對(duì)應(yīng)的下聯(lián)口為Trunk Core-SW(config)# interface gigabitEthernet 0/1 Core-SW(config-if)# description Downlink-to-Access-SW Core-SW(config-if)# switchport mode trunk Core-SW(config-if)# switchport trunk native vlan 99 Core-SW(config-if)# switchport trunk allowed vlan 10,20,100,99 Core-SW(config-if)# no shutdown Core-SW(config-if)# exit最關(guān)鍵的一步在核心交換機(jī)上配置SVI接口實(shí)現(xiàn)VLAN間路由。! 在核心交換機(jī)上為每個(gè)VLAN創(chuàng)建SVI并配置網(wǎng)關(guān)IP Core-SW(config)# interface vlan 10 Core-SW(config-if)# description Gateway-for-RD Core-SW(config-if)# ip address 192.168.10.1 255.255.255.0 Core-SW(config-if)# no shutdown Core-SW(config-if)# exit Core-SW(config)# interface vlan 20 Core-SW(config-if)# description Gateway-for-Finance Core-SW(config-if)# ip address 192.168.20.1 255.255.255.0 Core-SW(config-if)# no shutdown Core-SW(config-if)# exit Core-SW(config)# interface vlan 100 Core-SW(config-if)# description Gateway-for-Servers Core-SW(config-if)# ip address 192.168.100.1 255.255.255.0 Core-SW(config-if)# no shutdown Core-SW(config-if)# exit ! 啟用IP路由功能如果默認(rèn)未開(kāi)啟 Core-SW(config)# ip routing至此一個(gè)最基本的兩層網(wǎng)絡(luò)就搭建完成了。連接到VLAN 10的PC網(wǎng)關(guān)設(shè)為192.168.10.1已經(jīng)可以和VLAN 20的PC網(wǎng)關(guān)192.168.20.1通信所有路由轉(zhuǎn)發(fā)都在核心交換機(jī)內(nèi)部高速完成。3.4 高級(jí)優(yōu)化與安全加固基礎(chǔ)連通性實(shí)現(xiàn)后我們需要考慮優(yōu)化和安全性這才是體現(xiàn)網(wǎng)絡(luò)工程師價(jià)值的地方。生成樹(shù)協(xié)議優(yōu)化為了防止環(huán)路但又不想經(jīng)歷50秒的阻塞延遲我們快速配置RSTP。Core-SW(config)# spanning-tree mode rapid-pvst ! 啟用快速生成樹(shù) Core-SW(config)# spanning-tree vlan 1,10,20,100 root primary ! 指定本機(jī)為根橋 Access-SW(config)# spanning-tree mode rapid-pvst Access-SW(config)# spanning-tree vlan 1,10,20,100 root secondary ! 指定本機(jī)為備份根橋?qū)⒑诵慕粨Q機(jī)設(shè)為主根橋可以確保流量路徑最優(yōu)。DHCP服務(wù)配置為了便于管理可以在核心交換機(jī)上為VLAN 10和20配置DHCP服務(wù)。Core-SW(config)# ip dhcp excluded-address 192.168.10.1 192.168.10.10 ! 排除前10個(gè)地址 Core-SW(config)# ip dhcp excluded-address 192.168.20.1 192.168.20.10 Core-SW(config)# ip dhcp pool VLAN10_POOL Core-SW(dhcp-config)# network 192.168.10.0 255.255.255.0 Core-SW(dhcp-config)# default-router 192.168.10.1 Core-SW(dhcp-config)# dns-server 8.8.8.8 114.114.114.114 Core-SW(dhcp-config)# exit ! 類似配置VLAN20的DHCP池基礎(chǔ)安全策略端口安全在接入層交換機(jī)的接入端口上限制學(xué)習(xí)的MAC地址數(shù)量防止MAC泛洪攻擊。Access-SW(config)# interface gigabitEthernet 0/1 Access-SW(config-if)# switchport port-security maximum 2 ! 最多學(xué)習(xí)2個(gè)MAC Access-SW(config-if)# switchport port-security violation restrict ! 違規(guī)時(shí)限制并告警 Access-SW(config-if)# switchport port-security mac-address sticky ! 動(dòng)態(tài)學(xué)習(xí)并粘滯ACL訪問(wèn)控制在核心交換機(jī)上通過(guò)擴(kuò)展ACL限制財(cái)務(wù)VLAN20訪問(wèn)服務(wù)器VLAN100的特定端口如僅允許訪問(wèn)HTTP/HTTPS。Core-SW(config)# ip access-list extended FINANCE-TO-SERVER Core-SW(config-ext-nacl)# permit tcp 192.168.20.0 0.0.0.255 192.168.100.0 0.0.0.255 eq 80 Core-SW(config-ext-nacl)# permit tcp 192.168.20.0 0.0.0.255 192.168.100.0 0.0.0.255 eq 443 Core-SW(config-ext-nacl)# deny ip any any log ! 拒絕其他所有并記錄日志 Core-SW(config-ext-nacl)# exit Core-SW(config)# interface vlan 20 Core-SW(config-if)# ip access-group FINANCE-TO-SERVER in ! 在VLAN20的SVI入口應(yīng)用ACL4. 排錯(cuò)實(shí)錄與核心問(wèn)題排查指南網(wǎng)絡(luò)配通了不代表就高枕無(wú)憂了更多的時(shí)候是在和各種各樣的“不通”作斗爭(zhēng)。下面是我在搭建和運(yùn)維這類網(wǎng)絡(luò)時(shí)總結(jié)出的高頻問(wèn)題排查清單你可以像查字典一樣按順序排查。4.1 連通性故障排查流程當(dāng)出現(xiàn)“電腦上不了網(wǎng)”或“A部門訪問(wèn)不了B部門服務(wù)器”時(shí)別慌按照OSI模型從下往上排查物理層Layer 1癥狀端口指示燈不亮、閃爍異常。排查檢查網(wǎng)線是否插緊、是否損壞換根線試試、光模塊是否匹配且發(fā)光正常用光功率計(jì)、交換機(jī)端口是否被shutdown。心得至少50%的“詭異問(wèn)題”是物理層故障。備一個(gè)簡(jiǎn)易測(cè)線器和備用線纜能節(jié)省大量時(shí)間。數(shù)據(jù)鏈路層Layer 2癥狀同VLAN內(nèi)不通或獲取不到IP地址。排查VLAN匹配在接入交換機(jī)上使用show interfaces gigabitEthernet 0/1 switchport確認(rèn)終端連接的端口模式是access且所屬VLAN正確。在Trunk鏈路兩端使用show interfaces trunk確認(rèn)允許的VLAN列表一致且本征VLAN相同。生成樹(shù)阻塞使用show spanning-tree interface gigabitEthernet 0/24查看端口狀態(tài)。如果顯示BLK阻塞說(shuō)明存在環(huán)路或根橋配置不當(dāng)。檢查RSTP配置確保核心交換機(jī)是根橋。MAC地址表使用show mac address-table interface gigabitEthernet 0/1查看該端口是否學(xué)習(xí)到了終端設(shè)備的MAC地址。如果沒(méi)學(xué)到可能是端口安全阻止或終端網(wǎng)卡故障。網(wǎng)絡(luò)層Layer 3癥狀跨VLAN不通或無(wú)法訪問(wèn)外網(wǎng)。排查IP配置確認(rèn)終端IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)配置正確。網(wǎng)關(guān)地址必須是核心交換機(jī)上對(duì)應(yīng)VLAN的SVI地址。路由表在核心交換機(jī)上使用show ip route確認(rèn)到各個(gè)VLAN直連網(wǎng)段標(biāo)記為C的路由都存在。SVI狀態(tài)使用show ip interface brief確認(rèn)所有VLAN的SVI接口狀態(tài)都是up/up。如果協(xié)議狀態(tài)down通常是因?yàn)樵揤LAN在交換機(jī)上沒(méi)有活動(dòng)的access端口或trunk端口。ACL攔截使用show access-lists查看配置的ACL是否有命中計(jì)數(shù)matches并使用show logging查看是否有被拒絕的日志確認(rèn)是否是安全策略阻止了通信。4.2 典型問(wèn)題場(chǎng)景與解決方案問(wèn)題現(xiàn)象可能原因排查命令與解決方案PC獲取不到IP地址1. DHCP服務(wù)器未配置或故障。2. 中繼DHCP Relay未配置或錯(cuò)誤。3. 端口VLAN與DHCP地址池不匹配。4. 防火墻攔截了DHCP報(bào)文。1.show ip dhcp pool查看狀態(tài)debug ip dhcp server packet謹(jǐn)慎使用查看報(bào)文。2. 若DHCP服務(wù)器在別的網(wǎng)段需在SVI接口下配置ip helper-address。3. 確認(rèn)PC所在VLAN的網(wǎng)關(guān)接口與DHCP地址池網(wǎng)絡(luò)匹配。4. 檢查ACL或防火墻規(guī)則是否允許UDP 67/68端口。跨VLAN Ping不通1. 核心交換機(jī)未啟用ip routing。2. 對(duì)端VLAN的SVI接口shutdown。3. 存在ACL禁止了ICMP協(xié)議。4. 終端防火墻如Windows防火墻阻止。1. show runTrunk鏈路不通1. 兩端端口模式不匹配一端trunk一端access。2. 兩端允許的VLAN列表不一致。3. 本征VLAN不匹配。1.show interfaces gig x/x switchport查看模式。2.show interfaces trunk對(duì)比Vlans allowed。3. 確保兩端Native VLAN相同通常建議設(shè)為不用的VLAN ID。網(wǎng)絡(luò)時(shí)斷時(shí)續(xù)1. 物理鏈路不穩(wěn)定劣質(zhì)網(wǎng)線、光衰過(guò)大。2. 網(wǎng)絡(luò)中存在環(huán)路生成樹(shù)在頻繁收斂。3. ARP表不穩(wěn)定或存在ARP欺騙。1. 查看端口錯(cuò)誤計(jì)數(shù)show interfaces gig x/x看input/output errors。2.show spanning-tree detail查看拓?fù)渥兓?jì)數(shù)topology changes是否激增。3. 在PC和交換機(jī)上查看ARP表使用arp -a或show arp看MAC地址是否頻繁變化。4.3 配置備份與版本管理心得網(wǎng)絡(luò)配置變更后備份是救命的稻草。我強(qiáng)烈建議養(yǎng)成以下習(xí)慣定期備份使用腳本通過(guò)SSH或TFTP自動(dòng)備份所有設(shè)備的配置文件到專用服務(wù)器。變更前備份每次進(jìn)行可能影響業(yè)務(wù)的變更前手動(dòng)執(zhí)行一次備份并備注變更原因。使用版本控制將配置文件納入Git等版本控制系統(tǒng)。這樣不僅能回溯歷史還能清晰對(duì)比每次的變更點(diǎn)。你可以寫一個(gè)簡(jiǎn)單的Python腳本用Paramiko庫(kù)登錄設(shè)備執(zhí)行show run將輸出保存并git commit。一個(gè)簡(jiǎn)單的思路是將網(wǎng)絡(luò)配置像代碼一樣管理起來(lái)這是走向自動(dòng)化運(yùn)維和“基礎(chǔ)設(shè)施即代碼”的第一步。當(dāng)網(wǎng)絡(luò)規(guī)模變大后你會(huì)感謝自己當(dāng)初這個(gè)決定。