― 世界の国別 IPv4 アドレス割り当てリスト ―

Release date: Sunday, June 3, 2007
Last updated: Tuesday, August 20, 2013

世界の国別に割り当てられている IPv4 アドレスは、地域インターネット レジストリ(RIR: Regional Internet Registry)が管理しています(IP アドレスの管理についての詳細はこちら)。現在、ARIN、RIPE NCC、APNIC、LACNIC、AfriNIC の五つの RIR があり、それぞれが管轄する地域の国に IP アドレスを配分しています。
「どの国にどの IP アドレスを割り当てているか」という情報は、各 RIR がデータベース化しており、それぞれ以下の URL から参照することができます。

ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest
ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-extended-latest
ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest
ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest

ところがこのリスト、RIR statistics exchange format にも書いてあるように、「開始 IP アドレスから何個」という表現になっているので、そのままではサブネット マスクや CIDR の表現としては使えないレコードがあります。例えば、

192.168.0.0 から 768 個
768 個を表すサブネット マスクはない。
したがって、192.168.0.0/255.255.254.0 と 192.168.2.0/255.255.255.0 の二つに分けなければならない。

192.168.3.0 から 512 個
512 個なのでサブネット マスクは 255.255.254.0 だが、ホスト アドレス部が 0 になっていないため、単純に 192.168.3.0/255.255.254.0 とすることができない。
したがって、192.168.3.0/255.255.255.0 と 192.168.4.0/255.255.255.0 の二つに分けなければならない。

という修正を加えなければ、サブネット マスクや CIDR の表現としては使えません。
Linux でアクセス制限をするときなどは、サブネット マスクや CIDR で指定することがほとんどなので、上記 URL から参照できる生のリストでは、あまり使い勝手が良くありません。

そこでこのページでは、上記五つの RIR のデータを一つにした上で、上記例の修正を加えたリストを公開しています。さらにその修正に加え、IP アドレスの範囲が連続していて、まとめられる部分についてはまとめてあります。例えば、元のデータに、

192.168.16.0 から 512 個
192.168.18.0 から 256 個
192.168.19.0 から 256 個
192.168.20.0 から 1024 個

というレコードが現れた場合には、192.168.16.0/255.255.248.0(192.168.16.0 から 2048 個)という一つのレコードとなります。

サブネット マスク版
mask.txt 3,060 KB
mask.txt.gz 420 KB
CIDR 表記版
cidr.txt 1,936 KB
cidr.txt.gz 378 KB
最終更新日時: 2016-07-30 03:15:57 最終更新日時: 2016-07-30 03:15:57

Linux のアクセス制限などで使用するときは、grep、sed、awk あたりのコマンドを組み合わせて、利用目的に応じて加工すると良いでしょう。例えば、

sed -n 's/^JP\t/sshd: /p' mask.txt > hosts.allow
echo "sshd: ALL" > hosts.deny

とすれば、sshd へのアクセスを日本からのみに限定するルールができますし、

sed -n 's/^JP\t/Allow from /p' cidr.txt > .htaccess
sed -n 's/^JP\t\(.*\)/\1 OK/p' cidr.txt > client.cidr

とすれば、Apache のアクセス制御ディレクティブや、Postfix の CIDR 検索テーブルができあがります。

sed -n 's/^JP\t//p' cidr.txt | while read address; do
    iptables -A INPUT -s $address -j ACCEPT
done

このような感じで、iptables でのパケット フィルタに使っても良いかもしれませんね。


ちなみに、このデータを基に、各国に割り当てられている IP アドレスの個数を合計して、一覧表にしたものがこちらです。
ちょっと興味があったので、作ってみました。


Home