VLAN間ルーティングを有効化すると、すべてのVLAN間で通信が可能になります。しかし、セキュリティやポリシー上の理由から特定VLAN間の通信を制限したいケースは多くあります。たとえば「業務用VLANからゲストVLANへのアクセスは禁止」「開発環境から本番環境への通信は遮断」といった要件です。
その際に活用できるのがACL(アクセス制御リスト)です。本記事では、ACLの種類・VLAN間制限の設定例・適用方向の考え方・確認方法・運用変更時の安全な手順まで、現場目線で解説します。
ゲスト用Wi-FiのVLANを新設した際、「ゲスト端末から社内業務サーバにアクセスできてはいけない」という要件がありました。VLAN間ルーティングはすでに有効な環境だったので、そのままでは完全に疎通が取れる状態でした。
拡張ACLをゲスト用VLANのSVIにin方向で適用したところ、ゲスト端末はインターネットにはアクセスできるが社内サーバには届かない状態を実現できました。ACLのルール順序を1つ間違えて全通信が止まるミスもしましたが、no ip access-groupでACLを一時的に外して復旧できました。ACL変更は業務時間外に実施することの大切さを実感した案件です。

ACLの種類と使い分け
Cisco IOSのACLには大きく2種類があります。VLAN間制御では拡張ACLを使います。
- 番号:1〜99、1300〜1999
- 送信元IPアドレスのみで制御
- 設定が簡単な反面、条件が粗い
- 宛先やポートを指定できないため、VLAN間制御には不向き
- 番号:100〜199、2000〜2699
- 送信元IP・宛先IP・プロトコル・ポート番号で制御
- VLAN間制御・特定サービス制限に最適
- 名前付きACLも使用可能(推奨)
設定例:VLAN 10からVLAN 20への通信を拒否
構成
| VLAN | ネットワーク | ゲートウェイ(SVI) | 用途 |
|---|---|---|---|
| VLAN 10 | 192.168.10.0/24 | 192.168.10.1 | 業務端末(制限元) |
| VLAN 20 | 192.168.20.0/24 | 192.168.20.1 | サーバ(アクセス禁止先) |
ACL作成と適用コマンド
Switch# configure terminal
! 名前付き拡張ACLを作成
Switch(config)# ip access-list extended VLAN10_TO_VLAN20_DENY
! VLAN 10 → VLAN 20 の全通信を拒否(sequence 10)
Switch(config-ext-nacl)# 10 deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255
! その他の通信はすべて許可(sequence 20)
Switch(config-ext-nacl)# 20 permit ip any any
Switch(config-ext-nacl)# exit
! VLAN 10のSVIにACLを適用(in方向:VLAN 10から来るトラフィックに適用)
Switch(config)# interface Vlan10
Switch(config-if)# ip access-group VLAN10_TO_VLAN20_DENY in
Switch(config-if)# exit
Switch(config)# end
Switch# copy running-config startup-configpermit ip any anyを書き忘れると、拒否したいVLAN 20以外へのすべての通信(インターネット含む)も遮断されます。必ずdenyルールの後にpermit ip any anyを追記してください。特定ポートのみ拒否する例(応用)
拡張ACLを使えばポートレベルの細かい制御も可能です。「RDP(3389番)のみ拒否」「HTTPSは許可してHTTPは拒否」などの設定ができます。
! 例:VLAN 10からVLAN 20へのRDP(TCP 3389)のみ拒否、その他は許可
ip access-list extended VLAN10_RESTRICT
10 deny tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 3389
20 permit ip any any
! 例:VLAN 10からVLAN 20へのHTTP(TCP 80)を拒否、HTTPS(443)は許可
ip access-list extended VLAN10_HTTP_DENY
10 deny tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 80
20 permit ip any anyACL適用の方向(in/out)
ACLをSVIに適用する際、inかoutかの選択は重要です。
- そのインターフェースに入ってくるトラフィックに適用
- 送信元VLANのSVIに設定することで、そのVLANからのトラフィックだけを制御
- 影響範囲が明確で管理しやすい
- VLAN間制限では基本的にinを使う
- そのインターフェースから出ていくトラフィックに適用
- 宛先VLANのSVIに設定することで、そのVLANに向かうトラフィックを制御
- 複数の送信元VLANをまとめて制御したい場合に有効
- inとoutの両方を同時に適用することも可能(1方向に1ACLまで)
確認コマンド
! ACLの内容とヒットカウントの確認
Switch# show access-lists VLAN10_TO_VLAN20_DENY
! SVIへのACL適用状況の確認
Switch# show ip interface Vlan10
! 全ACLの確認
Switch# show ip access-lists(show access-listsの出力例)
Extended IP access list VLAN10_TO_VLAN20_DENY
10 deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 (15 matches)
20 permit ip any any (238 matches)
! 「matches」の数でトラフィックがヒットしているか確認できる
! 拒否ルールのmatchesが増えていれば、ACLが正しく機能している証拠| 確認コマンド | 確認できること |
|---|---|
| show access-lists [ACL名] | ACLのルール内容・ヒットカウント(matchesの数) |
| show ip interface Vlan10 | そのSVIにin/outどのACLが適用されているか |
| show running-config | section access-list | 設定済みのACL一覧を確認 |
動作検証
ACL設定後は以下の手順で正しく機能しているか確認します。
| テスト内容 | 期待される結果 | 確認方法 |
|---|---|---|
| VLAN 10 → VLAN 20へping | 通らない(拒否) | pingが全パケットロス。show access-listsのdenyのhit数が増加 |
| VLAN 10 → インターネット(8.8.8.8)へping | 通る(許可) | permit ip any anyが機能。pingが成功する |
| VLAN 10 → VLAN 30(他VLAN)へping | 通る(許可) | VLAN 20以外はpermit ip any anyで許可される |
| VLAN 20 → VLAN 10へping | 通る(許可) | ACLはVlan10のin方向のみ。逆方向(VLAN 20→10)は制限されない |
ACL変更時の安全な手順
適用中のACLを変更する際は、設定ミスによる通信断リスクを最小化する手順が重要です。
方法1:インターフェースからACLを外して変更する(推奨)
! ① インターフェースからACLを解除(この間は全通信が通る状態になる)
Switch(config)# interface Vlan10
Switch(config-if)# no ip access-group VLAN10_TO_VLAN20_DENY in
Switch(config-if)# exit
! ② ACLを修正
Switch(config)# ip access-list extended VLAN10_TO_VLAN20_DENY
Switch(config-ext-nacl)# no 10 ← 既存のsequence 10を削除
Switch(config-ext-nacl)# 10 deny tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 80
Switch(config-ext-nacl)# exit
! ③ 修正したACLを再適用
Switch(config)# interface Vlan10
Switch(config-if)# ip access-group VLAN10_TO_VLAN20_DENY in方法2:sequence番号を使って特定ルールだけ変更する
名前付きACLではsequence番号を使って特定の行だけ削除・追加できます。インターフェースからACLを外さずに変更できるため、影響を最小化できます。
! 現在のACL(sequence 10のdenyルールを変更したい)
Switch# show access-lists VLAN10_TO_VLAN20_DENY
Extended IP access list VLAN10_TO_VLAN20_DENY
10 deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255
20 permit ip any any
! sequence 10を削除して新しいルールを挿入
Switch(config)# ip access-list extended VLAN10_TO_VLAN20_DENY
Switch(config-ext-nacl)# no 10
Switch(config-ext-nacl)# 10 deny tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 3389
Switch(config-ext-nacl)# exit運用上の注意点まとめ
| 注意点 | 内容 |
|---|---|
| ルールの順序が重要 | ACLは上から順に評価される。許可したい通信はdenyルールより上に記述する |
| 1方向に適用できるACLは1つまで | 同じインターフェースの同じ方向(in or out)に適用できるACLは1つのみ |
| 暗黙のdenyを意識する | ACLの末尾にはpermit ip any anyを必ず書く。書き忘れると全通信が止まる |
| ACL削除はIF解除が先 | インターフェースに適用中のACLをそのまま削除しようとしてもエラーになる場合がある。no ip access-groupで解除してから削除する |
| 変更は業務時間外に | ACL変更中の設定ミスは即座に通信断につながる。メンテナンス時間帯に実施し、変更後すぐに疎通確認を行う |
まとめ
ACLを使えば、VLAN間ルーティングを有効にしつつも不要な通信を柔軟に遮断できます。
- VLAN間制御には拡張ACL(Extended ACL)を使う。名前付きで作ると管理しやすい
- ACLの末尾には必ず
permit ip any anyを入れる。忘れると全通信が止まる - 基本は送信元VLANのSVIに
in方向で適用。双方向制限は各SVIにACLを設定する - 同一方向に適用できるACLは1つのみ
- 変更時は
no ip access-groupでいったん外してから変更するか、sequence番号で特定行を変更する show access-listsのhit数とpingテストで動作を確認する
適用方向とルール順序を意識した設計で、安全なVLAN間アクセス制御を実現しましょう。



