「這兩台電腦明明都接在同一台 Switch,為什麼不能互相 Ping?」
第一次碰到這種狀況時,很容易懷疑:
但檢查後卻發現:
真正的原因可能很單純:
它們被放在不同 VLAN。
這就是企業網路很常見的情況——兩台設備在實體上距離很近,甚至插在相鄰 Port,邏輯上卻可能像住在兩座不同城市。
要互相通訊,還得經過 Layer 3 Routing。
在沒有 VLAN 的簡單 Layer 2 網路中,同一台 Switch 上的裝置通常位於相同 Broadcast Domain。
當某台電腦送出 Broadcast Frame,例如 ARP Request:
誰是
192.168.1.50?
Switch 會將這個 Frame Flood 到同一 VLAN 中除了來源 Port 以外的其他相關 Port。
同一個 Broadcast Domain 裡的設備都可能收到。
如果公司只有幾台設備,這種設計可能還能運作;但當規模變大,所有裝置都擠在同一個 Broadcast Domain,問題就會逐漸出現:
因此,企業通常會透過 VLAN 將一個大型 Layer 2 網路拆成多個較小的 Broadcast Domain。
VLAN 全名是:
Virtual Local Area Network
它能將同一台實體 Switch,切分成多個彼此隔離的邏輯網路。
例如一台 48 Port Switch 可以這樣分配:
VLAN 10:IT 部門
VLAN 20:一般辦公區
VLAN 30:產線設備
VLAN 40:IP Phone
VLAN 50:Server
VLAN 60:印表機
VLAN 100:訪客 Wi-Fi
即使這些設備都連到同一台 Switch,不同 VLAN 的 Broadcast 仍不會直接互相傳遞。
可以把它理解成:
一棟實體大樓,被切成多個不同門禁區域。
大家確實住在同一棟樓,但不是看到隔壁有扇門,就能直接走進去。
不同 VLAN 的 Broadcast 不會彼此直接傳遞。
VLAN 20 的 ARP Request 不會被 Flood 到 VLAN 30,能降低不必要的 Broadcast 影響。
企業可以將不同安全等級的設備分開,例如:
不同 VLAN 可以設定不同的:
如果某個 VLAN 發生 Broadcast Storm,理論上影響會先限制在該 Broadcast Domain,而不是直接擴散到所有設備。
不過,如果 Loop 發生在 Trunk 或核心位置,事情還是可能迅速變得很熱鬧,所以不能把 VLAN 當成防止一切事故的結界。
一般企業設計中,通常會讓一個 VLAN 對應一個 IP Subnet。
例如:
| VLAN | 用途 | Subnet | Gateway |
|---|---|---|---|
| 10 | IT | 10.10.10.0/24 |
10.10.10.1 |
| 20 | Office | 10.10.20.0/24 |
10.10.20.1 |
| 30 | Production | 10.10.30.0/24 |
10.10.30.1 |
| 50 | Server | 10.10.50.0/24 |
10.10.50.1 |
| 60 | Printer | 10.10.60.0/24 |
10.10.60.1 |
如此可以讓 VLAN 與 Layer 3 網路邊界一致,管理與排錯比較直觀。
但要注意:
VLAN 和 Subnet 是不同層的概念。
只是實務上經常一對一搭配。
技術上可以在同一 VLAN 放入多個 Subnet,也可以透過特殊設計讓相同 Subnet 出現在不同位置,但這些做法通常會增加複雜度。
對一般企業網路而言,一個 VLAN 對應一個 Subnet,會比較容易維護。
假設:
PC-A:10.10.20.10/24
PC-B:10.10.20.20/24
兩者都在 VLAN 20。
PC-A 判斷 PC-B 位於同一網段,因此會先發送 ARP Request:
誰是 10.10.20.20?
Switch 收到後,會在 VLAN 20 內 Flood。
PC-B 回覆自己的 MAC Address,接著 PC-A 就能直接建立 Ethernet Frame 傳送給 PC-B。
這段通訊:
當然,端點防火牆仍可能阻擋 Ping 或其他服務。
因此,兩台同 VLAN 設備 Ping 不通,不代表 VLAN 一定有問題,還需要區分:
假設:
PC-A:10.10.20.10/24,VLAN 20
PC-B:10.10.30.20/24,VLAN 30
PC-A 判斷 PC-B 位於不同網段,因此會把封包交給:
10.10.20.1
也就是 VLAN 20 的 Default Gateway。
接下來需要由 Layer 3 裝置將封包路由到 VLAN 30。
如果網路中沒有:
兩個 VLAN 就不會互通。
即使存在 Layer 3 Routing,仍可能被以下機制阻擋:
所以不同 VLAN 無法 Ping,不一定是故障。
它可能本來就是安全設計。
例如訪客 Wi-Fi 無法存取 Server VLAN,通常是值得慶幸的事情,而不是要立刻修掉的問題。
Access Port 通常只屬於一個 VLAN,主要連接一般終端設備,例如:
Cisco 常見設定概念如下:
interface GigabitEthernet1/0/10
switchport mode access
switchport access vlan 20
代表連到這個 Port 的終端,會被放入 VLAN 20。
終端通常不需要知道 VLAN 20 的存在。
它送出的 Ethernet Frame 沒有 802.1Q Tag,Switch 收到後會根據 Access Port 設定,將它歸類到 VLAN 20。
Switch 從 Access Port 送出資料給終端時,也通常會移除 VLAN Tag。
對使用者電腦而言,它只覺得自己接上一條普通網路線。
背後 VLAN 怎麼切,它完全不需要操心,這部分交給IT操心就好。
Trunk Port 可以承載多個 VLAN,常用於:
Trunk 通常透過 IEEE 802.1Q Tag,標示每個 Frame 屬於哪個 VLAN。
例如一條 Switch 上聯需要承載:
VLAN 10
VLAN 20
VLAN 30
VLAN 50
若只有實體線路卻沒有 VLAN Tag,對端設備就無法知道每個 Frame 原本來自哪個 VLAN。
Access 與 Trunk 的完整差異會放在下一篇詳細討論。
目前先記住:
Switch 會根據收到 Frame 的 Source MAC 學習 MAC Address Table。
例如 Switch 從:
Gi1/0/10
收到來源 MAC:
AAAA.BBBB.CCCC
而該 Port 位於 VLAN 20,Switch 就會建立:
VLAN 20
AAAA.BBBB.CCCC
→ Gi1/0/10
Cisco 可使用類似指令查看:
show mac address-table
或指定 VLAN:
show mac address-table vlan 20
可能看到:
Vlan Mac Address Type Ports
20 aaaa.bbbb.cccc DYNAMIC Gi1/0/10
之後若目的 MAC 是 AAAA.BBBB.CCCC,Switch 就知道要從 Gi1/0/10 送出。
同一個 MAC Address 的學習資訊會包含 VLAN。
這是很重要的觀念。
Switch 不是只記:
MAC → Port
而是更接近:
VLAN + MAC → Port
因此,VLAN 20 的 Broadcast、Unknown Unicast 與 MAC Learning 都限制在 VLAN 20 的 Layer 2 範圍內。
不同 VLAN 即使經過同一台 Switch,也不會直接共享同一個 Broadcast Domain。
如果 Switch 不知道 Destination MAC 在哪裡,會在同一 VLAN 內 Flood 該 Frame。
例如 VLAN 20 的 Frame 目的 MAC 尚未出現在 MAC Table,Switch 會送到:
但不會送進 VLAN 30 的 Access Port。
當目的設備回覆後,Switch 就能學習它的 Source MAC,後續便可精確轉送。
這再次說明,VLAN 決定 Layer 2 Flooding 的範圍。
Broadcast MAC 為:
FF:FF:FF:FF:FF:FF
Switch 收到 Broadcast 後,會在同一 VLAN 內 Flood。
常見 Broadcast 包括:
但不會直接跨到其他 VLAN。
這就是為什麼不同 VLAN 的 Client 無法直接收到彼此的 ARP,也為什麼 DHCP Server 位於其他網段時需要 DHCP Relay。
Router 或 Layer 3 Switch 不會普通地轉送 Layer 2 Broadcast。
不然公司每個 VLAN 的廣播都混在一起,切 VLAN 就切了個寂寞。
假設某位員工應該位於 VLAN 20,但他的 Switch Port 被設為 VLAN 30。
可能出現:
10.10.30.1
如果 VLAN 30 沒有 DHCP,則可能直接拿到:
169.254.x.x
使用者只會說:
換了座位後就不能上網。
這時不要只看 Client 設定,還要查實際 Switch Port 的 Access VLAN。
Cisco 常見指令包括:
show interfaces status
可能顯示:
Port Status Vlan
Gi1/0/10 connected 20
也可以查看介面設定:
show interfaces GigabitEthernet1/0/10 switchport
重點可能包括:
或查看 Running Configuration:
show running-config interface GigabitEthernet1/0/10
不要只看設定裡有:
switchport access vlan 20
還要確認介面實際運作模式是不是 Access。
如果介面被設為 Trunk,Access VLAN 那行不一定會以你預期的方式運作。
這兩個名稱很容易被混在一起。
用於 Access Port,將未標記的終端流量歸入指定 VLAN。
用於 802.1Q Trunk,通常處理 Trunk 上未標記的 Frame。
兩端 Native VLAN 不一致,可能造成:
所以看到 VLAN 20,不只要問「是 Access VLAN 還是 Native VLAN」,不能把所有 VLAN 欄位當成同一件事。
企業常見接法是:
Switch
→ IP Phone
→ PC
同一個實體 Switch Port 上,可能同時承載:
例如:
Data VLAN:20
Voice VLAN:40
概念設定:
interface GigabitEthernet1/0/10
switchport mode access
switchport access vlan 20
switchport voice vlan 40
電腦流量通常進入 Data VLAN,IP Phone 則透過 VLAN Tag 使用 Voice VLAN。
這樣可以:
因此,看到一個 Access Port 不一定代表它只能處理一種終端流量。
企業網路永遠很擅長在一句簡單定義後面補上一排例外。
VLAN 能將設備分成不同 Layer 2 Broadcast Domain,但它本身不會自動決定跨 VLAN 流量是否允許。
例如:
VLAN 20:Office
VLAN 50:Server
如果 Layer 3 Switch 對兩個網段進行 Routing,且沒有 ACL,Office Client 可能仍可存取 Server VLAN。
所以:
把印表機放到 Printer VLAN,只是完成隔離的第一步。
如果所有 Client VLAN 都可以無限制存取它,安全效果仍然有限。
兩台設備確認位於同 VLAN,卻仍不能互通時,可以依序檢查。
假設:
PC-A:10.10.20.10/24
PC-B:10.10.20.20/16
兩台對本地網段的判斷可能不一致。
雖然這個例子部分流量仍可能碰巧成功,但不一致的 Mask 會讓其他目的地出現奇怪行為。
先確認 IP、Mask 與是否重複。
查看是否能解析對方 MAC。
Windows:
arp -a
Linux:
ip neigh
如果狀態為 Incomplete,代表 ARP Request 沒得到回覆。
可能原因:
檢查兩台設備的 MAC 是否都出現在預期 VLAN 與 Port。
如果其中一台 MAC 完全學不到:
如果 MAC 出現在不預期的 Port:
Windows Firewall 可能阻擋 ICMP Echo Request。
因此,兩台設備 Ping 不通,不代表 Layer 2 不通。
可以改測實際需要的服務,例如:
也可以查看 ARP 是否已成功解析。
若 ARP 正常、指定 TCP Port 可以連,只是 Ping 失敗,問題可能只是 ICMP Policy。
不要為了讓 Ping 變綠,就把整個防火牆永久關閉。
某些 Switch、AP 或無線網路會啟用 Client Isolation。
即使 Client 位於同 VLAN,也不允許它們彼此直接通訊。
這常用於:
因此,訪客 Wi-Fi 裡兩台裝置不能互 Ping,可能是正確安全設計。
Private VLAN 能在同一 IP Subnet 內,進一步限制 Layer 2 通訊。
常見角色包括:
Isolated Port 之間不能互通,但可以和 Promiscuous Port 通訊,例如前往 Gateway。
因此可能出現:
如果不知道環境使用 Private VLAN,很容易誤判成 Switch 故障。
如果同一個 MAC Address 在不同 Port 間反覆出現,Switch 可能產生 MAC Flapping Log。
例如:
MAC aaaa.bbbb.cccc moving between Gi1/0/10 and Gi1/0/20
可能原因包括:
如果大量 MAC 同時在上聯間跳動,尤其伴隨 Broadcast 增加與網路不穩,就要警覺 Loop。
若只有單一無線 Client 在兩個 AP 路徑間短暫移動,也可能只是正常漫遊。
Log 是線索,仍要結合拓撲與時間判斷。
Cisco Switch 預設通常會有 VLAN 1,許多 Port 也可能一開始位於 VLAN 1。
新手測試時常覺得:
先插著,反正有通就好。
問題是,過度依賴預設 VLAN 可能造成:
企業環境通常會依規範:
實際作法仍要依公司架構與政策,不能只因為網路文章說 VLAN 1 很危險,就隔天直接把整間公司改掉。
那不是改善,是替明天的自己安排重大事故。
至少可以維護以下資訊:
| VLAN ID | 名稱 | Subnet | Gateway | DHCP | 用途 |
|---|---|---|---|---|---|
| 10 | IT-MGMT | 10.10.10.0/24 |
10.10.10.1 |
Yes | IT 管理 |
| 20 | OFFICE | 10.10.20.0/24 |
10.10.20.1 |
Yes | 辦公設備 |
| 30 | PROD | 10.10.30.0/24 |
10.10.30.1 |
Yes | 產線 |
| 50 | SERVER | 10.10.50.0/24 |
10.10.50.1 |
No | 伺服器 |
| 60 | PRINTER | 10.10.60.0/24 |
10.10.60.1 |
Mixed | 印表機 |
| 100 | GUEST | 10.10.100.0/24 |
10.10.100.1 |
Yes | 訪客 |
還可以記錄:
沒有文件時,新人看到 VLAN 137,通常只能靠名稱猜用途。
如果 VLAN 名稱又剛好叫 TEST2_NEW_FINAL,那就不是排錯,是考古。
假設:
PC-A:10.10.20.35/24
PC-B:10.10.30.40/24
Printer:10.10.20.50/24
三台設備都接在同一台 Switch。
現象:
原因是:
從使用者角度看,兩台電腦明明坐在隔壁;從網路角度看,它們位於不同 Broadcast Domain,走的路也不相同。
這時解法不是把 PC-B 改到 VLAN 20。
應先確認業務需求與安全政策,再決定是否:
為了讓一台印表機能用,就把不同部門全部塞進同一 VLAN,確實很省規則,但也順便省掉了隔離。
遇到「同一台 Switch,設備卻不能互通」時,可以依序檢查。
先問:
不要把正常隔離當成故障修掉。
查看:
查看:
確認:
若兩端應位於同 VLAN:
不要只測 Ping,應測試實際需要的服務。
確認:
確認:
VLAN 能將一台實體 Switch 切分成多個邏輯 Broadcast Domain。
因此:
排錯時,不要只問:
這兩台設備是不是接在同一台 Switch?
還要問:
它們分別在哪個 VLAN?使用哪個 Subnet?原本是否允許互通?
實體位置只能告訴我們設備離得近不近,不能決定它們在邏輯網路上是不是鄰居。