インフラエンジニア大きく二つに分けられます。
それが「サーバエンジニア」と「ネットワークエンジニア」です。
インフラ全体を構成するには切っては離せない関係なので、相互に理解しておいた方が良い知識があります。
インフラエンジニアとしてサーバとネットワークは一緒にされがちですが知識はもちろん違います。
私はどちらかとサーバエンジニアの立場ですが、ネットワーク機器も操作します。
ネットワークの設定がきちんとしていないと、そもそもサーバ上のシステムの利用が出来なかったりトラブルの原因になります。
そういった意味合いだとネットワークがきちんとしていないとサーバは本来の力が出せません。
サーバだけがあってもアクセスが出来なければ意味がないですよね。
もちろん、サーバ上で稼働するアプリケーションも同様です。
そこで今回は、サーバエンジニアでも理解しておくべきネットワークの基礎知識を紹介したいと思います。
IPアドレスやVLANなど設計上当然のごとく理解すべき内容は省きたいと思います。
そもそも設計レベルであればアドレス管理くらいは出来る人の方が多いでしょう。
それでは書いていきたいと思います。
サーバエンジニアが理解しておくべきネットワーク
DHCP Helper
helperは何の設定かと言えば、「DHCP」サーバのアドレスをリレーするための設定です。
DHCPの仕組み上、ネットワークに繋がった端末はブロードキャストしてDHCPサーバを探して、IPのリクエストを受け取ります。
しかしブロードキャストして応答が得られるのは同セグメントです。
具体的に書くと「192.168.1.0/24」[192.168.2.0/24]の二つのネットワークが存在した時に、第3オクテットが異なるネットワークにPCがあり、DHCPサーバが別のネットワークに要る場合は、ブロードキャストをしてもDiscoverは届きません。
helperを設定しないとDiscoverをリレー出来ずにクライアントはIPを取得できません。
DHCPサーバに関しては、サーバエンジニアだからといって皆触れる機会があるわけではないのですが、DHCPの仕組みだけを理解していても、実際業務で携わる時はネットワークを考える必要があります。
このhelperアドレスの指定をしない事で正常に動作しないケースは、非常にベーシックですが起こり得るのでこういった仕組みがある事は理解しておいてよいでしょう。
ACL(Access Control List)
サーバ側でもACLと呼ぶ機能があったりしますが、ネットワークのACLの方が重要です。
ACL自体は、許可するパケットと拒否するパケットを記述するための機能で、概念的な部分はファイアウォールなどと同じなので理解はしやすいと思います。
ACLで見落としがちなのがACLの順番も重要な所です。
記述の順番によっては、Permit(許可)しているはずのパケットが、それより前に記述されている設定によって通信できない事があります。
サーバ側のファイアウォールであれば、順番などはありません。
ネットワーク機器のACLに記述があると言っても順番によっては正しく動作しません。
単純なホワイトリスト式やブラックリスト式ではないので、サーバエンジニアもネットワーク接続が上手く行かない時の原因を考える際は、ACLの理解があればネットワーク担当者とスムーズに連携できるでしょう。
セッション維持
これは主にロードバランサ(LB)を利用するケースです。
特にWebサーバなどミドルウェアを扱う上では非常に重要です。
LBで最も基本的で重要な機能が負荷分散とセッション維持です。
セッション維持はトラブルの原因になりやすい機能の一つで、特にECサイトなどではログイン時間とサーバの紐づけには精度を求められる部分です。
また、サーバ側もシステム設計上、TCPコネクションがどの程度接続される想定で設計するかにもつながります。
コネクションプールとセッション維持も切っては切れない関係ですが、セッション維持の時間を誤るとサーバの負荷が高まります。
LBの仕組みを知らずに負荷分散システムを担当すると色々困る事も出てくるかもしれません。
負荷分散方式やセッション維持について最低限、理解しておく方がトラブルが発生した時にスムーズに対応が出来るでしょう。
サーバエンジニアには関係ないネットワーク知識
ルーティングプロトコル
ネットワークの知識を問われると、ルーティングは欠かせないのですがサーバエンジニアにとっては無用の知識です。
理由はルーティングは完全にネットワークの世界の話だからです。
先ほどのDHCP Helper、ACL、セッション維持はサーバがシステムとして機能するのに絶対的に必要で、サーバも隣接した関係にあるからです。
しかし、ルーティングに関してはRIPであろうとOSPFであろうとEIGRPだろうと何のルーティングプロトコルを使っていてもサーバから見えるネットワークは一緒です。
興味本位で覚えておく分には良い知識です。
しかし、サーバには直接関係が無いのであえて覚える必要はないと思います。
ファイアウォール
これ関しては、Windows ServerでもLinuxでも標準で機能が備わっています。
つまりサーバサイドのファイルアウォールもネットワークサイドのファイアウォールも基本的には機能が同じです。
違うのはUIや設定の仕方のようなインターフェイスだけです。
あえてネットワーク機器で覚える必要はないと思います。
VPN
これもサーバの挙動には直接影響しないので、サーバエンジニアが触れる領域ではないですね。
VPN自体は知っている人も多いでしょう。
しかし、VPNはサーバ間をつなぐための設定で、言ってしまえばルーティングと似たようなものです。
サーバはネットワークを気にせずに接続できるようになるのであえて覚える必要はないと思います。
VPNも「Auto Key」や「Manual Key」など種類がありますが、サーバには関係がありません。
実際にVPNの設定を行った経験から、VPNは完全にネットワークだけの知識と言えます。
最後に
ここまで、サーバエンジニアが知っておくと良いネットワークの知識について書いてきました。
私は今ではサーバもネットワークもオペレーションしますが、そのうえで知っておくべきは紹介した3つだと思いました。
社内SEであればDHCP Helperは覚えておくべき設定です。
また、ACLも記述一つで多く挙動を変えてしまう事もあるので、要注意ですし異なるネットワークのサーバ間で通信するためにも必須の設定です。
最後のセッション維持に関しては、かなり重要なシステムを扱う場合は必要な知識です。
その反面、後半書いたような知っていてもあまり役に立たない知識もあります。
インフラエンジニアとして、サーバとネットワークを両立して対応できるようになりたい人は覚えても良いでしょう。