Foundary機器を利用してBGP4を利用していた経験からすると、個人でASN取得したり、運用しようと思うこと自体がすごいなぁ。
そもそも、BGP(Border Gateway Protocol)ってなに?
ほとんどの場合は、BGP4というルーティングプロトコルのことを指しています。で、このプロトコルはなにかというと、実質的に今のインターネットすべてのネットワークを支えているといっても過言ではないプロトコルなのです。
インターネットの世界はIPアドレスでホストの居場所を探すわけですが、このIPアドレスは基本的にはネットワーク帯ごとに事業者などに割り当てられます。この事業者は割り当てられたネットワークをインターネットのどの場所からも、いつでもアクセスできる状態にします。
このいつでもアクセスできる状態にするためにAS(Autonomous System)を利用して、AS同士を相互に接続し、経路情報をやりとりすることによって、複数の経路からネットワークに接続できることを実現します。IPアドレスよりもさらに上位層の概念です。
ASNとはASに対してユニークに割り当てられる番号のことです。
基本的にASは複数のISP回線を利用して、複数のASと経路情報をやりとりすることによって、1つの経路(ISP回線やAS)が障害などにより通信することができなくなっても、経路情報を伝達することによって、別の経路からネットワークへの接続をさせることができます。
例えば、HIROKI-NETというASを取得したとして、HIROKI-NETにはxxx.yyy.zzz.hhh/24のネットワークが所属するとした場合、xxx.yyy.zzz.hhh/24のネットワークを全世界からいつでも接続できる状態にするために、NTTとKDDIの2回線を契約して、NTTのASとKDDIのASにxxx.yyy.zzz.hhh/24のネットワークはココにありますよ。という経路情報を伝達します。
この経路情報はASを介して全世界に伝達されていきます。仮にNTTの回線が障害が発生した場合、即座に経路情報の優先度をKDDI側に設定し、KDDIのASへ経路情報を伝達することによって、経路情報を受け取ったASからはKDDIを経由した経路を使ってxxx.yyy.zzz.hhh/24のネットワークにアクセスしてきます。
と、このようにASが持っているネットワーク(xxx.yyy.zzz.hhh/24)などへの経路を伝達するためのプロトコルがBGP4なのです。
複数のISP回線を利用して複数のASと接続(ピアを張る)ことによって、NTTの回線は障害が多いからKDDIをメインで利用するなんてこともできます。ネットワークに入ってくるのはNTTからで、ネットワークから出ていくのはKDDIからなんてこともできる。
ぶっちゃけ、個人ではほぼ使わない規模のお話しだし、WEBコンテンツをやっている大規模な会社やISP事業者やデータセンターをやっているところぐらいしか使わない。
上記の例は一例に過ぎないので、詳しくは下記のようなサイトで学んで欲しい。(ここに出している例であれば、プライベートASだけでも構築できる)
AS番号からの情報取得
ミクシィってAS持ってんだぁ。
いろいろ調べたこと
MacのTerminalでwhois使うと文字化けするので、nkfをインストール。
Before
[bash] $ sudo port install nkf [/bash]
After
AS番号の申請自体は10,500円と意外と安い。
IPアドレス指定事業者以外でもAS番号は取得できる。(AS番号の申請について)
- 自律ネットワークがBGP(Border Gateway Protocol)を利用して他の自律ネットワークとの間で外部経路制御情報を交換すること。
- 自 律ネットワークの外部経路制御ポリシが、他のいかなる自律ネットワークに委ねても実現が困難な、固有のものであること。典型的には、他の一つの自律ネット ワークのみと接続するのではなく、複数の自律ネットワークとの間でBGPにより接続し、外部経路制御情報の交換を行うこと。
- 上記の条件 1) 2) を、割り当てから3ヶ月以内に満たす予定であること。
JPNICはAS番号公開してた。
ASの経路情報などを記録して公開しているところは多い。
whoisだとASNからは探せるけどASの名前から探せない。仕方ないからAS番号から一通り名前を取得するスクリプトを書いた。
[ruby] (40000..49999).each do |i| cmd = "/Users/hirocaster/src/aslookup-beta0.13d/aslookup " + i.to_s IO.popen(cmd, 'r+') do |pipe| print pipe.read end end [/ruby]
Kuniaki’s Softwareあたりのツールが便利そうなので使ってみた。