【ネットワーク】アドレス範囲をワイルドカードマスクで表現

# はじめに
CCNA（ネットワーク試験）対策をしている際に、
ワイルドカードマスクに悩まされたので書きたいと思う。
<font color="Red">※ 私が知っている範囲で書きます。間違っている場合は、修正かけてください。</font>

# ワイルドカードマスクとは？
① PATやACLなどで、IPアドレスの範囲を指定する際に使用するもの。
② IPアドレスの何ビット目を確認対象にするか指定するもの。
③ ０は、指定したIPアドレスのビットをチェックする。
④ １は、指定したIPアドレスのビットをチェックしない。
⑤ サブネットマスクとは、違う。
　 --> IPアドレスを、ネットワーク部分とホスト部分に識別するための数値

# IPアドレス範囲をワイルドカードマスクで表現
（ip=IPアドレス / wc=ワイルドカード）

[題-1] 172.16.1.0/16 ～ 172.16.1.63/16のIPアドレス範囲

　① IPアドレスを2進数表記に変える
　　「10101100　00010000　00000001　00<font color="Red">**|**</font>000000」　<-- 「172.16.1.0」
　　「10101100　00010000　00000001　00<font color="Red">**|**</font>111111」　<-- 「172.16.1.63」
　-->　第4オクテットの上位2ビット目まで同じ値
　-->　第4オクテットの上位2ビットまでをチェックし、それ以降はチェックしなければ範囲指定可能

　② 使用するワイルドカードマスクを2進数で表現
　　「00000000　00000000　00000000　00<font color="Red">**|**</font>111111」　<-- 「0.0.0.63」
　　<font color="Red">※ 0：チェックする / 1：チェックしない</font>

　③ 結果
　　172.16.1.0(ip)　0.0.0.63(wc)

　 --備考--
　　引き算でも導ける： 172.16.1.0 ー 172.16.1.63 ＝0.0.0.63
<br>
[題-2] 172.16.80.0/16 ～ 172.16.83.255/16のIPアドレス範囲

　① IPアドレスを2進数表記に変える
　　「10101100　00010000　010100<font color="Red">**|**</font>00　00000000」　<-- 「172.16.80.0」
　　「10101100　00010000　010100<font color="Red">**|**</font>11　11111111」　<-- 「172.16.83.255」
　-->　第3オクテットの上位6ビット目まで同じ値
　-->　第3オクテットの上位6ビットまでをチェックし、それ以降はチェックしなければ範囲指定可能

　② 使用するワイルドカードマスクを2進数で表現
　　「00000000　00000000　000000<font color="Red">**|**</font>11　11111111」　<-- 「0.0.3.255」
　　<font color="Red">※ 0：チェックする / 1：チェックしない</font>

　③ 結果
　　172.16.80.0(ip)　0.0.3.255(wc)

　 --備考--
　　引き算でも導ける： 172.16.80.0 ー 172.16.83.255 ＝0.0.3.255 
　　<font color="Red">※ -255のマイナスは外す</font>
<br>
[題-3] 192.168.192.0/24 ～ 192.168.223.0/24のネットワーク範囲

　① IPアドレスを2進数表記に変える
　　「11000000　10101000　110<font color="Red">**|**</font>00000　00000000」　<-- 「192.168.192.0」
　　「11000000　10101000　110<font color="Red">**|**</font>11111　00000000」　<-- 「192.168.223.0」
　-->　第3オクテットの上位3ビット目まで同じ値
　-->　第3オクテットの上位3ビットまでをチェックし、それ以降はチェックしなければ範囲指定可能

　② 使用するワイルドカードマスクを2進数で表現
　　「00000000　00000000　000<font color="Red">**|**</font>11111　11111111」　<-- 「0.0.31.255」
　　<font color="Red">※ 0：チェックする / 1：チェックしない</font>

　③ 結果
　　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
<br>
[注-1] 192.168.1.4/24 ～ 192.168.1.63/24のIPアドレス範囲

　① IPアドレスを2進数表記に変える
　　「11000000　10101000　00000001　00<font color="Red">**|**</font>000100」　<-- 「192.168.1.4」
　　「11000000　10101000　00000001　00<font color="Red">**|**</font>111111」　<-- 「192.168.1.63」
　-->　第4オクテットの上位2ビット目まで同じ値
　-->　これをワイルドカードマスクで表現してみると・・・。

　② 使用するワイルドカードマスクを2進数で表現
　　「00000000　00000000　00000000　00111111」　<-- 「0.0.0.63」
　　<font color="Red">※ 0：チェックする / 1：チェックしない</font>

　③ 結果
　　192.168.1.4(ip)　0.0.0.63(wc) 

　一見行けそうだが、NGである。2進数にして考えてみる。
　　「11000000　10101000　00000001　00<font color="Red">**|**</font>000100」　<-- 「192.168.1.4 (ip)」
　　「00000000　00000000　00000000　00<font color="Red">**|**</font>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<font color="Red">**|**</font>00」　<-- 「192.168.1.0 (ip)」
　　「00000000　00000000　00000000　000000<font color="Red">**|**</font>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の範囲のみを許可したいとする。
　そういった場合、下記のように設定する。

　１．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
　２．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 ピンポイントで範囲指定ができる。
<br>
[注-2] 192.168.0.0/24 ～ 192.168.0.14/24のアドレス範囲

　① IPアドレスを2進数表記に変える
　　「11000000　10101000　00000000　0000<font color="Red">**|**</font>0000」　<-- 「192.168.0.0」
　　「11000000　10101000　00000000　0000<font color="Red">**|**</font>1110」　<-- 「192.168.0.14」
　-->　第4オクテットの上位4ビット目まで同じ値
　-->　これをワイルドカードマスクで表現してみると・・・。

　② 使用するワイルドカードマスクを2進数で表現
　　「00000000　00000000　00000000　00001110」　<-- 「0.0.0.14」
　　<font color="Red">※ 0：チェックする / 1：チェックしない</font>

　③ 結果
　　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<font color="Red">**|**</font>000<font color="Red">**|**</font>0」　<-- 「192.168.0.0 (ip)」
　　「00000000　00000000　00000000　0000<font color="Red">**|**</font>111<font color="Red">**|**</font>0」　<-- 「0.0.0.14 (wc)」
　　<font color="Red">※ 0：チェックする / 1：チェックしない</font>

　　よって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<font color="Red">**|**</font>00000　00000000　00000000 】
　　 --> 172.16.32.0 【 10101100　00010000　001<font color="Red">**|**</font>00000　00000000 】
　　 --> 192.168.4.0 【 11000000　10101000　000001<font color="Red">**|**</font>00　00000000 】
　　 --> 192.168.4.8 【 11000000　10101000　00000100　00001<font color="Red">**|**</font>000 】
　　などなど　<font color="Red">※ 末尾の0ビットの範囲内でしか範囲指定できない。それ以外だとおかしくなる。</font>

　2. 範囲の終わりが (2の累乗)-1 であること
　　 --> 10.63.255.255 【 00001010　001<font color="Red">**|**</font>11111　11111111　11111111 】
　　 --> 172.16.63.255 【 10101100　00010000　001<font color="Red">**|**</font>11111　11111111 】
　　 --> 192.168.7.255 【 11000000　10101000　000001<font color="Red">**|**</font>11　11111111 】
　　 --> 192.168. 4. 15 【 11000000　10101000　00000100　00001<font color="Red">**|**</font>111 】
　　などなど　<font color="Red">※ 末尾はすべて1ビットになる。</font>

② アドレス範囲をピンポイントで指定する場合、アドレス範囲を複数作成するときがある。

--- 備考 ---
下記の計算ツールもあるので、試してみるのもありです。
[【計算ツール】IPアドレス・サブネットマスク・ワイルドカードマスク](https://infrastructure-engineer.com/tools-ipcalc-001/)










# 参照リンク

[ACL - ワイルドカードマスクとは](https://www.infraexpert.com/study/aclz3.html)
[ワイルドカードマスクとは - IT用語辞典 e-Words](https://e-words.jp/w/%E3%83%AF%E3%82%A4%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89%E3%83%9E%E3%82%B9%E3%82%AF.html#:~:text=%E3%83%AF%E3%82%A4%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89%E3%83%9E%E3%82%B9%E3%82%AF%20%E3%80%90wildcard%20mask,%E3%82%92%E3%80%8C1%E3%80%8D%E3%81%A8%E3%81%99%E3%82%8B%E3%80%82)
[IPアドレスとは？クラス範囲やサブネットマスク計算などの専門用語の意味を解説](https://www.itmanage.co.jp/column/about-ip-address/#:~:text=IP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%82%92%E3%80%81%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E9%83%A8%E5%88%86,%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AB%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82)
[サブネットマスク・ワイルドカードマスクの対応表と説明](https://infrastructure-engineer.com/tcpip-basic-0003/)
[【計算ツール】IPアドレス・サブネットマスク・ワイルドカードマスク](https://infrastructure-engineer.com/tools-ipcalc-001/)
[PATの設定（外部インターフェースのアドレスを使用）](https://www.infraexpert.com/study/natz2.html)
[アクセスコントロールリストとは](https://www.infraexpert.com/study/aclz1.html)