BLOGTIMES
2019/01/11

0.0.0.0/0 以外で IP 全てを表すには

  networking 
このエントリーをはてなブックマークに追加

ipset を使ったブラックリストに Deny ALL を設定しようと思って 0.0.0.0/0 を入力してみたら、ipset が受け付けてくれませんでした。

# ipset add BLACKLIST 0.0.0.0/0 ipset v6.38: The value of the CIDR parameter of the IP address is invalid

ネットワーク全てを 0.0.0.0/0 以外で表す方法がないかと思って調べてみると、以下の2行で設定できるということが分かりました。

ipset add BLACKLIST 0.0.0.0/1 ipset add BLACKLIST 128.0.0.1/1

0.0.0.0/1 + 128.0.0.1/1 = 0.0.0.0/0 になるわけ

直感的には変な感じがしますが、サブネットマスクと IP アドレスに関してきちんと理解していれば実用上はこれらが等価*1であることが分かります。

サブネットマスクが /0 の場合には、以下のように1行で表せます。

0.0.0.0/0 → 0.0.0.0 ~ 255.255.255.255

これと同じ範囲をサブネットマスク  /1 で表そうとすると、以下の 2 行が必要になります。
つまりアドレスの範囲が真ん中で分断されているわけですね。

0.0.0.0/1 → 0.0.0.0 ~ 127.255.255.255
128.0.0.0/1 → 128.0.0.0 ~ 255.255.255.255

同様にサブネットマスクがが /2 だと以下の4行となります。

0.0.0.0/2 → 0.0.0.0 ~ 63.255.255.255
64.0.0.0/2 → 64.0.0.0 ~ 127.255.255.255
128.0.0.0/2 → 128.0.0.0 ~ 191.255.255.255
192.0.0.0/2 → 192.0.0.0 ~ 255.255.255.255

やろうと思えばサブネットマスクはいくつでも大丈夫なのですが、エントリ数はサブネットを /n とした場合に 2n 個必要になりますから、あまり大きくするのは現実的ではありません

参考

  • *1: 厳密にはサブネットが長い方が優先的にマッチするので、0.0.0.0/1 や 128.0.0.1/1 の方が優先度が高い

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10695
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン