□PowerDNSのBackendをつくってみる□PowerDNSのBackendをつくってみる□PowerDNSのBackendをつくってみるPowerDNSといえば、シェアこそ少ないものの、かなり大規模なシステムで使われているDNSです。(MyDNS.JPでも使っています)さまざまなSQLデータベースと直結しているので、SQLができる人ならDNS情報の管理がしやすいという利点があります。Balancing:GSLB、Geo-IPとかGeoLocation-IPとかいったりしますね。)ができる、ということでも有名かもしれません。GSLBの実装としてGeoBackendというバックエンド処理があるのですが、これ自体は期待するほど使えません。(期待してがっかりした本人が言うのですから間違いない!?)GeoBackendは特定のというか一つのドメインでのみGSLBができ、実際にIPv4アドレスの地理情報を提供しているところの情報を使い、あらかじめ指定した国のみ、そのIPからの問い合わせには、指定した国別コード(アルファベット2文字)をつけたCNAMEを返す、というものです。usa----------とすると、この設定をしたPowerDNSに「www.geo.domain.com」を問い合わせると、問い合わせをしたマシンのIPv4アドレスの所在地により、日本から(と/usr/src/zz.countries.nerd.dk.rbldnsdに定義されている)ならjapan.www.geo.domain.comがCNAMEとして返るので、別途本来のPowerDNSに「japan.www.geo.domain.com」のAレコードを指定しておけば、それが問い合わせ元に返る、ということになります。上記の場合には「launch=geo,gpgsql」としているので、このgeobackendでCNAMEまで判明したら、gpgsqlbackend:つまりPostgreSQLの中の情報を検索する、ということになります。これだけなら「おおっ、すごい」と思うのですが、「geo-zone=geo.domain.com」と書いてしまっているので、このドメインでしかGSLBができません。「/usr/src/zz.countries.nerd.dk.rbldnsd」自体が国別でしか情報を返してくれないので、そこまで細かい設定はしなくていいんだけど、ということにもなります。MyDNS.JPは日本とシンガポールとオランダとアメリカにしかサーバーがないんだもん。PowerDNSをつかって複数のドメインでGSLBを実現するにはどうするか?これはもうGeoBackendを改造するか、GeoBackendとは別のバックエンドを作るしかありません。そのバックエンドのサンプルをPHPで作ってしまいました。最初はC++でバックエンドそのものを作るか?それともCでソケット通信でもしてやり取りするようにするか?とか思っていたのですが、あれこれしながらドキュメントを読んでいると「pipebackendで納得いかない場合には自分でバックエンドを作れ」みたいな事が書いてありました。http://doc.powerdns.com/html/backend-writers-guide.htmlで、サンプルのPerlスクリプトを見ながら、PHPで同じようなものを書いてみました。「PerlからPHPにしただけかい!!」といわれると...まぁこれはそうなんですが、実際にはこれにさらに味付けをすることで、MyDNS.JPで大陸別のGSLBを標準実装する予定ですので、もうちょっとお待ちください。PowerDNSから標準入力で上記URLにあるクエリが飛んでくる。adminコメントを残すメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。