2016年5月25日水曜日

AWS開始1年間の無料枠適用サービスと制限まとめ

このエントリーをはてなブックマークに追加
AWSアカウントを作って利用開始すると1年の無料枠が使えるんだけど、1年すぎても無料枠があって使えるものもあるのでメモ。

赤は1年間無料で使えるもの、青は1年過ぎても無料枠が設定されているもの。
Amazon EC2
クラウド内でサイズ変更可能なコンピューティング性能。

750 時間 1 か月あたりの LinuxRHEL、または SLES t2.micro インスタンスの使用量
750 時間 1 か月あたりの Windows t2.micro インスタンスの使用量
 例えば、1 インスタンスを 1 か月使用、または 2 インスタンスを半月使用
 サインアップから 12 か月で有効期限が切れます。
Amazon S3
高スケーラブル、高信頼性、低レイテンシーのデータストレージインフラストラクチャ。
5 GB 標準ストレージ
20,000 件の Get リクエスト 
2,000 件の Put リクエスト 
 サインアップから 12 か月で有効期限が切れます。
Amazon RDS
MySQLPostgreSQLMariaDBOracle BYOL または SQL Server のためのマネージド型リレーショナルデータベースサービス。
750 時間 Amazon RDS Single-AZ db.t2.micro インスタンスの使用
20 GB DB Storage: General PurposeSSD)または Magnetic の任意の組み合わせ
20 GB バックアップ(RDS Magnetic ストレージを使用。 General Purpose [SSD] 上の I/O は別々に請求されません)
1,000 I/O 
サインアップから 12 か月で有効期限が切れます。
AWS IoT
デバイスをクラウドに接続
250,000 件のメッセージ 毎月 (公開または配信)
 サインアップから 12 か月で有効期限が切れます。
Amazon EC2 Container Registry
Docker イメージの保存と取得
毎月 500 MB ストレージ
 サインアップから 12 か月で有効期限が切れます。
AWS Lambda
イベント発生時にお客様のコードを実行し、コンピューティングリソースを自動的に管理するコンピューティングサービス
100 万件 1 か月当たりの無料リクエスト数
1 か月あたり最大 320 万秒 のコンピューティング時間
 12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。 
Elastic Load Balancing
アプリケーションの着信トラフィックの複数の Amazon EC2 インスタンスへの自動分散。
750 時間 (1 か月あたり)
15 GB データ処理
 サインアップから 12 か月で有効期限が切れます。
Amazon DynamoDB
シームレスな拡張性を備えた、高速で柔軟な NoSQL データベースサービスです。
25 GB ストレージ
25 ユニット 書き込み容量
25 ユニット 読み込み容量
 1 か月当たり最大 2 億リクエストの処理が十分に可能。 
12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。
Amazon CloudFront
低レイテンシーかつ速いデータ転送速度で、エンドユーザーにコンテンツを配信するウェブサービスです。
50 GB データ転送 (アウト)
2,000,000 HTTP および HTTPS リクエスト
 サインアップから 12 か月で有効期限が切れます。
Amazon Elastic Block Storage
実行中の Amazon EC2 インスタンスに接続できる、高可用性、高信頼性、および予測可能性を備えたストレージボリューム。
30 GB Amazon EBS: 汎用 (SSD) または Magnetic の任意の組み合わせ
200 I/O  EBS Magnetic
1 GB スナップショットストレージ
 サインアップから 12 か月で有効期限が切れます。
Amazon ElastiCache
メモリ内キャッシュのデプロイ、運用、スケーリングをクラウド内で簡単に実行できるウェブサービス。
750 時間 十分な時間
 毎月マイクロキャッシュノードを継続的に実行するのに
 サインアップから 12 か月で有効期限が切れます。
Amazon Redshift
高速、シンプル、費用対効果の高いデータウェアハウス
2 か月間無料  
DC1.Large 750 時間 2 か月間、1 か月あたり
 サインアップから 2 か月で有効期限が切れます。
AWS Data Pipeline
データ駆動型ワークフローに対するオーケストレーションです。
3 個の低頻度の前提条件  
5 個の低頻度のアクティビティ  
 サインアップから 12 か月で有効期限が切れます。
