IPv6でアクセスカウンター

  • 投稿日:
  • カテゴリ:

このサイトの上部にある、自作の「昨日今日アクセスカウンター」をそろそろ公開しようと思い、準備をしようと思ったのですが、XREAからCORE SERVERへサーバーを移動してからアクセスが異常に増えていることに気づきました。

サーバーを移動後に、サイトの微調整を直接FTPで編集していたので、大量にアクセスしているのですが、同じIPアドレスは重複カウントしない仕様にしてあります。なので、1アクセス増えるだけなはずです。

DNS設定で、IPv6を使って、サーバーへの名前解決をしています。サーバー移動前は、XREAの以前からの設定で、IPv6は使っていませんでした。サーバー移動後に、CORE SERVERの設定を真似して、IPv6を付けたという経緯があります。

そこで、データを格納しているデータベースを見ると、IPv6のアドレスが大量にあります。どうやらそれが自分のアクセスなのです。アクセスするたびにIPアドレスが増えています。かといって、次々と変化するのではなく、1日に1回程度(毎日23時ころとか)変わります。

そういえば、自宅の回線のIPアドレスを確認しようと思って、ルーターの設定画面を開いたのですが、IPv4のアドレスの記述はあってもIPv6のアドレスはどこにもありませんでした。一応Nuro光は、固定割当のIPアドレスではなく、変動する動的IPアドレスなのですが、ほぼ変わることがないという情報です。IPv6のアドレスは不定なので、表示しないのでしょう。

自宅サーバーのサイトのIPアドレスをdigしてみると、バリュードメインのDNSサーバーで名前解決して、IPv4とIPv6のアドレスが表示されます。IPv6のアドレスは、バリュードメインのDNSサーバーごとにそれぞれ異なったアドレスが表示されています。複数のアドレスを使ってアクセスしているようです。

これは1日1回線1アクセスのアクセスカウンターは難しそうです。とりあえず、アクセスカウンターを設置しているサブドメインの、DNS設定のIPv6の部分を一度削除しました。するとdigでは、すぐにIPv6部分は消えました。

ただ、CORE SERVER自体がIPv6をサポートしているので、相変わらずIPv6で記録されます。サーバーへはIPv4になっても、サーバー自体がIPv6を受け付けるので、当然の結果ですね。調べると、IPv6対応は、CORE SERVER v2以降なので、XREAはそもそもIPv6に対応していなかったのです。

と思ったら、キャッシュが効いていたようで。1時間ほどしたらIPv4になっていました。IPv4で運用すれば、カウンターも仕様通りに動きます。

IPv6で運用するのであれば、自力でIPv6をIPv4に変換するしかないのかな。そんなことができるか。検索しても出てこない。この疑問には、AIも役に立たない。

なお、dig -xで、IPv6のアドレスを逆引きすると、複数のIPv6のアドレスは1つに集約されるようです。これを使うのもいいのですが、負荷がかかります。

【解決編】
と、いろいろ思考を巡らせていたのですが、そもそもデータベースのテーブル構造で、IPアドレスの記録をvarchar(20)にしていました。IPv6は39文字必要なのです。それで、20文字しか記録できないから、アクセスするたびに既存の記録がないので新しく記録するという繰り返しをしていました。他のウェブプログラムを見るとvarchar(50)にしているので、それと同じにしました。すごくいろいろなことをしましたが、やることは1つだけでした。

【まとめ】

  • DNS設定で。AAAAのIPv6を設定すると、サーバーもIPv6で動作するが、AレコードのIPv4しか設定しない場合は、サーバーもIPv4しか受け取らない。
  • IPv4とIPv6を同時に設定しておいて、IPv6に対応したプロバイダはIPv6でアクセスするが、IPv4にしか対応していないプロバイダはIPv4でアクセスする。
  • digをして得られたIPv6のIPアドレスをそのまま自宅サーバーやレンタルサーバーのDNSに使っていいかどうかは、サーバー側の状態による。
  • NURO光のIPv4は、そうそう変わらないが、IPv6は、毎日変わる。
  • 古いウェブプログラムだと、IPアドレスの保存場所を20文字などにしている可能性がある。バグフィクスの点検ポイントかも。
  • phpMyAdminで、テーブルの構造の部分を20から50に変更しただけ。構造を変更するときは、一度エクスポートして、構造を変更するのかと思っていましたが、データベースは壊れることもなく動いています。

リンクソース

  • 記事用リンクソース:
  • Wiki用リンクソース(PukiWiki):
  • Wiki用リンクソース(MediaWiki):
  • SNS投稿用: