自作DNSプロキシを本番環境で動かしてみた
先日DNS関連プログラムを作って楽しんでいるとブログで書きましたが、プログラム的に満足行く状態まで仕上がったので(とっくに仕上がっていたのですが)、本番DNSプロキシとして稼働させてみています。
本番DNSというのは、社内外のDNSの中継を全て引き受けるという役割で、ファイアーウォール機で動かします。もし止まってしまうと社内外からDNSが使えなくなりますし、さらにファイアーウォール機の他のプログラムにまで影響が出ると社内のインターネットは全滅となるという、非常に重要な状態です。
なぜそんなに重要なところで動作確認をしたいかというと、なんといってもDNSパケットが非常にたくさん飛び交い、しかもインターネットとも接しているため、怪しいパケットなども飛んでくるためです。負荷テストと安定稼働テストを行うためには最適の環境なのです。
実際に動いている様子を見ていると、UDP用のスレッドは121個くらいまで同時に使っているようです。TCPはさすがに少なく、当社の上位のドメインサーバからの1回だけです。
このプログラムはお客さんにお渡しした後は本当に業務用に使われます。当然インターネットとも接する場所で使いますので、このくらいのテストは平気でクリアーできなければなりません。
当社ではインターネットに関係するプログラムを、製品・特注品ともにたくさん作っています。自社の本番環境で動かせないようでは、お客さんに使ってもらえるわけがないのは当たり前です。
本番環境で動くかどうかは、それなりに自分自身で入念に確認してからでも、意外とドキドキするものです。しかし、これを乗り越えられなければ、お役さんに使ってもらうプログラムを開発することはできないのです。私はこのドキドキ感がとても好きです。
常駐型のプログラムを作るコツとしては、できるだけ可変部分を減らすことです。メモリーの動的確保や、スレッド・プロセスを動的に立ち上げることなどは、リソースの状況によってはうまく動かなかったり、あるいは自分自身でリソースを消費してしまうことがあるなど、常駐型としては安定するまで試行錯誤が必要なケースが多いものです。できるだけ起動時点で必要な分だけ準備し、以降はそれを使い回す、というような動きで作るのが安心です。また、何かあったときの解析のために必要十分なログを出力しておくことも大切です。これらのノウハウがあるからこそ、常に起動し続けるようなプログラムをお客さんに提供できるのです。ここに至るまでは何度も痛い目にあいました。。
ということで、怖がらずにどんどん本番環境でチャレンジすることは、とても大切、という話題でした。運用管理者からは睨まれそうな内容ですねぇ・・・。