はじめに
CCNA(ネットワーク試験)対策をしている際に、
ワイルドカードマスクに悩まされたので書きたいと思う。
※ 私が知っている範囲で書きます。間違っている場合は、修正かけてください。
ワイルドカードマスクとは?
① PATやACLなどで、IPアドレスの範囲を指定する際に使用するもの。
② IPアドレスの何ビット目を確認対象にするか指定するもの。
③ 0は、指定したIPアドレスのビットをチェックする。
④ 1は、指定したIPアドレスのビットをチェックしない。
⑤ サブネットマスクとは、違う。
--> IPアドレスを、ネットワーク部分とホスト部分に識別するための数値
IPアドレス範囲をワイルドカードマスクで表現
(ip=IPアドレス / wc=ワイルドカード)
[題-1] 172.16.1.0/16 ~ 172.16.1.63/16のIPアドレス範囲
① IPアドレスを2進数表記に変える
「10101100 00010000 00000001 00|000000」 <-- 「172.16.1.0」
「10101100 00010000 00000001 00|111111」 <-- 「172.16.1.63」
--> 第4オクテットの上位2ビット目まで同じ値
--> 第4オクテットの上位2ビットまでをチェックし、それ以降はチェックしなければ範囲指定可能
② 使用するワイルドカードマスクを2進数で表現
「00000000 00000000 00000000 00|111111」 <-- 「0.0.0.63」
※ 0:チェックする / 1:チェックしない
③ 結果
172.16.1.0(ip) 0.0.0.63(wc)
--備考--
引き算でも導ける: 172.16.1.0 ー 172.16.1.63 =0.0.0.63
[題-2] 172.16.80.0/16 ~ 172.16.83.255/16のIPアドレス範囲
① IPアドレスを2進数表記に変える
「10101100 00010000 010100|00 00000000」 <-- 「172.16.80.0」
「10101100 00010000 010100|11 11111111」 <-- 「172.16.83.255」
--> 第3オクテットの上位6ビット目まで同じ値
--> 第3オクテットの上位6ビットまでをチェックし、それ以降はチェックしなければ範囲指定可能
② 使用するワイルドカードマスクを2進数で表現
「00000000 00000000 000000|11 11111111」 <-- 「0.0.3.255」
※ 0:チェックする / 1:チェックしない
③ 結果
172.16.80.0(ip) 0.0.3.255(wc)
--備考--
引き算でも導ける: 172.16.80.0 ー 172.16.83.255 =0.0.3.255
※ -255のマイナスは外す
[題-3] 192.168.192.0/24 ~ 192.168.223.0/24のネットワーク範囲
① IPアドレスを2進数表記に変える
「11000000 10101000 110|00000 00000000」 <-- 「192.168.192.0」
「11000000 10101000 110|11111 00000000」 <-- 「192.168.223.0」
--> 第3オクテットの上位3ビット目まで同じ値
--> 第3オクテットの上位3ビットまでをチェックし、それ以降はチェックしなければ範囲指定可能
② 使用するワイルドカードマスクを2進数で表現
「00000000 00000000 000|11111 11111111」 <-- 「0.0.31.255」
※ 0:チェックする / 1:チェックしない
③ 結果
192.168.192.0(ip) 0.0.31.255(wc)
--備考--
192.168.192.0/24 のネットワーク範囲:192.168.192.0 ~ 192.168.192.255
↕ネットワーク間 のネットワーク範囲:192.168.193.0 ~ 192.168.222.255
192.168.223.0/24 のネットワーク範囲:192.168.223.0 ~ 192.168.223.255
[注-1] 192.168.1.4/24 ~ 192.168.1.63/24のIPアドレス範囲
① IPアドレスを2進数表記に変える
「11000000 10101000 00000001 00|000100」 <-- 「192.168.1.4」
「11000000 10101000 00000001 00|111111」 <-- 「192.168.1.63」
--> 第4オクテットの上位2ビット目まで同じ値
--> これをワイルドカードマスクで表現してみると・・・。
② 使用するワイルドカードマスクを2進数で表現
「00000000 00000000 00000000 00111111」 <-- 「0.0.0.63」
※ 0:チェックする / 1:チェックしない
③ 結果
192.168.1.4(ip) 0.0.0.63(wc)
一見行けそうだが、NGである。2進数にして考えてみる。
「11000000 10101000 00000001 00|000100」 <-- 「192.168.1.4 (ip)」
「00000000 00000000 00000000 00|111111」 <-- 「0.0.0.63 (wc)」
ワイルドカードマスクは、0ビット部分のみをチェックする為、IPアドレス範囲は下記となる。
「IPアドレス範囲:192.168.1.0 ~ 192.168.1.63」
範囲内に「192.168.1.0 / 192.168.1.2 / 192.168.1.3」が入ってしまっている。
こういう場合は、もう一つIPアドレス範囲を作成する。
「11000000 10101000 00000001 000000|00」 <-- 「192.168.1.0 (ip)」
「00000000 00000000 00000000 000000|11」 <-- 「0.0.0.3 (wc)」
--> 192.168.1.0(ip) 0.0.0.3(wc)
--> IPアドレス範囲:192.168.1.0 ~ 192.168.1.3
ACLで例えると、192.168.1.4 ~ 192.168.1.63の範囲のみを許可したいとする。
そういった場合、下記のように設定する。
1.172.16.1.0 - 172.16.1.3 をdenyとして設定する行(WC 0.0.0.3)
--> access-list 1 deny 192.168.1.0 0.0.0.63
2.172.16.1.0 - 172.16.1.63 をpermitとして設定する行(WC 0.0.0.63)
--> access-list 1 permit 192.168.1.0 0.0.0.63
このようにすることで、192.168.1.4 ~ 192.168.1.63 ピンポイントで範囲指定ができる。
[注-2] 192.168.0.0/24 ~ 192.168.0.14/24のアドレス範囲
① IPアドレスを2進数表記に変える
「11000000 10101000 00000000 0000|0000」 <-- 「192.168.0.0」
「11000000 10101000 00000000 0000|1110」 <-- 「192.168.0.14」
--> 第4オクテットの上位4ビット目まで同じ値
--> これをワイルドカードマスクで表現してみると・・・。
② 使用するワイルドカードマスクを2進数で表現
「00000000 00000000 00000000 00001110」 <-- 「0.0.0.14」
※ 0:チェックする / 1:チェックしない
③ 結果
192.168.0.0(ip) 0.0.0.14(wc)
IPアドレス範囲:192.168.0.0 ~ 192.168.0.14 の偶数のみになってしまう。
--> 192.168.0.0 / 192.168.0.2 / 192.168.0.4 / 192.168.0.4 / 192.168.0.6
192.168.0.8 / 192.168.0.10 / 192.168.0.12 / 1192.168.0.4
2進数にして考えてみる。
「11000000 10101000 00000000 0000|000|0」 <-- 「192.168.0.0 (ip)」
「00000000 00000000 00000000 0000|111|0」 <-- 「0.0.0.14 (wc)」
※ 0:チェックする / 1:チェックしない
よって192.168.0.0 - 192.168.0.14はできない。
ワイルドカードマスクにすると0.0.0.14 としたいところだが、
これをやると0から14までの偶数のIPアドレス範囲に理論上なるので、運用が大変になる。
まとめ
① 基本的にワイルドカードマスクで範囲を表す場合は、下記が条件
1. 範囲の始まりがプレフィックスのネットワークアドレスであること
--> /25 なら x.x.x.0 か x.x.x.128
もしくは、末尾ビットが全て0ビットであること
--> 10.32.0.0 【 00001010 001|00000 00000000 00000000 】
--> 172.16.32.0 【 10101100 00010000 001|00000 00000000 】
--> 192.168.4.0 【 11000000 10101000 000001|00 00000000 】
--> 192.168.4.8 【 11000000 10101000 00000100 00001|000 】
などなど ※ 末尾の0ビットの範囲内でしか範囲指定できない。それ以外だとおかしくなる。
2. 範囲の終わりが (2の累乗)-1 であること
--> 10.63.255.255 【 00001010 001|11111 11111111 11111111 】
--> 172.16.63.255 【 10101100 00010000 001|11111 11111111 】
--> 192.168.7.255 【 11000000 10101000 000001|11 11111111 】
--> 192.168. 4. 15 【 11000000 10101000 00000100 00001|111 】
などなど ※ 末尾はすべて1ビットになる。
② アドレス範囲をピンポイントで指定する場合、アドレス範囲を複数作成するときがある。
--- 備考 ---
下記の計算ツールもあるので、試してみるのもありです。
【計算ツール】IPアドレス・サブネットマスク・ワイルドカードマスク
参照リンク
ACL - ワイルドカードマスクとは
ワイルドカードマスクとは - IT用語辞典 e-Words
IPアドレスとは?クラス範囲やサブネットマスク計算などの専門用語の意味を解説
サブネットマスク・ワイルドカードマスクの対応表と説明
【計算ツール】IPアドレス・サブネットマスク・ワイルドカードマスク
PATの設定(外部インターフェースのアドレスを使用)
アクセスコントロールリストとは