helloworlds

not a noun, it's a verb

【ネットワーク】VPNについて簡単におさえる!!

今回はネットワーク系の記事になります。

主に VPN についてです。

IT業界にいなくとも、会社で1回は聞いたことがあったり、なにかは知らないけど利用はしている!なんて方は多いのではないでしょうか。

社外から社内へのネットワークにアクセスする際に利用している手段かもしれませんね。

合わせて、セキュアな通信を行うための手段についても簡単に書いていければと思います! (具体的な導入は除く)

VPNとは

VPN とは、「 Virtual Private Network 」を略したものです。

だいたいイメージはつくのではないでしょうか?

なんかプライベートとあるので、セキュリティ高めの通信方式かなんか?みたいな。

単純に言うと(wikipedia引用)、

インターネットに跨って、プライベートネットワークを拡張する技術、およびそのネットワークである。

f:id:o21o21:20190726120841p:plain

わたしはここで疑問に思ったことがあります。

「インターネットを経由するってことは、けっこう危ないんじゃね?」

単純のVPNときくとセキュリティ的に高めの印象を持ちますが、結局インターネットを経由するのであれば、怖い....

そこで、VPNには主に2種類の方法があるようです。

  • インターネットVPN
  • IP-VPN

インターネットVPNは、インターネット等のネットワークを利用したVPNのことです。

IP-VPNは、通信事業者などが提供している閉じられた(クローズド)ネットワークを介したVPNのことです。

これで少し疑問が解消されました。IP-VPNは第三者(拠点間以外)が提供している閉域網を利用して、よりセキュアな通信を可能にできそうです。

では、インターネットVPNの方はどんな接続方法があるのでしょうか?みていきます。

インターネットVPN

インターネットVPNには、2つの接続の仕方があるようです。

  • サイト間VPN
  • リモートアクセスVPN

サイト間VPNは、VPNを実装したルータ同士を接続する方法。

リモートアクセスVPNは、ラップトップやスマホなどの機器にインストールVPNにクライアントソフトを利用し拠点のLANに接続する方法。

なんとなくイメージできてきました。

例えば、本社から支社間の相互接続が必要な場合など、クライアントソフトウェアをインストールしないでネットワーク間をVPNゲートウェイを経由して接続するのが、サイト間VPN

VPNゲートウェイの役割として、送信トラフィックカプセル化する。また、暗号化も担当している。

そして、インターネットに構築してある(構築する必要がある)トンネルと呼ばれる仮想回路なるものを通過し、送信先VPNゲートウェイに送られる。

受け取り手であるVPNゲートウェイは、非カプセル化を行うことで、データが受け取れることになる。

では、リモートアクセスVPNの方はどうなるかというと、ユーザーはクライアントソフトのインストールが必要となる。

例えば、営業が社外からインターネット経由で社内のLANに安全にアクセスしたいときなどが考えられるでしょうか。近年では在宅勤務(リモートワーク)ではこちらの手段を使用している方が多いのではないかと思います。

このクライアントソフトは、トラフィックを送信する際、カプセル化/暗号化を行う。その後、送信先ネットワークの末端(エッジ)にあるVPNゲートウェイに送られることになる。

その先はサイト間VPNと同様に非カプセル化されターゲットに展開される。

ここで新たな用語がいくつか出てきましたが、トンネル(トンネリング)について、少し詳しくみていきます。

トンネル(のプロトコル)

トンネルは道路のトンネルみたいなものを想像しても良いかもしれません。

が、道路のトンネルと違うのは、ただ単に車を通過させるためでなく他に役割があるという点です。

※ ここではトンネルの構築方法は説明しません。

インターネット上にこのトンネルを構築する = 仮想的な経路を作成する

この経路作成するための素材として、プロトコルがあります。

トンネリングを行えるプロトコルには、PPTP,L2F,L2TP,IPsec,GREなどがあります。

ですが、この中で暗号化が可能なのがIPsecのみです。なので、IPsecでないプロトコルを使用した場合はIPsecを組み合わせて暗号化を実現する必要があるようです。

ここでよくググって出てくるのは(IPsecと対比して)、SSL-VPNです。

IPsecSSL-VPNどちらが良いの?という話があるが、ここでは以下の説明にとどめておく。

SSL-VPNは、OSI7階層モデル(○○層とかのやつ)のセッション層で実装される技術であるということ。

また、IPsecは、ネットワーク層で実装される技術。

この階層の相違は開発/運用しているアプリに影響を与えるということです。

つまり、HTTPやSMTP,FTPなどのアプリを変更することなくIPSecVPNを使用して利用することが可能であることがわかる。 IPSecネットワーク層で実装されるため、上位のアプリケーションプロトコルに依存しないよということですね。

どういった影響があるとか、そういった説明はここでは割愛させて頂きます。

このトンネルですが、脅威がトンネル内に侵入する可能性もゼロではありません

100%の安全を保証することはインターネット上を経由するため不可能ですが、安全にやり取りする方法があるので、それを駆使するのが無難なようです。暗号化や認証をすることでVPNは安全性を高めることがきます。

さて、ここまできたら大体VPNのイメージがわかったのではないでしょうか。

技術者としての具体的なVPNの構築方法は、クライアントソフトやAWSなどのクラウドサービスによって異なります。

そのネットワークや実現したいことに合わせて、随時使いやすいツール導入したり、アーキテクチャを考える必要がありそうですね。

この記事では詳しい導入手順は記述しませんが、OpenVPNというソフトの紹介をAWSサービスを関連付けて簡単にみていきたいと思います。

OpenVPN

OpenVPNは、MacOS, WindowsLinuxで利用できるオープンソースVPNソフトです。

GPLというライセンス形態で配布されていて、もちろん無料です。

GPL(General Public License)とは、オープンソース フリーソフトウェア用のライセンスの1つで、著作権表示を保持しなければならないといことと、このソフトを使用して損害があったとしても自己責任ですよ。それさえ守れば複製・改変・頒布はOKというライセンスルールです。

以下、公式ドキュメントになります。詳しいことはここを覗いてみましょう。

OpenVPNとは | OpenVPN.JP

このソフトとAWSサービスをセットでアーキテクチャを構築している組織も多いでしょう。

構築したいアーキテクチャは、それぞれ異なると思いますので、"ほんとに"簡単な流れのみ記述していきます。w

  1. OpenVPNをEC2などにインストール
  2. 認証局など、証明書の発行/設定を行う (参考: https://qiita.com/ohechi/items/7ed8a61194eb1dcca283 )
  3. OpenVPN自動起動を設定
  4. AWS-> VPC -> ルートテーブル/Security Groupなど設定
  5. クライアント側のOpenVPNを利用するための設定(OpenVPN GUIなどダウンロード)

ほんとにざっくりですが、主にポチポチで済む作業がほとんどですね。

また、macの場合はクライアントアプリとしてTunnelblickが良いと思います。

tunnelblick.net

.crt , .key , /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/client.conf -> xxxxx.ovpn

このようなファイルは大切に、導入後もきちんと管理できるディレクトリに置いておきましょう。(クライアント側)

まとめ

簡単ですが、VPNについて書きました。

利用はしたことはあるけど、構築をする機会やあんまり勉強してないや!ってかんじでも

最低限ここまで抑えることができたら、あとは構築する組織のネットワークとの相性や使い方との相談です。笑

プログラミング言語のライブラリなどと比べて、そこまでたくさんのツールが用意されているわけではなさそうなので、1度覚えたらあとは応用です!

また、今回はサイト間VPNについては詳しく記述していません。

専用のルーターや回線をひくことになるので、情シスさんやインフラ屋さんは、通信事業者と相談することになるでしょう。

AWSを利用している組織は、

AWS Direct Connectなんかも関連して、概要だけでも知っておくのはありかもしれません。

aws.amazon.com

以上.

参考

【AWS】boto3で扱うprofile

今回はAWSPythonを使用してなにかコードを記述するときに使用するprofileの扱い方についてです。

Pythonだとboto3をしようする場面がおおいと思います。

また、AWSサービスを利用するにあたって、1人(またはチームや部署、プロジェクト)でいくつかのcredential情報をしようするかと思います。

また会社によっては、1つのプロジェクト(システム)に複数人のcredential情報を使用して、自由にw開発しちゃってる場合も...

まあそれは組織や考え方で様々ですが、boto3において柔軟にcredential情報を扱う方法をメモしていきます。

boto3とは?

aws.amazon.com

簡単にPythonAWSサービスを容易に統合できるライブラリですね。

インストールも簡単です。

$ pip install boto3
$ pip3 install boto3

ここで抑えておきたいのは、低レベル / 高レベル インターフェイスということば。

AWSによると以下の認識でいいのかなと思います。

  • 低レベル: 実現したいことのために、細かい事を指定する (client)
  • 高レベル: 実現したい事だけ指定する (resource)

以下の公式ドキュメントでは、AWSサービスごとに使用できるクラスが記載されています。

Available Services — Boto 3 Docs 1.9.170 documentation

本題に入ります。

boto3を使用する際、AWSのクレデンシャル情報を如何にして取得するか確認してみます。

Credentials (クレデンシャル)の設定

わたしはいつもローカルで開発する際、.awsディレクトリにconfigとcredentialsというファイルを置いています。

そして、そこに記述しているprofile情報をpythonに渡していたりしますが、それがベストプラクティスなのか確認したいと思います。

credential情報の取得して、他には環境変数に設定しているのを取得したり、そのままコードのべた書きしたり(よろしくないですね笑)できますかね。

AWS的にはなにを推奨しているのか、

以下のドキュメントに記載してありました。

Credentials — Boto 3 Docs 1.9.170 documentation

ちょっとまとめてみると、

boto3がcredential情報を取得しにいく優先順位として以下になるようです。

  1. Passing credentials as parameters in the boto.client() method
  2. Passing credentials as parameters when creating a Session object
  3. Environment variables
  4. Shared credential file (~/.aws/credentials)
  5. AWS config file (~/.aws/config)
  6. Assume Role provider
  7. Boto2 config file (/etc/boto.cfg and ~/.boto)
  8. Instance metadata service on an Amazon EC2 instance that has an IAM role configured.

訳:

  1. boto.client()メソッドで、パラメータが設定される
  2. Sessionオブジェクトを生成して、パラメータが設定される
  3. 環境変数の設定
  4. ~/.aws/credentials での設定
  5. ~/.aws/config での設定
  6. AssumeRoleを使用 (AWS STS)
  7. Boto2の /etc/boto.cfg and ~/.boto の設定
  8. IAMロールが設定されているAmazon EC2インスタンスインスタンスメタデータサービス

ちょっとAWS STSはなるほど!ってかんじでしたが、大体予想通りの展開ですね。

ここからはチームや個人の方針に委ねられるかんじもしますが、

基本的には4や5が良さそうなかんじでしょうか。

2と4でもいけますかね。

仮にコンソール上で実行するようなものであれば、ファイル実行者に.aws/配下に設定されているprofile情報をオプションで入力させ、権限さえあれば実行できそうです。

環境変数でも場合によっては、悪くなさそう。

AWSコンソールのLambdaのメニューからなら環境変数を簡単に入力できますね。(もちろんそれを良しとして、きちんとLambdaへの権限が設定されていたりすればですが)

まとめ

実際きちんと公式を読むと推奨されている事柄が把握できました。

どんなツールでも向き不向きがあるように、できるだけ開発者の意図に沿った使い方ができれば後の運用や保守も少しは楽になりそうですね。

意外と見落としがちな点かもしれませんが、チームや組織、プロジェクトの方針を最初にバチッと決めておくと、

メンバーがハッピー(楽)に開発できそうです!

参考

【Python】datetimeでハマったこと...

今回はPythondatetimeというライブラリについてです。

ちょっと久々Pythonコードを書いていて、エラーがずーーーーっと出て、20分くらい「なんでやねん!」

ってなってたところがあるので、少しですがメモ程度に記事します。

※このモジュールの詳しい使い方はここでは説明しません。

まえおき

Pythonを書いたことがある人は1度は絶対に見たことがあるだろうdatetime

主に時間(日付など)に関するデータを扱うときに使用するかと思います。

今回、わたしも指定した期間の毎月1日を出力するコードを書いている時に使用しました。

このdatetimeには、3つの型があるようです。

  • datetime
  • date
  • time

ふむふむ、と。

エラー

まずテストでちょっとコードを書いてみました。

today = datetime.date.today()

まあ、なんてことないプログラムです。

それに続けてちょっとコード書いて実行したら....

AttributeError: 'method_descriptor' object has no attribute 'today'

「お?」

今日の日付すら出力できないありさまに。。。

前も同じコード書いてこともあるし、ググってもやはり問題はなさそう。

如何にしても駄目だったので、エラーをググってみたところ以下の質問がヒット。

https://teratail.com/questions/164127

理由

上記の質問での回答者の方が答えているように、

なんとdatetimeライブラリ、「ライブラリ名とクラス名が同じなんだ!」笑

よくpythonの日付処理の記事は目にしますが、importの仕方にわたしは問題がありました。

今回記述していた書き方は、こんなかんじ。

from datetime import datetime, date, timedelta

ちょっと違うプログラムで、こういう書き方をすることがあって、

(datetime.datetimeの下にもdateメソッドがあって、datetimeの下にもdateクラスがある...)

そこから持ってきていたからいつものimport datetimeこの書き方でなかった...

調べていると、2年前くらいにも同じこと調べた気がする...

まあ、コピペはいけませんがw、さすがにこれはdatetimeライブラリの作りが悪い!!!!

ってことにしたいです。笑

以上.

【インフラ】motdをカスタマイズ!!

少し投稿が止まってしまいました...

今回は小ネタ的な内容になります!

インスタンス(サーバー)にSSH接続した時に出る、格好いい文字!

こんなの↓

f:id:o21o21:20190524113903p:plain

ローカル環境構築してるときや、

開発において環境ごとになにか作業する時に、目立つmotd を設定していたほうがいいですよね! (まあ小ネタ的なかんじなので、しっかり接続方法を管理しておけばいいというのはおいておいて...)

なので、motd (Message Of The Day) の変更方法をメモがてら記事にしました。

※ OSによって若干の変更方法が違い場合もあるかと思いますが、大まかな手順をわかって頂けたらと思います!

今回のわたしのテスト環境としては、centOSのversion7です。

EPEL設定

$ yum install epel-release
$ yum update

次の手順でfigletというコマンドをインストールするのですが、centOSではデフォルトで

EPELリポジトリが設定されていないようなので、上記のコマンドを実行します。

figletをインストール

$ yum -y install figlet

確認してみる。

$ figlet Hello

 _   _      _ _       
| | | | ___| | | ___  
| |_| |/ _ \ | |/ _ \ 
|  _  |  __/ | | (_) |
|_| |_|\___|_|_|\___/ 
                      

おお、もうできました笑

あとは、適当に用途にあったメッセージをうまーく出力させるだけです。

出力させたら、motdファイルを変更します。

$ vim /etc/motd

# 確認してみる
$cat /etc/motd

これで文字が崩れたりしてなければ、次回以降このOSに接続した際に表示されるはずです。

色をつける

上記では、figletコマンド でやりましたが、こちらのサイトに行って、

そのままFontやら変えてコピペしても大丈夫です笑

ただ、Fontによってうまくいかない場合もありましたので、少し苦戦する場合もありそうです。

あと、日本語にも注意してくだいね!

まとめ

けっこう気になってる方も多いmotdについてでした。

まず私はこれを、「メッセージ オプ ザ デイ」というこも知りませんでした笑

また、他のファイルと合わせて、なにかOSの状態を表示させる方法なんていうのも思いつきますね!

(まあ、ただ接続時の時だから状態は、普通にコマンドで確認ですかねw)

それについては以下の記事が良さそうでした!

motdの設定をしてみた | bacchi.me

今回はちょっと薄い内容でしたが、、

また近いうちに更新できたらと思います、

以上.

【Grafana】Grafanaとは?簡単に調べてみた

今回はGrafanaについて記事を書きました。

まだ、私自身初心者ですので入門編という内容になります。

(どんなツールなの?ってかんじなので、内容は薄めです。)

f:id:o21o21:20190215112536p:plain

こちら、公式サイトです。

grafana.com

Grafanaとは??

いきなり公式ページより引用します。

Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share dashboards with your team and foster a data driven culture.

和訳すると、

Grafanaを使用すると、どこに格納されているかに関係なく、メトリクスのクエリ、視覚化、警告、および理解を行うことができます。ダッシュボードを作成し、調査し、そしてチームと共有し、データ駆動型の文化を育みます。

どうやらKibanaのような視覚化されたダッシュボードがイメージできるかと思います。

メトリクスなのでAWSのCloudwatchとかもイメージできますね。

では、そうしたサービスからの差別化(特徴)はどういったものがあるのでしょうか。

公式で紹介されている特徴を簡単にまとめていきたいと思います。

特徴

主な特徴は以下の6つが挙げられています。

  • Visualize
  • Alert
  • Unify
  • Open
  • Extend
  • Collaborate

簡単に視覚化ができること。ダッシュボードを見てみると、非常に中二病... じゃなくて、キレイな見た目をしています。個人的には、シンプルな見た目をしていると思います。

タブメニューや日付系がまとまっており、ゴチャゴチャしていないのもいいと思います。

もちろん、アラート機能もあってSlackなどのツールに通知を送信することも可能です。

AWSのCloudwatchやZabbixなどのデータソースを統一することができます。

その他プラグインが用意されていて、基本的になんでも実現しそうなツールであることがわかりましたw

どうやらAWSの料金も視覚化できるようです。

オープンソースなので基本無料。また、Grafana Cloudという有料のサービスもあって、現時点(2019.2)、スタンダードで$49/monthで利用可能なようです。

Grafana Cloudの方は、Grafana自体の安定性を保証してくれるようです。

24x7x365って書いてあるので、24時間365日Grafanaの面倒をも見てくれるようです。 用途によっては、かなり安く利用できる方なのではって思ってしましました。

Grafana Cloud: A fast, fully managed metrics platform | Grafana Labs

デモ

以下、公式にあるライブデモです。導入する前に確認してみるといいかもしれません。

play.grafana.org

ドキュメント

docs.grafana.org

ドキュメントに導入方法が載っています。

かなり簡単にインストールできるので1日で体感も可能ですね!

設定

ここでは設定の説明は割愛。

けっこう記事が出てくるのググればたくさん出てくることがわかりました。

公式にはリバースプロキシがある場合の設定なども載っていたので安心ですね!

http://blog.serverworks.co.jp/tech/2016/03/11/play-with-grafana-1/

あとは、チームや個人の意向によって構成が変わってくるので、いろいろ試してみてといったところでしょうか笑

以上.

【AWS】EC2&EBS メモ

EC2 (Amazon Elastic Compute Cloud)

参考と引用: Amazon EC2 とは - Amazon Elastic Compute Cloud

セキュリティグループ、IPの種類(EIP)は記述しない。

インスタンスとAMI

Amazonマシンイメージ(AMI) は、ソフトウェア構成を記録したテンプレート。

f:id:o21o21:20190207092927p:plain:h250:w250

インスタンス

1つのAMIから複数の異なるタイプのインスタンスを起動できる。

インスタンスタイプとは、本質的に、インスタンスに使用されるホストコンピュータのハードウェアを決定するもの。 インスタンスタイプは、インスタンス上で実行するアプリケーションやソフトウェアに必要なメモリの量と処理能力に応じて選択する。

インスタンスの一覧は以下。(インスタンスファミリーによる特徴も記載あり)

インスタンスタイプ - Amazon EC2 (仮想サーバー) | AWS

AWSアカウントでは、稼働できるインスタンスの数に制限がある

オンデマンドインスタンスの実行はインスタンスファミリーをまたいで最大で合計 20 個、リザーブインスタンスの購入は 20 個に制限されます。

インスタンスストレージ

インスタンスのルートデバイスには、インスタンスの起動に使用されるイメージが含まれる。

インスタンスストアボリュームと呼ばれるローカルストレージボリュームを含むことができて、 これはブロックデバイスマッピングによって起動時に設定できる。

しかし、マウントして使用することは可能だが、インスタンスが停止、失敗、終了するとボリュームのデータは失われる。 なので、一時データとして使用するのが最適である。永続的なデータは、S3かEBSボリュームに格納する必要がある。

AMI

AWSは、一般的な用途のためのソフトウェア設定を含む多くのAMIを公開している。

また、自身でAMIを作成することも可能である。

Webサーバー、関連する静的/動的コンテンツ(コード)は、AMIに含まれる。 新しいインスタンスをすばやく起動させるためには最適である。

すべてのAMIは以下からなる。

リージョン(region)とアベイラビリティゾーン(AZ)

f:id:o21o21:20190207111145p:plain:h250:w450

インスタンスを起動するときは、同じリージョン内にあるAMIを選択する。 別リージョンで起動させたい場合は、AMIを使用したいリージョンにコピーして使用することができる。

※ リージョン間でのデータ転送は料金がかかる。また、各AWSサービスにとって、グローバルサービスなのか、リージョン内サービスなのかは重要になってくる。

AZは、us-east-1aなどと表記される。

あるAWSアカウントのAZはap-northeast-1aで、別のAWSアカウントもap-northeast-1aだっとしても、 ap-northeast-1aは同じ場所にない場合もある。

こうしたアカウント間でのAZを調整したい場合、AZ IDを使用する必要がある。

最新のリージョンは随時変更されるので以下で確認。

AWS グローバルインフラストラクチャ | AWS

ルートデバイスボリューム

インスタンスを起動するときは、ルートデバイスボリュームに格納されているイメージを使用してインスタンスがブートされます。

引用: Amazon EC2 ルートデバイスボリューム - Amazon Elastic Compute Cloud

EC2サービスの開発当初はInstance-store backed(ルートデバイスinstance store)がすべてのAMIで採用されていたが、 EBS導入後(2009年後半)、AMIから起動されるインスタンスのルートデバイスが、EBSスナップショットから作成されるEBSスナップショットボリュームであるということになる。

現在、両方の方法を選択可能だが、推奨されるのは高速に起動できるEBS-backedになる。

インスタンスストア

インスタンスストアをルートデバイスに使用するインスタンスでは自動的に、インスタンスストアボリュームを利用できるようになり、そのボリュームの 1 つがルートデバイスボリュームとなります。

引用: Amazon EC2 ルートデバイスボリューム - Amazon Elastic Compute Cloud

インスタンスストアボリュームは、ホストコンピュータに物理的に接続されているディスクからストレージにアクセスする。

終了したり、障害がおきたインスタンスストアのインスタンスはバックアップできない。 スナップショット機能もないし他のEC2に付け替えもできないので、インスタンスストアのデータは複数のAZに分散させておくことが重要である。

  • 再起動(reboot)では消えない!

EBS

Amazon EBS をルートデバイスに使用するインスタンスには自動的に、Amazon EBS ボリュームがアタッチされます。Amazon EBS Backed インスタンスを起動するときに、AMI で参照されている Amazon EBS スナップショットごとに 1 つの Amazon EBS ボリュームが作成されます。

引用: Amazon EC2 ルートデバイスボリューム - Amazon Elastic Compute Cloud

EBSボリュームは、1つのインスタンスからデタッチして別のインスタンスにアタッチすることができる。

再起動後は、アタッチされているボリュームに格納されているデータに影響はない。

また、停止している時、デバッグなどの目的で別のインスタンスにルートボリュームをアタッチできる。

f:id:o21o21:20190207133232p:plain:h250:w350

サイズが最大16TiBで以下のタイプでボリュームを作成できる。

複数のボリュームを同じインスタンスにアタッチ可能。(1度に1つ)

ボリュームの詳細は以下公式ページで確認。

Amazon EBS ボリュームの種類 - Amazon Elastic Compute Cloud

aws.amazon.com

また、クラメソさんからもここに用途などかいてある。(2017年情報)

簡単に、以下の特徴がある。

タイプ 説明
gp2 起動ボリューム、低レイテンシを要求するアプリケーション、開発・テスト環境
io1 I/O性能に依存するNoSQLデータベースやリレーショナルデータベース
st1 ビッグデータ、DWH、ログデータ処理
sc1 スキャンする頻度が低いデータ
マグネティック データアクセス頻度が低い

EBS最適化ありの場合、通常のネットワークとは別にEBSが専用帯域を確保することになる。

EMS最適化をサポートしているインスタンスタイプ一覧。

(最大帯域幅(Mbps), 最大スループット(MB/秒, 128KB I/O), 最大IOPS(16KB I/O))

Amazon EBS – 最適化インスタンス - Amazon Elastic Compute Cloud

バースト

バーストとは、通常は低負荷だが一時的に高性能を出すこと。

バーストを使用するにあたって想定する場合は以下。

ベースライン性能以下の利用時にクレジットが蓄積され、バースト時に貯めたクレジットを消費する。

また、T2 Unlimitedというオプションを使用することで、バースト状態を維持継続することもできる。

f:id:o21o21:20190208102640p:plain:h250:w150

新しいT2 Unlimited – バーストを超え、高い性能を発揮 | Amazon Web Services ブログ

EC2の購入オプション

  • オンデマンド

スタンダードな時間課金型インスタンス

1年間または3年間の利用予約をすることで、割引がされる。

リザーブドインスタンス(RI)- Amazon EC2 | AWS

使われていないインスタンスに入札して格安利用

最大90%程度の大幅なコストカットが見込める

  • Dedicated Host

専用の物理サーバー

過去記事

o21o21.hatenablog.jp

【TCP/IP】マスタリングTCP/IP メモ

マスタリング TCP/IP 入門編(第5版)

マスタリングTCP/IP 入門編 第5版

o21o21.hatenablog.jp

ネットワーク基礎知識

スタンドアロンからネットワーク利用へ

従来、コンピュータは単体で使われていた。その利用形態を スタンドアロン という。

しかし、コンピュータが進化するにつれ複数で利用されるようになる。

コンピュータネットワークを、LANWAN などに分類することができる。

  • LAN

1つの建物や会社など、限られた狭い地域でのネットワーク

  • WAN

都市など、離れた地域のコンピュータやLAN同士を接続したネットワーク

初期のコンピュータネットワークは、プライベートなネットワークを構成していたが、 公共ネットワークとしてインターネットが利用されるようになる。

コンピュータとネットワーク発展の7つの段階

  • バッチ処理(Batch Processing) 1950年代
  • タイムシェアリングシステム(TSS) 1960年代
  • コンピュータ間通信 1970年代
  • コンピュータネットワークの登場 1980年代
  • インターネットの普及 1990年代
  • インターネット技術中心の時代 2000年代
  • 「単につなぐ」時代から「安全につなぐ」時代へ 2010年代

プロトコルとは

さまざまなプロトコルを体系的にまとめたものを、ネットワークアーキテクチャ ということがある。

現在は大きくの機器でTCP/IPが利用できるが、Novel社のIPX/SPX、Apple社のAppleTalkIBM社のSNAなどTCP/IP以外のネットワークアーキテクチャを利用した機器や環境もある。 また、LANで使用されていたIPX、SPXといったプロトコルもあります。

プロトコルが必要な理由

プロトコルは、コンピュータ同士がネットワークを利用して通信するために決められた 約束ごと という意味になる。

メーカーやOSが異なるコンピュータ同士でも、同じプロトコルを使えば互いに通信することができる。 つまり、両者(異なるコンピュータ、メーカーなど)は、同じプロトコルを理解し、処理しなければならないことになります。

パケット(Packet)交換

パケット交換 とは、大きなデータをパケットと呼ばれる単位に分割して送信する方法。

f:id:o21o21:20190129171823p:plain:h250:w350

大きなデータをいくつかのパケットに分ける場合、元のデータのどの部分だったのかを示す番号が書き込まれる。 受け取り側は、この番号を調べることで、小分けされていたデータから元のデータへと組み立てることが可能となる。

通信プロトコルでは、ヘッダ に書き込まれる情報や、その情報がをどのように処理するかを定めている。 つまり、コンピュータはプロトコルに従って、ヘッダを作成したり、ヘッダ内部を解読して処理を行っている。

プロトコルはどこの誰が決めたことが疑問ですが、これついては割愛する。 より詳しく知りたい場合は、ISO(国際標準化機構)やOSIIETFなどと調べればわかりそうです。 とりあえず、現状世界共通で標準化されているということです。

OSI参照モデル

機能 機能イメージ
7 アプリケーション層 特定のアプリケーションに特化したプロトコル
6 プレゼンテーション層 機器固有のデータフォーマットと、ネットワーク共通のデータフォーマットの交換 文字列や画像、音声などの情報の多い表現の違いを吸収。
5 セッション層 通信の管理。コネクションの確率/切断。 いつ切断して、いくつ張る?
4 トランスポート層 両端ノード間のデータ転送の管理。信頼性の提供。 データに抜けがないか
3 ネットワーク層 アドレスの管理と経路の選択。 どの経路で宛先まで届ける?
2 データリンク層 直接接続された機器間でのデータフレームの識別と転送。 フレームとビット列の変換
1 物理層 0と1を電圧の高低や光の点滅を変換。 ビット列と信号の変換

セッション層はコネクションを確立するタイミングやデータを転送するタイミングの管理をしているだけで、 実際にデータを転送する機能はありません。そして、トランスポート層では、データ転送の信頼性を保証する役割をもっています。 なので、実際データを相手に届ける処理は、ネットワーク層ということになります。

(しかし、TCP/IPでは、ネットワーク層トランスポート層が一緒に働くことでパケットを送信することになる。 理由は、データが途中で消失したり、順番が入れ替わったりする可能性があるからである。)

通信方式

ネットワークのデータの配送には、大きく コネクション型コネクションレス に分けることができる。

  • コネクション型

データの送信を開始する前に、送信ホストと受信ホスト間での回線を接続する。

コネクションの確立や切断処理はない。 なので、受信する側は、データを受け取ってないかどうかを常に確認する必要がある。

パケット交換について

現在のネットワークでは、大きく2つの 通信方法 が利用されています。

1つは、回線交換 です。

回線交換では、交換器 がデータの中継処理を行う。コンピュータは、交換機に接続され、交換期間は複数の通信回線で接続される。 1度コネクションが確立されると、コネクションが切断されるまで、その回線は占領される。 問題は、複数のコンピュータを接続し、相互にデータのやり取りを行おうとすると、特定のコンピュータが回線を占領してしまうことである。

そこで、回線に接続しているコンピュータが送信するデータを、複数の小包 に分けて、転送の順番を待つ行列に並べる方法が考え出された。

これを パケット交換 という。

小包みというのは、パケット のことで、細分化される。それぞれのパケットには、ヘッダ があり、そこには自分のアドレスや送信先のアドレスが書き込まれているので、 効率的にデータの送受信を行うことができる。

パケット交換では、ルーター(パケット交換機) によって通信回路が結ばれる。 ルーターの中には、バッファ と呼ばれる記憶領域がある。流れてきたパケットは、バッファに格納される。 パケット交換の場合、コンピュータやルーター間には通常 1つの回線 しかなく共有利用されるため、 ネットワークの混雑度によってパケットの到着間隔が左右される。

アドレスとは

通信の送信元と送信先は、アドレス によって特定される。

コンピュータ通信では、MACアドレスIPアドレスポート番号 などが利用される。電話では、電話番号がアドレスにあたる。 アドレスは通常、ユニーク(唯一) でなければならない。

アドレスは、その総数が多くなると階層性をとらなければなりません。

コンピュータ通信において、MACアドレスIPアドレスは、両方とも唯一性はあるものの、階層性はIPアドレスのみにある。

MACアドレスは、ネットワークインターフェイスカードごとに製造者識別子と製造者内の製品番号、製品のごとの連番が付けられている。 ユニークではあるが、どのネットワークインターフェイスカードが、世界中のどこで使用されるかは特定する手段はない。

なので、IPアドレスが必要になると考えることが可能です。

IPアドレスは、ネットワーク部ホスト部 という部分から構成されている。

f:id:o21o21:20190129171601p:plain

こうすることで階層性が成り立ち、組織やグループなどに接続しやすいようになっている。 また、MACアドレス転送表 を、IPアドレス経路制御表(ルーティングテーブル) を元にして通過点では行き先を特定していく。

ネットワークの構成要素

リピーター

リピーター は、OSI参照モデルの第1層物理層で、ネットワークを延長する機器 である。

ケーブル上を流れてきた電気や光の信号を受信し、増幅や波形の整形などする。 また、通信媒体を変換できるリピーターも存在する。同軸ケーブル光ファイバーの間の信号を変換する。

ブリッジ / レイヤ2スイッチ

ブリッジ は、OSI参照モデルの第2層データリンク層で、ネットワーク同士を接続する装置 である。

ルーター / レイヤ3スイッチ

ルーター は、OSI参照モデルの第3層ネットワーク層で、ネットワークとネットワークを接続して。パケットを中継する装置のこと である。

ルーターは、ネットワーク層のアドレスで処理を行う。(TP/IPであれば、IPアドレスになる) また、ルーターはネットワークの負荷も仕切ったり、セキュリティ機能も備えてたりする。

レイヤ4-7スイッチ

レイヤ4-7スイッチ は、OSI参照モデルトランスポート層〜アプリケーション層の情報に基いて配送処理を行う

イメージしやすいのは、ロードバランサーである。 負荷分散や音声通話のような即応性が求められる通信を優先したり、不正なアクセス防止のためのファイアウォールなどで利用される。

ゲートウェイ

ゲートウェイ は、OSI参照モデルトランスポート層〜アプリケーション層の階層で、データを交換して中継する装置のこと である。

レイヤ4-7スイッチのようにパケットを処理しデータの中継だけでなく、データを変換する役割があります。 (特にインターネットの電子メールと携帯電話の電子メールの交換するサービスは有名である。)

携帯電話による通信

一般的に携帯電話に電源を入れると、最寄りの 基地局 と通信が行われる。基地局には、契約しているキャリアの携帯電話用アンテナが設置されている。 基地局に集められた情報が エッジ(局舎) に集約され、エッジ間の基幹ネットワークに接続されているという構成は、インターネット接続と同様である。

TCP/IP 基礎知識

インターネットとは、全世界を接続しているコンピュータネットワークのこと。 インターネットのプロトコルといえばTCP/IP で、TCP/IPといえば インターネットプロトコル である。

f:id:o21o21:20190206115422p:plain:h250:w450

書籍や記事によって、TCP/IP階層モデルは4つだったり5つだったりすることもあるでしょう。 ここでは、4つに分けてモデルの図を書きました。

ネットワークインターフェイス

実際、最下位層には物理的にデータを転送してくれるハードを置いているす。このハードとは、電話回線やイーサネットのこと。(物理層)

ネットワークインターフェイス は、イーサネットなどのデータリンクを利用して通信するためのインターフェイスとなる階層である。

つまり、NICを動かすデバイスドライバとして考えても問題ない。

インターネット層

インターネット層 では、IPプロトコル が使用される。

IPプロトコルは、IPアドレスを元にパケットを転送する。

インターネット層トランスポート層 は、一般にホストOSに組み込まれていることを想定している。 よって、インターネットに接続されるすべてのホストやルーターは、必ずIPの機能を実装しなkればならない。

トランスポート層

トランスポート層 の最も重要な役割は、アプリケーションプログラム間の通信を実現すること。

コンピュータでは、複数のプログラムが同時に処理されているのは当たり前です。なので、どのプログラムが通信しているかを識別する必要があります。 アプリケーションのプログラムの識別には、ポート番号 があります。

アプリケーション層

(OSI参照モデルのセッション層,プレゼンテーション層,アプリケーション層は)アプリケーションプログラムの中で実現される。

パケットヘッダ

f:id:o21o21:20190206115101p:plain:h250:w350

各階層では、送信されるデータに対して、ヘッダ という情報が付与される。 その階層で必要とされる情報が組み込まれるので(送信元,送信先など)、プロトコルのための情報ということ。

例えば、トランスポート層ではTCPヘッダが付与され、インターネット層でIPヘッダが付与されるといった具合です。

データリンク

データリンク というとOSI参照モデルデータリンク層を指す場合もあるが、具体的な通信手段(イーサネット無線LANなど) を指してこの用語使う場合もある。

データリンク層プロトコルは、通信媒体で直接接続された機器k何で通信するための仕様を定めている。 通信媒体は、以下のようなものがある。

また、スイッチやブリッジ、リピーターが機器間で中継する場合もある。

実際に機器間の通信を行う場合、データリンク層物理層がともに必要になる。 データは2進数の0と1で表現されるが、実際の通信媒体でやり取りされるのは電圧の変化や光の点滅、電波の強弱など。 この2進数を変換させるのは、物理層の仕事になる。データリンク層は、単なる0と1の列でなく、フレーム というかたまりにまとめて相手の機器に伝える。

データリンクは、ネットワークの 最小単位 といってもいい。 インターネットによる通信は、細かくみるとデータリンクが集まったデータリンクの集合体とみることができる。 例えば、1つのリピーターを介して2つのケーブルで接続したとき(2つのデータリンクは)、 ネットワーク層からみると1つのネットワークで、物理層からみると2つのセグメント。

イーサネット

現在もっとも普及しているのが、Ethernet(イーサネット) である。

もともとは、Xerix社と旧DEC社が考案した通信方式で、Ethernet命名された。 その後、IEEE802.3委員会によって規格化され、フレームのフォーマットが異なる。なので、802.3Ethernetは、IEEE802.3委員会で規格化された方を指す。

制御の仕組みが単純まため、NICデバイスドライバが作りやすいという特徴がある。 LANの普及期に他のNICより安価で販売されていたことも、普及した理由の1つである。

Ethernetには、通信ケーブルや速度の違う多くの種類が存在する。

例、10BASE5

  • 10 -> 伝送速度
  • 5 -> 媒体

無線通信

無線通信ではk電波や赤外線、レーザー光線などで利用する。(ケーブルは不要)

以下、無線通信の種類。

分類 通信距離 規格化団体など 技術名称
短距離無線 数m 個別 RF-ID
無線PAN 10m前後 IEEE802.15 Bluetooth
無線LAN 100m前後 IEEE802.11 Wi-Fi
無線MAN 数km〜100km IEEE802.16,IEEE802.20 WiMAX
無線RAN 200km〜700km IEEE802.22
無線WAN - GSM,CDMA2000,W-CDMA 3G,LTE,4G

無線LAN IEEE802.11

IEEE802.11 は、無線LANプロトコル物理層とデータリンクリンク層の一部(MAC層)を定義した規格。

f:id:o21o21:20190206115140p:plain:h250:w550

VPN (Virtual Private Network)

IPネットワーク(インターネット)VPNを構築します。

MPLS は、ラベルと呼ばれる情報をIPパケットに付加して通信を制御します。 このラベルを、顧客ごとに異なるように設定し、MPLS網を通過するさいに、このラベルで宛先の判断を行う。 これにより、複数の顧客のVPNを1つのMPLS網上で区別し、保護されて閉じた形のプライベートなネットワークとして利用する。

IPプロトコル

TCP/IPの要 インターネット層。主に IPとICMP という2つのプロトコルから構成される。

OSI参照モデルネットワーク層に相当する。 終点ノード間の通信を実現する (end-to-end) ことが役割である。 データリンクを超えた通信をするためには、ネットワーク層が必要である。

※ ホスト(IPが付けられた機器)とルーター(IPが付けられていて経路制御を行う機器)を合わせて、ノード という。

2つのブロードキャスト

ローカルブロードキャスト とは、自分が属しているリンク内のブロードキャストのこと。

ダイレクトブロードキャスト とは、異なるIPネットワークへのブロードキャストには、ダイレクトブロードキャストアドレスを指定。

プライベートアドレス

インターネットの急速な普及により、IPアドレスが不足している。 そこで、すべてのルーターやホストにユニークなIPアドレスを割り当てることをやめて、必要なところに必要なだけ割り振るということにした。 しかし、個々のネットワークで好きなIPアドレスを割り振っていては、問題を引き起こす可能性がある。

そこで、プライベートアドレス が誕生した。

以下、プライベートアドレスの範囲。

範囲 クラス
10.0.0.0 〜 10.255.255.255 10/8 クラスA
172.16.0.0 〜 172.31.255.255 172.16/12 クラスB
192.168.0.0 〜 192.168.255.255 192.168/16 クラスC

この範囲外のIPアドレスは、グローバルIPアドレス になる。

プライベートIPアドレスは、当初、インターネットとの接続を考えない ネットワークで利用されていたが、 グローバルIPアドレスとプライベートIPアドレス間でアドレス交換をする NAT技術 が誕生した。

MTU

最大転送単位 (MTU) は、データリンクによって異なる。

IPはデータリンクの上位層にあって、データリンクのMTUの大きさに左右されることなく利用できなければならない。

参考

  • 引用: マスタリングTCP/IP 入門編 第5版