title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2024/04 >>123456789101112131415161718192021222324252627282930
《《《 ネットワーク機器の購入は Amazon で! 》》》
Powered by BLOM IPv6 いろいろ
小さくも大きくも閉じたりもしません
10/11/03 06:09 / 雑談

PMail Server を IPv6 対応にするべく色々と環境を構築したり、予想外の処で手間取ったりしていたりします。

IPv6 対応を考えた当初「Socket を AF_INET6 とかで作ってソケットハンドル取得したら、後は IPv4 と殆ど同じ処理だからすぐにできるかな?」とか思っていたのですが、作りこんでいくうちに幸か不幸か、PMail Server に色々とつけていた機能がネックになってしまい、予想以上に手間取ってしまいました。

フィルタ関連がそうなんですが、IPv6 関連の処理を行う関数群をまず作成して、フィルタエンジンに組み込む必要がありました、当初から IPv4 / IPv6 デュアルスタックにする予定でしたので、従来のフィルタと極力互換を取るようにしなければならないので、そのすり合わせなども必要になってしまいました。

こういうところの処理は思いっきりハードコーディングしていたので余計にややこしくなったり。

これと前後して、ソケット周りのコアの作りこみをしていきました。
IPv4 の場合は、構造体に必要な値をセットして処理すればそれでよかったのですが、IPv6 の場合は色々なオプションが追加されていますので、単純にはいきませんでした。

簡単なものであれば、getAddrInfo() という Winsock 関数を使えば良いのですが、DNS が絡む処は自前で処理しなければなりません。特に PMail ServerDNS 処理もすべて自前で DNS サーバーと通信したりしていますのでなおさらです。

更に IPv4 / IPv6 のデュアルスタック仕様としていますが、設定自体も混在できるようにしていますので、IP アドレスから判定して内部処理を変更したり、特に重要なのは「従来の PMail Server は IPv4 のみでの処理という仕様なので、共通にすることができない」というネックがあります。ISC Bind のように NT4.0 や Windows 2000 を捨てるという選択をすれば良いのですが、サポートが終了したとしてもできれば動くようにしておきたかったという理由もありますが・・・。

このお陰?で、かなりの部分でコンパイラオプションで切り替わるコードが増え、PMail Server2 のコードはどんどんと膨れ上がり、実は1.5倍ほどになっていたりします。

殆ど PMail Server2 のコードが書きあがり、後はリリースするだけという状況で、DNS サーバーが IPv6 だった場合や、PMail Server 自身が IPv6 のみで運用するという状況をすっかり失念していて、Version 1.87 との同時リリースができなくなってしまいました。

PMail Server2 自身が IPv6 のみで動かす。という点についてはそれほど問題は無かったのですが、DNS クライアント側で、DNS サーバーが IPv4 のみを対象としていましたので、大幅に書き換える必要が出てきました。
DNS クライアントは、UDP で通信するケースが大半なのですが、実は応答が一定サイズを超えると TCP で通信する仕様なのです。ですので UDP/TCP 両方で DNS サーバーに接続できるようにする必要があるので、結構面倒だったりします。)

色々とテストをしていたのですが、普段開発で使っている XP の nslookup はどうも IPv6 に対応していなかったようで、しばらくの間悩みました。(^-^;
(XP の nslookup は AAAA レコードは引けますが、DNS サーバー自身が IPv6 だった場合、server コマンドで指定ができないようです。おそらくですが・・・)

サブに使っている DynaBook に入っている Windows7 の nslookup は IPv6 を指定できますので、これで確認などをしてみますが・・・なぜか繋がらない。

ICS Bind の方で IPv6 対応のコンパイルオプションでも付けて実行ファイルを作らないとだめなのかな。としばらく悩んでいたのですが、マニュアルを grep していましたら、listen-on-v6 というオプションを有効にしないと IPv6 でのアドレスを受け付けない事が判明(^-^;
(ちなみに options に listen-on-v6 any と設定すれば割り当てられている IPv6 アドレスすべてで待機してくれます)

Bind の設定を変更して、Windows7 の nslookup で IPv6 での問い合わせで確認できることを確認して、さぁテストを始めたのですが、書き起こす箇所が多く四苦八苦します。
(IPv6 の構造体は予約的に確保されている箇所が多くて面倒です。でもスコープとかは必須だったりと微妙・・・)
それでもなんとか UDP/TCP 両方で通信できるようになりましたので、ようやく完成と相成りました。

実は Alpha1 はローカルでのテストしかしておりませんのでグローバルできちんと割り当てられた IPv6 で動くかが未テストのままだったりします。

もし IPv6 ネイティブ環境をお持ちのユーザー様がいましたら、テストにご協力してくださるととてもうれしいです。

[更新日付:2010/11/03 06:09:16]
トラックバックを見る(0)
Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+a88e046ebff3847a861258707767c2e0f2a4ee39]
TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+a88e046ebff3847a861258707767c2e0f2a4ee39]

記事へのコメント

コメントはありません

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.