ACLを書こうとした瞬間、あの「0.0.0.255」という謎の数字が出てくる。OSPFのnetworkコマンドでも同じ。サブネットマスクに慣れていると、これがけっこうな違和感なんですよね。自分もCCNAを受けた当時、ワイルドカードマスクで何度もケアレスミスをやらかしました。
この記事では、ワイルドカードマスクの計算方法と、ACL・OSPFでの実際の書き方をまとめます。暗算で解くテクニックと、試験でよく狙われる「連続じゃないIP範囲」のパターンも現場で使っているやり方で解説。読み終わった頃には、ワイルドカードマスクを見ても3秒で計算できる状態になっているはずです。
ワイルドカードマスクの基本
ワイルドカードマスクは、IPアドレスのうち「どのビットを見るか、どのビットを無視するか」を指定するための32ビットの値です。ざっくり言えば、サブネットマスクの逆。0のビットは「一致必須」、1のビットは「何でもOK」を意味します。
Ciscoの公式ドキュメントでもこう定義されていて、ACLやOSPFのnetworkコマンド、EIGRPのnetworkコマンドなど、Ciscoの色々なところで出てきます。ぶっちゃけサブネットマスクと似た形式で書かれているのに意味が逆だから、試験でも現場でも混同する人が後を絶たない。
ワイルドカードマスクの「0=一致」「1=無視」という仕様はRFCで標準化されたものではなく、Cisco独自の記法です。JuniperやFortiGateではまた別の書き方をするので、マルチベンダー環境だとこれが地味に混乱の種になります。
| 項目 | サブネットマスク | ワイルドカードマスク |
|---|---|---|
| 0の意味 | ホスト部 | 一致必須(チェック対象) |
| 1の意味 | ネットワーク部 | 無視(何でもOK) |
| ビット配置 | 先頭から連続で1 | 不連続でもOK |
| 代表例(/24) | 255.255.255.0 | 0.0.0.255 |
| 主な用途 | IPアドレス設計 | ACL、OSPF/EIGRPのnetwork |
以前、客先でACLを書いていて「10.0.0.0 255.255.255.0」と無意識でサブネットマスクを書いてしまい、意図しないレンジをブロックしてしまったことがあります。深夜のメンテ中で、疎通が落ちた瞬間に一気に目が覚めた記憶があります。Ciscoのルーターは(一部を除き)サブネットマスクを書いてもエラーを返さないので、本当に厄介。show access-listで展開して必ず確認するクセが付きました。
計算方法
計算方法は2パターン。基本は「255からの引き算」で、これで9割の問題は解けます。ただ、2進数で考える方法も頭に入れておくと、不連続ビットの問題に出会ったとき一気に有利になります。
サブネットマスクの各オクテットを、255から引くだけ。暗算でもいけるレベル。
サブネットマスク 255.255.255.0
↓ 255から引き算
ワイルドカード 0. 0. 0.255
サブネットマスク 255.255.240.0 (/20)
↓
ワイルドカード 0. 0. 15.255
255-255=0、255-240=15、255-0=255。この3パターンが頭に入っていればOK。/20の240はCCNAで本当によく出るやつです。
サブネットマスクを2進数で書いて、0と1を全部ひっくり返すだけ。不連続ビットの問題を解くときはこっちが早い。
255.255.255.0
= 11111111.11111111.11111111.00000000
↓ 全ビット反転
= 00000000.00000000.00000000.11111111
= 0.0.0.255
| プレフィックス | サブネットマスク | ワイルドカード |
|---|---|---|
| /24 | 255.255.255.0 | 0.0.0.255 |
| /25 | 255.255.255.128 | 0.0.0.127 |
| /26 | 255.255.255.192 | 0.0.0.63 |
| /27 | 255.255.255.224 | 0.0.0.31 |
| /28 | 255.255.255.240 | 0.0.0.15 |
| /30 | 255.255.255.252 | 0.0.0.3 |
| /16 | 255.255.0.0 | 0.0.255.255 |
| host指定 | 255.255.255.255 | 0.0.0.0 |
| any指定 | 0.0.0.0 | 255.255.255.255 |
図1: 計算方法ごとの習得スピード体感比較
92%
78%
55%
35%
個人的には、最初は255引き算法だけで押し通して、余裕が出てきたら2進数法を覚える順番がおすすめ。全部同時に覚えようとすると頭がパンクします。
ACLでの書き方
ACLにはstandard(1-99、1300-1999)とextended(100-199、2000-2699)があって、どちらでもワイルドカードマスクを書く場面が出てきます。standardは送信元IPのみ、extendedは送信元・宛先・プロトコル・ポートまで指定できる。で、この「IPの指定」のところでワイルドカードマスクが登場します。
Router(config)# access-list 10 permit 192.168.1.0 0.0.0.255
Router(config)# access-list 10 deny any
Router(config)# interface GigabitEthernet0/0
Router(config-if)# ip access-group 10 in
! 確認
Router# show access-lists 10
Standard IP access list 10
10 permit 192.168.1.0, wildcard bits 0.0.0.255
20 deny any
! 192.168.1.0/24 → 10.0.0.0/8 のHTTPを許可 Router(config)# ip access-list extended WEB-ACL Router(config-ext-nacl)# permit tcp 192.168.1.0 0.0.0.255 10.0.0.0 0.255.255.255 eq 80 Router(config-ext-nacl)# deny ip any any log Router(config-ext-nacl)# exit Router(config)# interface GigabitEthernet0/1 Router(config-if)# ip access-group WEB-ACL in
! 長い書き方 access-list 20 permit 192.168.1.10 0.0.0.0 ! 短縮形(同じ意味) access-list 20 permit host 192.168.1.10 ! 全許可の短縮形 access-list 30 permit 0.0.0.0 255.255.255.255 access-list 30 permit any
ACLは暗黙のdeny anyが末尾に入ります。permit文を1つも書かずにdenyだけ並べると、全通信が落ちます。試験でも現場でも、permitを必ず1行は入れること。あと、既存のnumbered ACLに行を追加したつもりが「一番下」に追加されて、暗黙のdenyの上には来てもpermitより下に来てしまうパターンも要注意。順序が大事です。
OSPFでの書き方
OSPFのnetworkコマンドは「OSPFを有効にするインターフェースを指定する」ためのもの。IPアドレスとワイルドカードマスクを書くと、そのレンジにマッチするインターフェースでOSPFが動き出します。
Router(config)# router ospf 1 ! 192.168.1.0/24 のインターフェースをarea 0で有効化 Router(config-router)# network 192.168.1.0 0.0.0.255 area 0 ! 10.0.0.0/8 全体を有効化 Router(config-router)# network 10.0.0.0 0.255.255.255 area 0 ! 特定インターフェース1つだけを有効化 Router(config-router)# network 192.168.1.1 0.0.0.0 area 0
最後の「network 192.168.1.1 0.0.0.0 area 0」のように0.0.0.0(完全一致)を指定すれば、インターフェース単位でピンポイントにOSPFを有効化できます。現場ではこのやり方が一番安全。間違って余計なインターフェースでOSPFが動いて、意図しないアドバタイズが始まる事故を防げる。個人的にはこっちの書き方を使うことが多いです。
CCNA試験での出題パターン
「192.168.0.0/24から192.168.3.0/24までをACLで1行で書け」みたいな問題。4つのサブネットを合わせると/22になるので、ワイルドカードマスクは0.0.3.255。
192.168.0.0/24 ┐ 192.168.1.0/24 │ 4つまとめて /22 = 0.0.3.255 192.168.2.0/24 │ 192.168.3.0/24 ┘ access-list 10 permit 192.168.0.0 0.0.3.255
これが意地悪な問題の代表格。「192.168.1.0/24の偶数IPだけ許可するACLを書け」というやつ。2進数で考えないと解けない。
偶数IPの特徴: 最終オクテットの最下位ビットが0 例: .0=00000000 .2=00000010 .4=00000100 .6=00000110 ワイルドカードマスク = 11111110 = 254 → 最下位ビットだけ「一致必須」、それ以外は無視 access-list 10 permit 192.168.1.0 0.0.0.254
奇数IPなら開始アドレスを.1にして、ワイルドカードは同じ0.0.0.254。この不連続ビットのパターンは、連続マスクしか使わないサブネットマスクでは絶対に表現できません。ワイルドカードマスクならではの芸当。
試験では「ワイルドカードマスク+1=ブロックサイズ」を覚えておくと速い。例えば0.0.0.31なら31+1=32なので32個単位のブロック、開始は32の倍数になります。
| ワイルドカード | ブロックサイズ | 開始IPの条件 |
|---|---|---|
| 0.0.0.3 | 4(/30相当) | 4の倍数 |
| 0.0.0.7 | 8(/29相当) | 8の倍数 |
| 0.0.0.15 | 16(/28相当) | 16の倍数 |
| 0.0.0.31 | 32(/27相当) | 32の倍数 |
| 0.0.0.63 | 64(/26相当) | 64の倍数 |
| 0.0.3.255 | 1024(/22相当) | 第3オクテットが4の倍数 |
よくあるミス
| ミス内容 | 結果 | 対処法 |
|---|---|---|
| サブネットマスクを書いた | 意図しないIPまでマッチ | show access-listsで展開確認 |
| 開始IPがブロック境界でない | 範囲がズレる | ブロックサイズの倍数から開始 |
| 末尾の暗黙deny忘れ | 通したい通信が落ちる | permit anyを明示的に書く |
| in/outの向き間違い | 全く効かない | トラフィック方向を図で確認 |
| OSPFのnetworkが広すぎる | 意図せずOSPF動作 | 0.0.0.0でインターフェース指定 |
ACLをリモートアクセス中のインターフェースに適用するのは絶対NG。接続が切れて、シリアルコンソールまで行かないと復旧できません。自分は一度やらかして、片道2時間の客先にとんぼ返りした過去があります。ACLを入れる時は、できる限りreload in 10を仕込んでからadminとして試すのが鉄則。
まとめ
ワイルドカードマスクは「0=一致、1=無視」のCisco独自表記。サブネットマスクを255から引けば9割OK、奇数・偶数指定など不連続パターンだけ2進数で考える。ACLとOSPFで使う場所は同じ書式。show access-listsで展開結果を必ず確認するクセを付けておくと、深夜の事故を1つ減らせます。
よくある質問(FAQ)
Q. ワイルドカードマスクは必ず連続ビットじゃないとダメ?
不連続でOKです。これはサブネットマスクとの決定的な違い。例えば0.0.0.254のように、最下位ビットだけ0にして残りを1にする書き方も有効。偶数IPだけマッチ、みたいなことができます。
Q. サブネットマスクをワイルドカードマスクの代わりに書いたらエラーになりますか?
Cisco IOSの多くのバージョンでエラーにならず受け付けてしまいます。ここが一番の罠。設定は通るけど意図と違うレンジがマッチするので、必ずshow access-listsで展開結果を確認してください。
Q. OSPFで「network 0.0.0.0 255.255.255.255 area 0」と書くとどうなる?
全インターフェースがarea 0でOSPF有効化されます。ラボ環境なら楽だけど、本番ではまず使わない。意図しないインターフェースにHelloが流れて、セキュリティ的にもよろしくないので、基本はインターフェース単位で指定するのが定石。
Q. CCNA試験ではワイルドカードマスクの計算問題、何問くらい出る?
直接的な計算問題は2〜3問、間接的にACLやOSPFの設定例の中で出てくるものを含めると5問前後、という印象です。配点比率は決して低くないので、早見表を叩き込んでおく価値は充分あります。


