ITのプロジェクトマネジメントを行う際に、ネットワーク設計が一番汎用的な技術かなと思い、
よく使う概念をまとめています。
比較的、技術面が浅めの投稿です。
想定読者
・プロジェクトマネジメントでネットワーク設計関連の知識が必要
・ネットワークエンジニアなり立て/目指している
本記事を読めば網羅的に、ネットワークの設計ができるというものではなく、
応急処置くらいの知識になります。
ぜひネットワークスペシャリスト試験の受験やや専用のテキストなどを読んでみてください。
TCP/IPネットワークについて(初めに)
・ネットワークの全体像の把握
最低限、下記のモデルに関する理解をしておいてください。
説明について詳細な技術説明は省いております。
何が書いてあるかわからない場合は、Google検索と併用して読み進めてください。
また、ぜひ記事に対する意見があればよろしくお願い致します。
レイヤ | OSI参照モデル | TCP/IPプロトコルスタック | 簡略な説明 |
---|---|---|---|
L7 | アプリケーション層 | アプリケーション層 | 利用目的 |
L6 | プレゼンテーション層 | 文字の設定 | |
L5 | セッション層 | 通信の手続き | |
L4 | トランスポート層 | トランスポート層 | 通信品質・稼働サービスの選択 |
L3 | ネットワーク層 | インターネット層 | 最終宛先への通信 |
L2 | データリンク層 | ネットワーク インターフェース層 | 一つ隣への通信 |
L1 | 物理層 | 電気、光信号、ケーブル |
■ポイント
・データリンク層は物理依存層ともいう
L2 EthernetのCSMA/CDにより、物理的制約(L1)がある
・アプリケーション層(ネットワークを利用するための目的)を動作させるためにその下のレイヤーがある
・L2はLLC(ロジカルリンクコントロール)副層とMAC(メディアアクセスコントロール)副層に分けられる
・ICMP(InternetControlManagementProtocol)はIPの拡張機能
・階層化(上記のモデル)を行うことで、機能ごとに改修、不具合対応がしやすくしている
上記の理解があると、資料を読みやすい
各層の機能については下記を参照
エンドポイント側の設定
IPv4アドレス設定 Windows
※最低限知っておくべきエンドポイント側の設定
知らない用語、理解していない設定があれば先に検索を推奨
・IPアドレス
ホストのIPアドレス
・サブネットマスク
ホストが所属しているサブネットの判断に使用する
宛先のホストがブロードキャストドメイン外か内部かの判別
・デフォルトゲートウェイ
サブネット(ブロードキャストドメイン)外への通信時に使用する
宛先のホストまでデフォルトゲートウェイにて送付してもらう
(郵便局のような役割)
・優先DNSサーバ
名前解決のリクエスト送付先
・代替DNSサーバ
名前解決のリクエスト送付先(冗長化)
・DNSサフィックス設定
ホスト名の名前解決に使用する
ホスト名+DNSサフィックスでFQDNを作成
→名前解決リクエスト
・プロキシ設定
-セットアップスクリプト(PACファイル)
最低限、どのあたりにどういった設定ができるかを覚えておくべき。
また、コントロールプレーンとデータプレーンというものがあるので、理解しておくと不具合を起こさずに設計がしやすくなる。
フォワードプロキシ設定
プロキシの設定がある場合、クライアント側で名前解決をしないケースがある。
プロキシの設定がある場合の名前解決
プロキシで通信する設定が入っていた場合、FQDNをプロキシへ渡して、
プロキシで名前解決をする。プロキシの設定がPACファイルによる場合の名前解決
下記の2パターンがある
・PACファイルにIPアドレスで設定されている場合
名前解決まで行って通信
・PACファイルにFQDNで設定されている場合
プロキシ上で名前解決を行う
補足:PACファイル(Proxy Auto-Configuration) 自動構成スクリプト/セットアップスクリプト
名前解決リクエストよりプロキシ設定(PACファイル)の優先度が高いイメージ。
詳細は下記サイトがおすすめ。
引用:SEの道導
![]()
ARPについて
ARP(Address Resolution Protocol)
IPアドレスからMACアドレスの解決する
例 デフォルトゲートウェイの場合
デフォルトゲートウェイの設定からIPアドレスを取得
ARPにより、デフォゲ IPアドレスからMACアドレスを取得
デフォゲ MACアドレスを設定 送信先IPアドレスは最終宛先でパケット送付
DNSについて(Windows)
名前解決とは、FQDNをIPアドレスに変換する処理のことを言います。
イメージとしてはFQDN "www.google.co.jp"を、IPアドレス "X.X.X.X"に変換するようなもの。
名前解決の流れ
①localhostの場合
→127.0.0.1に変換(強制)
②ホストファイルに記載がある場合
→ホストファイルに基づいて名前解決
③DNSサーバの設定がなされている場合
→DNSサーバへ名前解決リクエスト
ネットワークのルーティング
ルーティングとは
ルーティングとは、通信を相手に届けるまでの経路決定の方法。
基本的にはルータ(デフォルトゲートウェイなど)で細かな設定がされている。
PCのユーザなどは、あまり詳細な経路選択は理解する必要がない。
インフラの設計時も、サーバのサブネットとクライアントのサブネットが
すでに通信ができている場合、気にする機会はあまりない。
ルーティングについて懸念するタイミング
・新規の通信先、新規のサブネット(VLAN)ができた時など、L3レベルでの通信の実績がない場合
※サービスは違うがIPアドレスでの通信ができているのであればルートは問題ない
ルートテーブルの作成方法
ルートテーブルの作成方法は大きく2種類がある。
・静的ルーティング(手動設定)
・動的ルーティング(半自動で取得)
静的ルーティングは設定を細かくしなくてはならない。
動的ルーティングは比較的簡単に設定ができる。
動的ルーティングの種類
ルーティングは自律システムという単位で分けたときに自律システムの内部用と自律システム間用の2種類に分かれる。
・自律システム内部用はIGP(Interior Gateway Protocol)
・自律システム間用はEGP:Exterior Gateway Protocol
主要なルーティングプロトコル
・IGPの種類
OSPF、EIGRP(Cisco)
RIP→古い
・EGPの種類
BGP
他にもあるが、OSPF/RIP/BGPは覚えるべき。
ネットワークの設計(L3-L4)
ネットワークの穴あけとは
ネットワークにおいて、技術的セキュリティ対策として、FWにより通信の流れを細かく制御している。
基本的にはホワイトリスト形式で必要な物のみを許可する。
FWにもいろいろな種類があるが、TCP/UDP+ポート番号を確認するものが一般的。
ACLなどによる制御がある可能性もある。
一方向NATがある場合
NAT:Network Address Transferとは
IPアドレスをほかのIPアドレスに変換する機能。
詳細は下記のサイトがおすすめ。
NAT(Network Address Translation)はIPアドレスを変換する技術です。一般的には、プライベート
IPアドレスをグローバルIPアドレスに変換する技術とされています。![]()
NATのうち、NAPTといわれるような1つのIPアドレスに対して、複数のIPアドレスを割り当てる場合など、一対一のIPアドレスの割り当て以外だと一方向の通信となる。
通信をリクエストする側から、通信の処理先への接続ができない場合があるため、注意が必要。
固定IPアドレスによるNAT(双方向NAT)が必要。
TCP/UDP/ICMPの制御
ICMPはポート番号はない IPの拡張機能。
ICMP(Internet Control Message Protocol)はIP(Internet Protocol)の拡張機能のようなもの。
不具合対応におけるPingコマンドやTracertなど、ICMPの機能を使用している。
ネットワークにおける問題の診断等を目的として作られている。
ポート番号+TCP or UDPがある場合が多い。
→同一ポート番号でもTCP/UDPの両方の使う場合がある。
DNS 53/tcp →ゾーン転送
DNS 53/udp →名前解決
ポートはどこまで開けるか
ポート番号の穴あけは最小範囲が望ましい。
最終的にはお客様のセキュリティの責任者の許可次第。
何の穴をあけるかは製品の通信要件をよく読む。
ネットワークの設計(L5-L7)
L5からL7については、どういったプロトコルかで全く変わってくる。
以降、主要なHTTP/HTTPSについて記載
X-Forwarded-Forヘッダについて
HTTPは様々なヘッダ情報があるが、そのうちの一つ
XFFなどと略したりする。
XFFはどのような経路を通ってきたかを記載できる。
■ユーザ→CDN→WAF→WEBサーバのような経路の場合
CDNやWAFのグローバルIPアドレスなどが記載される。
WAFのIPアドレスが記載されていることを確認することで、想定通りの経路を通っていることを制御できる。
※上記のような構成の場合は、XFFだけでなく、WEBサーバへのアクセスをFWにて
WAFのグローバルIPアドレスからのみ許可することで、WAFの回避を阻止できる。
詳細を知りたい場合はこちらがおすすめ。
HTTPS(SSLインスペクション)
SSLの常時通信が当たり前の時代のため、重要項目
暗号化の利点は機密性を保つことができる。
ただし、WAFなどの内容を見て、安全性を確認するものや、NGFWのような外部通信の中身をみて、外部サーバレスポンスの中に変なデータが入っていないか確認する製品は暗号化の中身を見る必要がある。
そのため、高機能なネットワークのセキュリティ製品を使う上で、とても重要な概念。
SSLインスペクションは透過プロキシ型とリバースプロキシ型に分かれる。
下記サイトがすごくわかりやすいのでおすすめ。
1.透過プロキシ型
![]()
2.リバースプロキシ型
![]()
すごく簡単にまとめると、
・公開サーバの前に置くようなWAFは、サーバの管理をしているため秘密鍵、証明書(公開鍵)をインポートできる。
実際のサーバ証明書を使うことで、PKIで信頼されているため、接続注意喚起のアラートが出ない
・クライアントの外部通信用のNGFWやUTM、IPSのようなものは証明書を自分の秘密鍵で改ざんしたものをクライアントに渡す
NGFW等の証明書(公開鍵)をクライアント側で信頼(インポート)しておくことで、改ざんされた証明書でも、接続注意喚起のアラートが出ない
SSLとはそもそも何かという人は下記サイトがいい
引用:SSL通信が成立するまでの流れ
1.ブラウザ:SSL通信をリクエストする
2.サーバー:SSL証明書を送付する
3.ブラウザ:電子署名の検証により「SSL証明書に記載されたドメイン」と「通信先のドメイン」が同じであることを確認する
4.ブラウザ/サーバー:SSL通信を行うために共通鍵を交換する
![]()
信頼されたルート証明機関の証明書がOSにインポートされていて、
その証明機関が発行している証明書は安全(証明機関が本人に渡す)というような、
信頼の連鎖(トラストチェーン)によって、SSLの安全性は保護されている。
ただし、保護されていない通信のようなエラーが出たときに、ユーザが何も気にせずに
接続してしまうと、中間者攻撃(MITM攻撃)の可能性もあることを理解しておきましょう。
また、暗号化するデメリットとして、処理を行う分遅延する可能性があります。
安全な回線ではSSLアクセラレータという、暗号を解除したままで通信という設計もあります。
ネットワークの設計(全般)
キャンパスネットワーク 3階層
ネットワークは下記のように3階層でLANを設計することが多い
小規模であれば2層などもある。
階層 | 説明 |
---|---|
アクセス層 | クライアントPCやIP-Phoneなどのユーザのデバイスが接続する層。アクセス層に配置される アクセススイッチは一般的にL2スイッチ。アクセス層はディストリビューション層と接続する。 |
ディストリビューション層 | 各フロアのアクセススイッチを束ねて、ポリシーに基づいてトラフィック転送、拒否、および ルーティング処理を行う。ディストリビューション層に配置するディストリビューションスイッチ は一般的にL3スイッチが使用される。この層は必要に応じてコア層にトラフィックを転送する。 |
コア層 | 配下のディストリビューションスイッチを束ね、企業ネットワークのバックボーンとして機能。 コア層に配置されるコアスイッチは、大容量のトラフィックを高速スイッチングできるC6500 等の信頼性の高い高機能なスイッチを選定する必要がある。大規模な企業LANに適用する階層。 |
WEBの3層アーキテクチャ
WEBサーバは下記のように3層に分かれる。
特に、HTTP/HTTPSによるサービスを含んでいる場合、下記のような構成の場合が多い。
なお、一つのサーバでWEBサーバとAPPサーバを兼ねているなどもありうる。
WEBサーバやAPPサーバでHTTPヘッダ情報による処理などが行われることがある。
サーバ名 | 役割 |
---|---|
Webサーバ | Webブラウザなどフロントエンドを通じてユーザと直接やり取りを行うサーバ |
APPサーバ | WebサーバからのリクエストをJavascript、ruby、go、phpなどのプログラミング言語による処理を行うサーバ |
DBサーバ | Webサイトに必要なデータ(商品情報、価格、会員情報など)を保存したり抽出したりするサーバ |
非武装地帯(DMZ:De-Militerized Zone)
非武装地帯は境界型のネットワークセキュリティでよく出てくる言葉。
DMZの詳細な説明は下記のサイトを確認するとわかりやすい。
引用:Cisco ASA 5505 クイック スタート ガイド Version 8.0
![]()
概念としては、下記のようなものができる。
①外部からの接続を内部のネットワークに接続させない。公開しているWEBサーバのみ接続させる。
②内部ネットワークから外部ネットワークへ接続安全に接続させる。
実際は下記のようにネットワークをFWで分割する。
外部ネットワーク - ファイアウォール - DMZ - ファイアウォール - 内部ネットワーク
1番の実装としては、
ファイアウォールにて外部→DMZ内WEBサーバ:80/443への許可
それ以外への接続を拒否
2番の実装としては、
内部ネットワーク→DMZ内フォワードプロキシへの接続許可
DMZ内フォワードプロキシ→外部接続すべて許可
上記のようにFWの設定をしていくことで、最小の権限でネットワークの接続を保つことができる。
Content Delivery Network
WEBのフロントにはどこからアクセスしても、すぐにコンテンツを届けることができるようにCDNというものを使うことがある。
最近はよくCloudFrareを見かける。
引用:無料で簡単にサイト全体の表示速度を劇的にアップさせる「CloudFlare HTTP/2」
![]()
サーバの前にデータを保持するアクセスポイントを置いておくことで、サーバの代わりにデータを遅延なく届けるサービス。
世界中にデータを置いておくことで、一番近いデータを渡すような仕組み。
メリットとして、AWSのサイトがわかりやすい。
ページのロード時間を短縮する
ページのロード時間が遅すぎると、ウェブサイトのトラフィックが減少する可能性があります。CDN は、バウンス率を減らし、ユーザーがサイトで費やす時間を増やすことができます。帯域幅のコストを削減する
すべての着信ウェブサイトリクエストがネットワーク帯域幅を消費するため、帯域幅コストはかなりの費用になります。CDN は、キャッシュやその他の最適化を通じて、オリジンサーバーが提供する必要のあるデータの量を減らし、ウェブサイト所有者のホスティングのコストを削減できます。コンテンツの可用性を向上させる
一度に多数のユーザーが訪問する場合、またはネットワークハードウェア障害が発生した場合、ウェブサイトがクラッシュする可能性があります。CDN サービスは、より多くのウェブトラフィックを処理し、ウェブサーバーの負荷を軽減できます。また、1 つ以上の CDN サーバーがオフラインになった場合、サービスが中断されないように他の運用サーバーがそれらに代わることができます。*ウェブサイトのセキュリティを改善する
分散型サービス拒否 (DDoS) 攻撃は、大量の偽のトラフィックをウェブサイトに送信することにより、アプリケーションを停止させようとします。CDN は、複数の中間サーバー間で負荷を分散し、オリジンサーバーへの影響を軽減することで、このようなトラフィックの急増に対処できます。
利点として、間接的にDDoS(たくさんのアクセスで処理できずにサービスが停止する)のような攻撃対策になることがある。
注意点としては、静的WEBの場合はコンテンツのキャッシュを行うことで配布ができるが、動的WEB(ユーザによって処理が違う)の場合は、キャッシュを行わないようにしないとほかの人のログイン画面(個人情報)が配布されたりする場合がる。
リバースプロキシ・ロードバランシング
リバースプロキシやロードバランサーは、各サーバの負荷分散や冗長化に使用できる。
冗長化や負荷分散はWEBの可用性(常に使える状態)を維持するために重要な概念。
引用:ロードバランサーの仕組み
上記のようなサイトを読んでみると、大まかなイメージがつきやすい。
下記はAWSのALBの説明の引用。
ロードバランサーは、クライアントにとって単一の通信先として機能します。クライアントはロードバランサーにリクエストを送信し、ロードバランサーはターゲット (EC2 インスタンスなど) にそれらのリクエストを送信します。ロードバランサーを設定するには、ターゲットグループを作成し、ターゲットグループにターゲットを登録します。さらに、リスナーを作成してクライアントからの接続リクエストがないかチェックし、リスナールールを作成してリクエストをクライアントから 1 つ以上のターゲットグループ内のターゲットにルーティングします。
ロードバランサーというサーバの後ろに複数サーバを設置することで、負荷分散や冗長化を行うことができる。
冗長化と負荷分散の違い
・冗長化
一つのサーバが停止しても、ほかのサーバが処理を継続する
・負荷分散
一つのサーバで処理ができないような負荷を、サーバを増やすことで処理の遅延などを防ぐ
学習方法について
細かく学びたい場合は、下記を参考
・ネスペイージス(無料)
なんでも結構詳しく書いてある。
分野を絞って、詳細を知りたいときにお勧め。
・RFC(Request For Comment)(無料)
事実上の標準化文書
なぜそういう仕様になったかなどの理由がわかる
難しい
Wikipediaなどにリンクがある
比較的ページ数が少なく、とっつきやすい
内容が簡単かつまとまっている
個人的に全体像を素早く理解したいなら、最推奨
マスタリング TCP/IP 入門編
入門といえばこれ
ある程度入門書を読んでいるなら 応用からでもOK
ネットワーク技術の教科書
ネットワーク関連で分からないものがあったら辞書として使える
プロトコルごとのフローや、パケット構造、ネットワーク設計に
近しいような知識など幅広く説明がされている
最後に
ネットワークの設計は業務経験を積むことである程度できるようになっていくとは思いますが、
それ以上に早くベストプラクティスなどを覚えていきたい場合はIPAが開催しているネットワークスペシャリスト試験がおすすめです。
また、CCNAなどの試験ではデータの流れや制御など、ネットワークの細かな部分が学ぶことができるため、
余裕があったらそちらも勉強してみると、実際の設定方法なども覚えることができます。
さらに余裕がある人は、DNSサーバやフォワードプロキシ、リバースプロキシ、DNSなどは実際に構築してみることをお勧めします。
Apache httpd/Nginx/squid/Bind あたりを触ってみてください。
AWSのRoute53やVPCの設定、ルートテーブル、ClowdFrontなどからであれば
PCのリソースがいらないのでパブリッククラウドから覚えてもよいと思います。