Amazon Elasticsearch Service
AWS クラウドの Elasticsearch クラスターを、簡単にデプロイ、運用、スケールするマネージドサービス
750 時間 single-AZ t2.micro.elasticsearch インスタンスの使用量
1 か月あたり 10 GB オプションの EBS ストレージ (磁気または汎用)
 サインアップから 12 か月で有効期限が切れます。
Amazon Cognito
モバイルユーザー ID と同期。
 Your User Pool 機能には、各月 50,000 MAU の無料利用枠があります。**
 Amazon Cognito で、ユーザーの認証およびユニークアイデンティティの付与にフェデレーティッドアイデンティティ機能を使用する場合、課金が発生することは一切ありません。**
10 GB クラウド同期ストレージ。サインアップから 12 か月で有効期限が切れます。
100 万件 毎月の同期操作。サインアップから 12 か月で有効期限が切れます。
AWS Device Farm
iOSAndroidFireOS のアプリを AWS クラウド内の実際のデバイスでテスト
1 回限り、250 デバイス分の無料トライアル 
 12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。
Amazon Mobile Analytics
スピーディで安全なモバイルアプリケーションの使用分析。
1 億回 毎月の無料イベント
 12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。 
Amazon SNS
スピーディかつ柔軟な、完全マネージド型の PUSH メッセージングサービス
100 万件の発行 
100 万件のモバイルプッシュ配信 
10 万件の HTTP/S 配信 
1,000 件のメール配信 
12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。 
AWS CodeCommit
高度にスケーラブルなマネージド型ソースコントロールサービス
5 アクティブユーザー (1 か月あたり)
50 GB – 1 か月当たりのストレージ
10,000 Git のリクエスト 1 か月あたり
 12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。 
AWS CodePipeline
速度と信頼性に優れたアプリケーション更新を実現する継続的デリバリサービス

