エム・クレストの副社長兼エンジニアである小澤一裕です。情報システム部門に配属された新入社員やリスキリングで改めてICTに取り組もうという方々に向けて、知っていると便利なICTに関する情報をお届けしようと考えました。第6回のテーマは「TCPポートの枯渇や設定ミスに備える」です。
インターネットの世界では、リモート接続が当たり前に行われます。その根本の仕組みがTCP/IPという通信規約です。簡単に説明すると、サーバーを特定するためのIPアドレスと、サーバー内のアプリケーション(サービス)を示すTCPポート番号の二つの組み合わせで、接続するサービスを特定する仕組みになっています。そのためTCPポートが枯渇したり、TCPポートの設定ミスをしたりすると、リモート接続ができなくなってしまいます。そうなった場合の対応方法について解説します。
■TCPポートが枯渇する?
TCPポート番号は、4桁の16進数です。その範囲は0001~FFFFまでで、10進数にすると1~65535となります。ユーザーは、OSで提供されるサービスを使用することもあるため、全部を使うことはできません。それでも6万個以上のポートがあります。サービスが終了したら自動的に開放されるので、枯渇することはまずありません。
ところが、以前、Windows Server 2008を497日以上稼働させると、一部のポートが開放されない問題が起こりました。すぐに修正プログラムが提供されましたが、このときはTCPポートが枯渇する可能性が危惧されました。
TCPポートが枯渇すると、SSHやRDPなどを利用したリモート接続も当然できなくなります。システムが新しい場合、安定するまではこのような不具合が起こるかもしれません。
■設定ミスやアプリケーションのバグでもリモート接続できなくなる
リモート接続ができなくなるのは、システムのバグによるTCPポートの枯渇だけではありません。
例えば、LinuxサーバーでSSHの設定変更をした場合、設定ミスがあるとそれ以降、SSHによるリモート接続ができなくなることが挙げられます。また、ユーザーが作成したアプリケーションが、バグによってTCPポートを次々に獲得し、最終的には食い潰してしまうことがあり得ます。TCPポートとは関係ありませんが、無限ループに陥ったアプリケーションの影響でサーバーが高負荷になり、操作不能になることもあります。
これがクラウドサービスであれば、プロバイダーが提供している管理画面やWebコンソール機能を使って、手作業で回避できる可能性が高いです。しかし、オンプレミスだとそのような機能がないことがあります。
■基本的には再起動が解決策
TCPポートが枯渇したり、サーバーが高負荷になっていたりする場合は、基本的にはサーバーを再起動することが解決策となります。あくまでリモート接続のためのネットワークが生きていることが前提ですが。
再起動のための対応方法は、大きく以下の三つあります。
-リモート電源操作用の機器を導入する。
→リモート電源を用意し、それを使って外部から電源をオフ/オンする方法です。
-リモートKVMを導入する。
→リモートKVMとは、インターネット経由で利用できるコンソール(操作卓)のことです。要するにリモートからコンソールを使ってリブートするわけです。
-強制的に再起動する仕組みを用意しておく
→サーバー内の状況を監視して、ある条件を満たしたら強制的に再起動する仕組み(スクリプトやアプリケーション)を忍ばせる方法です。
■三つの方法を比較する
ある程度のコストがかけられるのであれば、リモートKVMの導入がお勧めです。しかし、全てのリモート環境にリモートKVMを導入するのは現実的ではないかもしれません。
リモートKVMを導入した場合のシステムイメージ
そこで、三つの観点で各対応方法を比較してみました。
対応方法の比較
コストを小さい順に並べると、③、①、②の順になります。故障リスクに関しては、①は大きいですが、それ以外はOSの仕組みで再起動しますので、まず故障はあり得ません。誤検知に関しては、①、②は人間が検知してから操作するため、まずあり得ませんが、③はスクリプトやアプリケーションにバグがあれば頻繁に起きる恐れがあります。
比較表を参考に、最適のコストパフォーマンスが実現できたら幸いです。
■執筆者プロフィール

小澤一裕(コザワ カズヒロ)
エム・クレスト
取締役副社長兼エンジニア
インターネット黎明期の2001年にWeb系ベンチャー企業でプログラマーとして多くのシステム開発を手がけた後、日立グループにてシステムエンジニアとして大規模インフラ事業などに従事。放送とITの融合時代を先読みし放送系ベンチャー企業で開発、拡販に関わる。その後、ITの困りごとを解決する専門集団「エム・クレスト」の立上げに参画。