iT邦幫忙

2026 iThome 鐵人賽

DAY 20
0
IT Operation

網路為什麼筆記本:從一個封包開始,把 Router、Switch 與 Routing 串起來系列 第 20 篇

Day 20|路由明明通了,為什麼封包還是過不去?ACL 在擋什麼?

  • 分享至 

  • xImage
  •  

Day 19 已經讓 Layer 3 Switch 可以做 Inter-VLAN Routing。

假設公司有三個 VLAN:

VLAN 10  STAFF   192.168.10.0/24
VLAN 20  GUEST   192.168.20.0/24
VLAN 30  SERVER  192.168.30.0/24

Layer 3 Switch 有三個 SVI:

Vlan10  192.168.10.1
Vlan20  192.168.20.1
Vlan30  192.168.30.1

開啟 ip routing 之後,三個網段都有 Route。

問題來了:

Guest VLAN 有 Route 到 Server VLAN,是不是就代表 Guest 一定能連 Server?

答案不是。

因為 Routing Table 決定怎麼走,ACL 決定准不准走。

Route 跟 ACL 差在哪?

Routing Table 回答:

目的地在哪裡?下一跳往哪裡?

ACL(Access Control List)回答:

這個封包符合規則嗎?Permit 還是 Deny?

所以:

有 Route
≠
一定能通

例如 Guest:

192.168.20.10

要連 Server:

192.168.30.10

Switch 的 Routing Table 知道 192.168.30.0/24 在 Vlan30,但 ACL 還是可以把這個封包丟掉。

ACL 最重要的兩個規則

1. 從上往下,第一個 Match 就停止

例如:

permit host 192.168.20.10
deny   192.168.20.0 0.0.0.255

192.168.20.10 先 Match 第一條,所以 Permit。

如果順序反過來:

deny   192.168.20.0 0.0.0.255
permit host 192.168.20.10

第一條就 Deny,第二條永遠不會執行。

所以 ACL 的順序本身就是邏輯。

2. 最後有 implicit deny

ACL 最後可以想像永遠藏著:

deny any

沒有 Match 到 Permit 的封包,最後就是被拒絕。

Standard ACL 與 Extended ACL

以前最容易直接背表格:

Standard ACL
→ Source IP

Extended ACL
→ Source IP
→ Destination IP
→ Protocol
→ Port

換成情境比較好懂。

Standard ACL

Standard ACL 主要只能判斷:

你從哪裡來?

例如:

deny 192.168.20.0 0.0.0.255

可以擋 Guest,但它不知道 Guest 是要去 Server 還是 Internet。

所以 Standard ACL 通常比較適合放靠近 Destination,避免太早把其他正常流量一起擋掉。

Extended ACL

Extended ACL 可以說得更精準:

誰,去誰那裡,用什麼 Protocol / Port?

例如需求:

Guest → Server
Deny

Guest → Internet
Permit

就可以寫:

ip access-list extended GUEST-IN
 deny ip 192.168.20.0 0.0.0.255 192.168.30.0 0.0.0.255
 permit ip any any

這也是為什麼 Extended ACL 通常可以放靠近 Source:既然已經知道哪些流量不准,就早點擋掉。

0.0.0.255 是什麼?

這不是 Subnet Mask,而是 Wildcard Mask。

/24:

Subnet Mask
255.255.255.0

Wildcard Mask
0.0.0.255

所以:

192.168.20.0 0.0.0.255

就是 Match 192.168.20.0/24。

先把它記成:

0   → 這個 bit 要比對
1   → 這個 bit 不在乎

0.0.0.255 只是最常見、最好看的例子。

ACL 寫好之後,還要掛到 Interface

只有:

ip access-list extended GUEST-IN
 ...

還不會影響任何流量。

還要套到 Interface:

interface vlan 20
 ip access-group GUEST-IN in

可以分成:

ip access-list
→ 定義規則

ip access-group
→ 套用規則

in / out 到底怎麼看?

方向永遠是站在設備與 Interface 的角度看。

Guest → Server:

Guest
  ↓
Vlan20
  ↓
Layer 3 Switch
  ↓
Vlan30
  ↓
Server

對 Vlan20:

封包進入 Switch
→ in

對 Vlan30:

封包離開 Switch
→ out

所以:

只問「這是 in 還是 out?」沒有意義,還要先問「哪一個 Interface?」

Packet Tracer 最小 Lab

延續 Day 19:

PC-GUEST
192.168.20.10/24
GW 192.168.20.1

SERVER
192.168.30.10/24
GW 192.168.30.1

先確認沒有 ACL 時:

PC-GUEST> ping 192.168.30.10

可以通。

接著建立 ACL:

enable
configure terminal

ip access-list extended GUEST-IN
 deny ip 192.168.20.0 0.0.0.255 192.168.30.0 0.0.0.255
 permit ip any any

套到 Vlan20 inbound:

interface vlan 20
 ip access-group GUEST-IN in

再測:

PC-GUEST> ping 192.168.30.10

預期被擋。

但 STAFF → SERVER 不會因為這張 ACL 被擋,因為 STAFF 的封包不是從 Vlan20 進來。

怎麼查?

看 ACL:

show ip access-lists

確認掛在哪:

show ip interface vlan 20

Troubleshooting 時我想固定照這個順序:

IP / Mask
↓
Default Gateway
↓
VLAN / SVI
↓
Routing Table
↓
ACL
↓
Interface
↓
in / out
↓
第一條 Match 的 Rule

不要看到 Ping 不通就直接刪 ACL。

最常踩的三個坑

1. permit any 放太前面

permit ip any any
deny ip 192.168.20.0 0.0.0.255 192.168.30.0 0.0.0.255

第一條已經 Match,後面的 Deny 永遠沒機會。

2. 忘記 implicit deny

只有 Deny 規則、不補其他需要的 Permit,可能把剩下流量一起擋掉。

3. ACL 掛錯 Interface / Direction

ACL 本身寫對,不代表封包真的會經過它。

一定要一起看:

ACL
+
Interface
+
Direction

如果今天只記得三件事

第一件:

Routing Table 決定怎麼走,ACL 決定准不准走。

第二件:

ACL 從上往下,第一個 Match 就停止;最後還有 implicit deny。

第三件:

Standard ACL
→ 主要看 Source

Extended ACL
→ Source + Destination + Protocol + Port

所以:

Guest → Server
Deny

Guest → Internet
Permit

這種需求,就比較適合 Extended ACL。


上一篇
Day 19|Layer 3 Switch 為什麼不用外接 Router,也能讓不同 VLAN 互通?SVI 到底是什麼?
下一篇
Day 21|ACL 都能擋流量了,為什麼還需要 Firewall?Stateful / Stateless 到底差在哪?
系列文
網路為什麼筆記本:從一個封包開始,把 Router、Switch 與 Routing 串起來 共 22 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言