1 アクティブパイプライン (1 か月あたり
 12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。
AWS Key Management Service
AWS Key Management Service は、管理制御で暗号化を容易にするマネージドサービスです。
2 万件 1 か月当たりの無料リクエスト数
 12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。 
Amazon CloudWatch
AWS のクラウドリソースとアプリケーションをモニタリングします。
10 カスタムメトリックスおよび 10 アラーム  
100 万件の API リクエスト  
5 GB のログデータの取り込みおよび 5 GB のログデータのアーカイブ 
毎月最大 50 メトリックスのダッシュボード 3  
12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。 
AWS Trusted Advisor
AWS クラウド最適化エキスパート。

4 回のベストプラクティスチェック  パフォーマンスとセキュリティ (サービスの制限、セキュリティグループ、IAM、および MFA)
通知とカスタマイズ機能 
 サインアップから 12 か月で有効期限が切れます
Amazon API Gateway
スケールを問わない API の発行、維持、監視、セキュリティ確保
100 万回の API 呼び出しの受信 (1 か月あたり)
 サインアップから 12 か月で有効期限が切れます。
Amazon AppStream
Windows アプリケーションを任意のデバイスに配信可能。

20 1 か月当たりの無料時間枠
 サインアップから 12 か月で有効期限が切れます。
Amazon Elastic Transcoder
完全マネージド型メディアトランスコーディングサービス。

20 オーディオトランスコーディング
20 SD トランスコーディング
10 HD トランスコーディング
 サインアップから 12 か月で有効期限が切れます。
Amazon SES
コスト効率に優れたクラウドでのメールサービスです。

62,000 件の送信メッセージ Amazon EC2 インスタンスから直接、または AWS Elastic Beanstalk を介して Amazon SES を呼び出す際に、任意の受取人に送信できます (1 か月あたり)
1,000 件の受信メッセージ 1 か月あたり
 12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。
Amazon SQS
コンピュータ間でやり取りされるメッセージを格納するためのスケーラブルなキューです。

100 万件のリクエスト  
 12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。 
Amazon SWF
クラウドアプリケーション用のタスクコーディネーションと状態管理サービスです。

10,000 件のアクティビティタスク  
30,000 日のワークフロー日  
1,000 回の実行 
 12 か月間の AWS 無料利用枠期間終了後にも期限切れになりません。

2016年5月23日月曜日

Apache http 2.4.20をソースからインストール

このエントリーをはてなブックマークに追加
最近、仕事ではyumでインストールを求められることが多かったので、ソースからインストールを久しぶりにしたのでメモ。
Apache httpdをtar.gz形式でダウンロード。
$ tar -xvzf httpd-2.4.20.tar.gz
できたhttpd-2.4.20の下へ移動してconfihureを実施する。
$ ./configure --enable-so --enable-rewrite --enable-proxy
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
configure:
configure: Configuring Apache Portable Runtime library...
configure:
checking for APR... no
configure: error: APR not found.  Please read the documentation.
そうだ、確か2.4からAPRtAPR-Utilがソースのセットから外出しになっていたんだった。なのでAPRとAPRUtilをソースでダウンロードし解凍してできたディレクトリ毎、httpd2.4.20/srclib配下へ移動させ、上記のconfigureをもう一度やり直す。
$  wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.5.2.tar.gz
$  wget http://ftp.kddilabs.jp/infosystems/apache//apr/apr-util-1.5.4.tar.gz
$ tar -xvzf apr-1.5.2.tar.gz
$ tar -xvzf apr-util-1.5.4.tar.gz
$ mv apr-1.5.2 ./httpd-2.4.20/srclib/apr
$ mv apr-util-1.5.4 ./httpd-2.4.20/srclib/apr-util
$ ./configure --enable-so --enable-rewrite --enable-proxy
checking for chosen layout... Apache
::
::
何もなければmake, make installする
$ make
$ make install
httpd.confを一部修正。mod_slotmem_shm.soをIncludeするようにコメントアウトされているものを有効にする。
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
httpd起動する。
# usr/local/src/httpd-2.4.20# /usr/local/apache2/bin/apachectl start

2016年5月22日日曜日

IDCFクラウドをAPIから使う(VM作成編)

このエントリーをはてなブックマークに追加
IDCFクラウドをAPIから使う(準備編)でCLIから使えるようにしたので簡単にサクっと作ってみた。

IDCFクラウド API Referencesを見たけど、利用できるAPIは限られているけど普段使いにはあまり問題はなさそう。(英語のままのもあるけど)

とりあえずSSHの認証鍵を生成して、
$ssh-keygen -t rsa
クラウドにアップロードする。
$ cloudstack-api registerSSHKeyPair --name idcf --publickey "$(cat .ssh/生成した公開鍵)" -t
SSH公開鍵がアップロードされたのは、クラウドコンソールで確認してもいいしCLIで確認してもいい。今回はCLIからやってみる。
$ cloudstack-api listSSHKeyPairs -t
+-------------------------------------------------+------------+
|                   fingerprint                   |    name    |
+-------------------------------------------------+------------+
| 31:8a:93:ff:c3:12:8a:ae:19:**:**:**:**:**:**:** | idcf |
+-------------------------------------------------+------------+
マシン生成する。今回作るサーバプランは一番安いlight.S1にしておく。OSはCentOS7.1を選ぶ。念のためサーバプランとOSテンプレートのid確認方法をもう一度。
$ cloudstack-api listServiceOfferings -t id,displaytext
+--------------------------------------+------------------------------------+
|                  id                  |            displaytext             |
+--------------------------------------+------------------------------------+
| 10d303d6-d39f-4b15-80a1-982e86ef002b | highio.3XL128( 24CPU /128GB RAM)   |
| 12e39b73-3ce6-4e57-9036-3dac0c2b2b06 | highmem.M16( 2CPU / 16GB RAM )     |
| 354c62e6-b99b-42f2-b5c7-e741f1085422 | standard.XL32( 8CPU / 32 GB RAM )  |
| 435c1aab-e796-42c7-9320-22ebdc8f50aa | highcpu.L8( 4CPU / 8GB RAM )       |
| 55621f17-4d38-457c-ba34-e6199701b67b | standard.S4( 1CPU / 4GB RAM )      |
| 6a99ff4c-1a24-4aa6-b4cc-600220987ed0 | standard.L16( 4CPU / 16GB RAM )    |
| 6fda5e0c-e64d-46ea-893d-7e2ac9e128e7 | highcpu.XL16 ( 8CPU / 16GB RAM )   |
| 7ae143a6-5662-4f1d-bc4c-10defa775bcb | standard.M8( 2CPU / 8GB RAM )      |
| 7c548831-427b-437c-9c8b-80dde8031303 | highcpu.2XL32( 16 CPU / 32GB RAM ) |
| 8cf15770-c3c8-4efc-8ae5-b8327790db76 | highcpu.M4( 2CPU / 4GB RAM )       |
| 95edba75-7cb5-4654-a2f5-f40b7acf7a57 | standard.S8( 1CPU / 8GB RAM )      |
| 9a2f3ee4-af46-4790-9331-753674c16e68 | highio.5XL128( 40CPU /128GB RAM)   |
| d1aac6d2-bb47-4106-90d0-6a73ac3ae78e | light.S2( 1CPU / 2GB RAM )         |
| d59817bc-ed79-4083-8b71-51b26c76d311 | highmem.L32( 4CPU / 32GB RAM )     |
| e01a9f32-55c4-4c0d-9b7c-d49a3ccfd3f6 | light.S1( 1CPU / 1GB RAM )         |
| ec13a7d8-26ce-4c4e-a223-7ef832bb1243 | light.S2( 1CPU / 2GB RAM )         |
| ee5ee568-76b2-46ad-9221-c695e6f2149d | highmem.XL64( 8CPU / 64GB RAM )    |
+--------------------------------------+------------------------------------+
$ cloudstack-api listTemplates --templatefilter executable -t name,id | grep Cent | grep "7\.1"
| CentOS 7.1 64-bit                                   | ee7bc439-0186-49b4-82e4-bf821db89601 |
| CentOS 7.1 64-bit                                   | ee7bc439-0186-49b4-82e4-bf821db89601 |
| CentOS 7.1 64-bit                                   | ee7bc439-0186-49b4-82e4-bf821db89601 |
| CentOS 7.1 64-bit                                   | ee7bc439-0186-49b4-82e4-bf821db89601 |
| CentOS 7.1 64-bit                                   | ee7bc439-0186-49b4-82e4-bf821db89601 |
| CentOS 7.1 64-bit for Vagrant                       | aa39af2c-a91e-4c7d-8bf1-4e4754959b11 |
| CentOS 7.1 64-bit for Vagrant                       | aa39af2c-a91e-4c7d-8bf1-4e4754959b11 |
| CentOS 7.1 64-bit for Vagrant                       | aa39af2c-a91e-4c7d-8bf1-4e4754959b11 |
| CentOS 7.1 64-bit for Vagrant                       | aa39af2c-a91e-4c7d-8bf1-4e4754959b11 |
| CentOS 7.1 64-bit for Vagrant                       | aa39af2c-a91e-4c7d-8bf1-4e4754959b11 |
| Hatohol 15.06 on CentOS 7.1                         | eedabe07-5f0e-4822-b9d9-6bbb4a04de85 |
| Hatohol 15.06 on CentOS 7.1                         | eedabe07-5f0e-4822-b9d9-6bbb4a04de85 |
| Hatohol 15.06 on CentOS 7.1                         | eedabe07-5f0e-4822-b9d9-6bbb4a04de85 |
| Hatohol 15.06 on CentOS 7.1                         | eedabe07-5f0e-4822-b9d9-6bbb4a04de85 |
| MIRACLE ZBX 2.2.11 on CentOS 7.1                    | 9cf7a110-caaa-4ae5-807c-218c80c88f31 |
| MIRACLE ZBX 2.2.11 on CentOS 7.1                    | 9cf7a110-caaa-4ae5-807c-218c80c88f31 |
| MIRACLE ZBX 2.2.11 on CentOS 7.1                    | 9cf7a110-caaa-4ae5-807c-218c80c88f31 |
| MIRACLE ZBX 2.2.11 on CentOS 7.1                    | 9cf7a110-caaa-4ae5-807c-218c80c88f31 |
テンプレートは同じのが表示されるが気にせず、このidを使おう。ZoneIDはクラウドコンソールの「ゾーン管理」から「有効」になっているものを使う。僕の場合はradianだった。group、displayname、nameはお好みで。
$ cloudstack-api deployVirtualMachine --serviceofferingid e01a9f32-55c4-4c0d-9b7c-d49a3ccfd3f6 --templateid ee7bc439-0186-49b4-82e4-bf821db89601 --zoneid a53ff3d3-042b-4cbd-ad16-494bb8d33e06 --group highmountain --displayname highmountain --name highmountain --keypair keypairname
正常に終わるとJSON形式でidとjobidが返ってきた。
{
  "deployvirtualmachineresponse": {
    "id": "...",
    "jobid": "..."
  }
}
この後クラウドコンソールから確認すると仮想マシンがRunning状態でできていた。
コマンドからも確認してみる。
$ cloudstack-api listVirtualMachines -t

ここでインターネットから接続するためにPublicIPを確認する。
$ cloudstack-api listPublicIpAddresses -t id,ipaddress
+--------------------------------------+---------------+
|                  id                  |   ipaddress   |
+--------------------------------------+---------------+
| 205e7e75-aae1-4de9-a1fe-b79e4947a715 | xxx.xxx.xxx.xxx |
+--------------------------------------+---------------+
ソースIPはNATできないのでポートフォワードの設定をする。今回はSSH。
$ cloudstack-api createPortForwardingRule --ipaddressid 205e7e75-aae1-4de9-a1fe-b79e4947a715 --privateport 22 --protocol TCP --publicport 22 --virtualmachineid f3991f90-0962-4948-a965-508c013700c6
クラウドコンソールからも確認できるが、これもコマンドから確認できる。
$  cloudstack-api listPortForwardingRules -t
ここでSSHしてみるとログインできる!
$ ssh root@xxx.xxx.xxx.xxx -i ~/.ssh/PrivateKey
    ________  ______   ______                 __  _
   /  _/ __ \/ ____/  / ____/________  ____  / /_(_)__  _____
   / // / / / /      / /_  / ___/ __ \/ __ \/ __/ / _ \/ ___/
 _/ // /_/ / /___   / __/ / /  / /_/ / / / / /_/ /  __/ /
/___/_____/\____/  /_/   /_/   \____/_/ /_/\__/_/\___/_/

[root@hostname ~]#

2016年5月20日金曜日

IDCFクラウドをAPIから使う(準備編)

このエントリーをはてなブックマークに追加
コストの試算を考えるとめんどくさいですけど、クラウドいいですよね。スモールスタートしながらスピード感出して構築できるし。

AWSは押さえておかないといけないですが、今のところ、仕事上、コスト計算しやすいとか大人の事情とかでIDCFクラウドを使うことが多いです。クラウドコンソールからコツコツ作るのもできるけど、せっかくのクラウドなのでAPIからサーバ構築していきたいかなと。基盤にはCloudStackを採用しているようなので、その勉強にもなるし。

ドキュメントはIDCFクラウド API/技術ドキュメントにあるので、これを参照しながら手順はほぼ写経。
gitとpipのインストール

色々と必要なものをインストールしておく。
$ apt-get install --install-suggests git python-pip
 $ apt-get install --install-suggests gcc build-essential libxml2-dev libxslt1-dev python-dev
cloudstack-apiをインストールする。
 $ pip install git+https://github.com/idcf/cloudstack-api
バージョン確認する。
 $ cloudstack-api --version
APIを利用するために設定ファイル(.idcfrc)を作成する。
 
[account]
host=${idcf_end_point}
api_key=${your_api_key}
secret_key=${secret_key}
設定ファイルが効いているか確認する。
 $ cloudstack-api listZones
こんな感じでずらずらと出てきたら成功。
{
  "listzonesresponse": {
    "count": 5,
    "zone": [
      {
        "allocationstate": "Enabled",
        "dhcpprovider": "VirtualRouter",
:
:
:
利用できるゾーンの確認。ちなみに-tは結果をテーブル形式で出力する。何もなければJSON形式で出力される。
 
$ cloudstack-api listZones -t id
+--------------------------------------+
|                  id                  |
+--------------------------------------+
| 9703cdbb-aee7-41ba-ba80-4807eaa68b80 |
| a117e75f-d02e-4074-806d-889c61261394 |
| a53ff3d3-042b-4cbd-ad16-494bb8d33e06 |
| baf86a6e-4e3b-428e-8fd0-7fda43e468d4 |
| f0954b9b-2626-4549-82ad-ca421073b3bc |
+--------------------------------------+
利用できるサーバタイプの確認
 
$ cloudstack-api listServiceOfferings -t id,displaytext
+--------------------------------------+------------------------------------+
|                  id                  |            displaytext             |
+--------------------------------------+------------------------------------+
| 10d303d6-d39f-4b15-80a1-982e86ef002b | highio.3XL128( 24CPU /128GB RAM)   |
| 12e39b73-3ce6-4e57-9036-3dac0c2b2b06 | highmem.M16( 2CPU / 16GB RAM )     |
| 354c62e6-b99b-42f2-b5c7-e741f1085422 | standard.XL32( 8CPU / 32 GB RAM )  |
| 435c1aab-e796-42c7-9320-22ebdc8f50aa | highcpu.L8( 4CPU / 8GB RAM )       |
| 55621f17-4d38-457c-ba34-e6199701b67b | standard.S4( 1CPU / 4GB RAM )      |
| 6a99ff4c-1a24-4aa6-b4cc-600220987ed0 | standard.L16( 4CPU / 16GB RAM )    |
| 6fda5e0c-e64d-46ea-893d-7e2ac9e128e7 | highcpu.XL16 ( 8CPU / 16GB RAM )   |
| 7ae143a6-5662-4f1d-bc4c-10defa775bcb | standard.M8( 2CPU / 8GB RAM )      |
| 7c548831-427b-437c-9c8b-80dde8031303 | highcpu.2XL32( 16 CPU / 32GB RAM ) |
| 8cf15770-c3c8-4efc-8ae5-b8327790db76 | highcpu.M4( 2CPU / 4GB RAM )       |
| 95edba75-7cb5-4654-a2f5-f40b7acf7a57 | standard.S8( 1CPU / 8GB RAM )      |
| 9a2f3ee4-af46-4790-9331-753674c16e68 | highio.5XL128( 40CPU /128GB RAM)   |
| d1aac6d2-bb47-4106-90d0-6a73ac3ae78e | light.S2( 1CPU / 2GB RAM )         |
| d59817bc-ed79-4083-8b71-51b26c76d311 | highmem.L32( 4CPU / 32GB RAM )     |
| e01a9f32-55c4-4c0d-9b7c-d49a3ccfd3f6 | light.S1( 1CPU / 1GB RAM )         |
| ec13a7d8-26ce-4c4e-a223-7ef832bb1243 | light.S2( 1CPU / 2GB RAM )         |
| ee5ee568-76b2-46ad-9221-c695e6f2149d | highmem.XL64( 8CPU / 64GB RAM )    |
+--------------------------------------+------------------------------------+
利用できるテンプレートの確認
 
$ cloudstack-api listTemplates --templatefilter executable -t id,ostypename
+--------------------------------------+---------------------------------------+
|                  id                  |               ostypename              |
+--------------------------------------+---------------------------------------+
| 06c0be30-95e0-4f90-9af5-aa0637974e9b | CentOS 6.4 (64-bit)                   |
| 08d914bc-c632-4179-95ca-7913aca0275e | Red Hat Enterprise Linux 6.4 (64-bit) |
| 107a7aba-0867-4fa6-927d-772944208ba9 | CentOS 6.4 (64-bit)                   |
| 180ec450-2570-4d6c-b2c0-c40316814025 | CentOS 6.4 (64-bit)                   |
| 180ec450-2570-4d6c-b2c0-c40316814025 | CentOS 6.4 (64-bit)                   |
:
:
後は作っていこう。

UbuntuにOpenVPNをインストールしてiPadから接続したい(iPad編)

このエントリーをはてなブックマークに追加
OpenVPNでiPadからVPNをつなぐ野望。その野望を叶えるために利用するのはこのアプリ。OpenVPNによるOpenVPNのためのアプリ。
このアプリにOpenVPNのクライアント設定ファイルをインポートさせるために、ovpnファイルを作る。中はこんな感じ。
tls-client
client
proto udp
dev tun0
nobind
persist-key
persist-tun
verb 3
pull
comp-lzo
reneg-sec 3600
remote (VPNサーバのIPアドレス) (VPNサーバのポート)

ns-cert-type server

key-direction 1
<ca>
-----BEGIN CERTIFICATE-----
オレオレCA証明書
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
クライアント証明書
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
クライアント認証鍵
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
TLS認証鍵
-----END OpenVPN Static key V1-----
</tls-auth>
これをメールでもiTunes経由でもいいのでアプリにインポートして接続するだけ!

これでiPadからVPN接続できる!

2016年5月19日木曜日

UbuntuにOpenVPNをインストールしてiPadから接続したい(サーバ設定)

このエントリーをはてなブックマークに追加
まぁ、色々と試行錯誤しなから少しずつサーバを育ているわけですが、今回はさくらVPSで動いているサーバにVPNで接続したいなと思いインストールしてみた。

ちなみに最終目標はタイトル通りiPadからVPN接続ができることです。

まずはOpenVPNのパッケージをインストール。

$ apt-get install openvpn
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libpkcs11-helper1
提案パッケージ:
  easy-rsa
以下のパッケージが新たにインストールされます:
  libpkcs11-helper1 openvpn
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
462 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,163 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
提案されたeasy-rsaも追加でインストールする。easy-rsaをインストールする際にもpcmciautilsを提案されたので面倒くさいから--install-suggestsをつけて実行する。
$ apt-get install --install-suggests easy-rsa
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libccid opensc opensc-pkcs11 pcmciautils pcscd
以下のパッケージが新たにインストールされます:
  easy-rsa libccid opensc opensc-pkcs11 pcmciautils pcscd
アップグレード: 0 個、新規インストール: 6 個、削除: 0 個、保留: 0 個。
1,108 kB のアーカイブを取得する必要があります。
この操作後に追加で 3,949 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
この後実行する手順はこんな感じ。

  1. オレオレ認証局を作る(認証局と証明書)
  2. オレオレ認証局に認証されたサーバ証明書と秘密鍵を作成する
  3. 暗号化に使用するDiffie-Hellman用パラメータを作成する
  4. オレオレ認証局に認証されたクライアント証明書と公開鍵を作成する
  5. OpenVPNの設定・起動


1. オレオレ認証局を作る(認証局と証明書)

まずは認証局の情報を設定するために、初期設定されたディレクトリとファイルを作成する。

$ make-cadir /etc/openvpn/easy-rsa
/etc/openvpn/easy-rsa/varsの中に認証局のドメインや組織情報などを環境変数に設定してあるので編集する。
export EASY_RSA="/etc/openvpn/easy-rsa"         #設定用のホームディレクトリ

export KEY_COUNTRY="JP"
export KEY_PROVINCE="OSAKA"
export KEY_CITY="Minato-ku, Osaka"
export KEY_ORG="High Mountain"
export KEY_EMAIL="master@highmountain-lab.net"
export KEY_OU="WEB Development Dept."
環境変数を読み込み、オレオレ認証局を作成する。
$ source /etc/openvpn/easy-rsa/vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
$ /etc/openvpn/easy-rsa/clean-all
$ /etc/openvpn/easy-rsa/build-ca
Generating a 2048 bit RSA private key
.................................................................................+++
....+++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [OSAKA]:
Locality Name (eg, city) [Minato-ku, Osaka]:
Organization Name (eg, company) [High Mountain]:
Organizational Unit Name (eg, section) [WEB Development Dept.]:
Common Name (eg, your name or your server's hostname) [High Mountain CA]:
Name [EasyRSA]:
Email Address [master@highmountain-lab.net]:
これで認証局の証明書(ca.crt)と秘密鍵(ca.key)が/etc/openvpn/easy-rsa/keys配下に作成される。


2. オレオレ認証局に認証されたサーバ証明書と秘密鍵を作成する

さっそくサーバ証明書と秘密鍵を作成しよう。
$ /etc/openvpn/easy-rsa/build-key-server LubuntuSakura
Generating a 2048 bit RSA private key
.........................................................+++
................................+++
writing new private key to 'LubuntuSakura.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [OSAKA]:
Locality Name (eg, city) [Minato-ku, Osaka]:
Organization Name (eg, company) [High Mountain]:
Organizational Unit Name (eg, section) [WEB Development Dept.]:
Common Name (eg, your name or your server's hostname) [LubuntuSakura]:
Name [EasyRSA]:
Email Address [master@highmountain-lab.net]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'OSAKA'
localityName          :PRINTABLE:'Minato-ku, Osaka'
organizationName      :PRINTABLE:'High Mountain'
organizationalUnitName:PRINTABLE:'WEB Development Dept.'
commonName            :PRINTABLE:'LubuntuSakura'
name                  :PRINTABLE:'EasyRSA'
emailAddress          :IA5STRING:'master@highmountain-lab.net'
Certificate is to be certified until May 15 18:40:00 2026 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
同じようにこれでサーバ証明書(LubuntuSakura.crt)と秘密鍵(LubuntuSakura.key)が/etc/openvpn/easy-rsa/keys配下に作成される。


3. 暗号化に使用するDiffie-Hellman用パラメータを作成する

/etc/openvpn/easy-rsa/build-dhを実行する。
$ /etc/openvpn/easy-rsa/build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.........................................................................+...........................................................................................................+.............................................................................................................................................+.............................+......................................+...............+...................................................................................................................
鍵作成されると、/etc/openvpn/easy-rsa/keys/dh2048.pemが作成される。


4. オレオレ認証局に認証されたクライアント証明書と公開鍵を作成する

クイアント証明書と鍵を作成する。
# /etc/openvpn/easy-rsa/build-key LubuntuServerClient
Generating a 2048 bit RSA private key
...........+++
...................................................................................................+++
writing new private key to 'LubuntuServerClient.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [OSAKA]:
Locality Name (eg, city) [Minato-ku, Osaka]:
Organization Name (eg, company) [High Mountain]:
Organizational Unit Name (eg, section) [WEB Development Dept.]:
Common Name (eg, your name or your server's hostname) [LubuntuServerClient]:
Name [EasyRSA]:
Email Address [master@highmountain-lab.net]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'OSAKA'
localityName          :PRINTABLE:'Minato-ku, Osaka'
organizationName      :PRINTABLE:'High Mountain'
organizationalUnitName:PRINTABLE:'WEB Development Dept.'
commonName            :PRINTABLE:'LubuntuServerClient'
name                  :PRINTABLE:'EasyRSA'
emailAddress          :IA5STRING:'master@highmountain-lab.net'
Certificate is to be certified until May 16 05:23:40 2026 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
TLS認証鍵を作成する。
$ openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/tls.key
下記の4ファイルをクライアント用に使用する。
ca.crt
LubuntuServerClient.crt
LubuntuServerClient.key
ta.key


5. OpenVPNの設定・起動

OpenVPNサーバの設定をするのでサンプルのconfigファイルを/etc/openvpn配下に持って来て編集する。
$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ gunzip server.conf.gz 
server.confは下記の部分を編集する。
port 1194

proto udp

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/LubuntuSakura.crt
key /etc/openvpn/easy-rsa/keys/LubuntuSakura.key

dh /etc/openvpn/easy-rsa/keys/dh2048.pem

server 10.8.0.0 255.255.255.0

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

client-to-client

tls-auth /etc/openvpn/easy-rsa/keys/tls.key 0

user nobody
group nogroup

status /var/log/openvpn-status.log
log-append  /var/log/openvpn.log
ここでOpenVPNだけstartしたら
Activation: failed for connection '有線接続 1'
とsyslogに出力され、うまく起動しなかったのでrebootしたらうまく起動された。

疲れた。iPad(iOS)から繋げるのは次回。