・・・と、題名は書いてみたものの、2日間悩みました。一番の問題は、私自身、ネットワークがかなり弱く、言葉でやりたいことを表現すると。
- WEBとかDBとかにグローバルIPをもたせたくない
- グローバルIPはいらないんだけど、プライベートIPしかもっていないサーバからもインターネットには接続させたい
- EC2 再起動毎に、IP ADDRESSが変わるのが許せないので、固定IPにしたい
です。いまさらながら、VPCでれば、それが実現できると聞きまして、やって見た、作業証跡になります。他のサイトの例を参考にして試行錯誤はしていたのですが、皆様のレベルが高すぎて、あたりまえの部分があえて省略している多く、そのあたりまえの部分もわからない僕には、一からつくるときのパターンが知りたくて、あえて手順をおこしました。なので、若干というかかなり自分用のメモに近いと思います。セキュリティの観点から・・とか・・実装的には・・・とかかなり無視しておりますので、そのあたりのツッコミは無しでお願いします。
とりあえず!
この手順どおりやれば、15分でVPCが実現できるよー!ってだけで、あとの細かい設定は、調整してみてくださいね。
VPC の設定
設定手順
本当にゼロベースでVPCを作る手順になりますので、もうすでに設定が完了している箇所についてはいろいろ読み飛ばしてください。
また、EIPとか、VPCとか、NATとかの説明はこちらでは説明しません。だって自分もよくわかってないから・・そのあたりは勘弁してください。
VPC Dashboard から「START VPC Wizard」を選択
「VPC with Public and Private Subnets」 を選択し、「Select」ボタンをクリック
下記の通り設定しました
- 「VPC name」は任意でMyVPC
- AZは、1aに(10.0.0.0/24,10.0.1.0/24)
- 「Key pair」は、登録時に設定したもの
以上で、基本的な構成が完了します。楽ですね。
再び、VPC Dashboard へ
じゃあ、どんなものが、どうできたかを確認してみたいと思います
「Your VPCs」
「Subnets」
10.0.0.0/24 および 10.0.1.0/24 の2のSubnetができているのがわかるかと思います
Private
Public
「Route Tables」
「Internet Gateways」
「Elastic IPs」
「Create Security Group」ボタンをクリック
上記までは、ウィザードのデフォルト値ですが、ここだけ独自に作成しました、今回設定したのは、ウィザードで自動生成された、NATインスタンスに対するSGです
下記通り設定しました
生成されたSGの設定をします
端的に説明すると、入力リクエストは何を許可するか、出力は何を許可するかの設定ですね。EC2関係なければ、FIREWALL(IPTABLESの設定)だと思ってくれれば良いのではないかと思います
「Inbound Rules」
「Outbound Rules」
EC2 Dash board へ
「Instances」
見慣れないインスタンスができていると思います。これが、ウィザードで生成された、NATインスタンスです。
このままだと、なんのインスタンスだかわかんなくなりそうなので、Natというタグをつけました
ちょっと確認
送信元のパケットをチェックする?かな?
NATの場合は、「チェックしない」の設定になっていることを確認するみたいです。なので、Statusが「Disabled」になっていることを確認して、Cancelをクリックします
セキュリティグループの変更
VPCの場合は、セキュリティグループを変更できます。逆にEC2(という表現で良いのか?)では、変更できないらしいです
さきほど作成した、NATSGグループに変更します
NATSGの内容はこんな感じですね。
以上で、すくなくとも、「vpc(仮想プライベートクラウド)でpublicとprivateのサブネットの環境を作る」というところまでは実現できました。たぶん・・・
Private Subnet 環境に、EC2 インスタンスを作ってみよう!!
長々と書きますが、これから作成するインスタンスは、【グローバルIPを所有していないインスタンス】になります。職場でも、ご自宅でもインターネットの環境がある方ってPC自体にグローバルIPが設定されている人はいないですよね。これから実現したいことは、まさに、皆様のPC環境(と似たようなもので) ルータを介して、プライベートIPアドレスなのに外部のインターネットに接続できるようにする設定です。ご自宅のインターネット環境でいいますと、きっとルータといわれるものがありますよね。いままで作った環境がまさにそれで、外部から接続できなくするための設定です。
前置きはさておき、EC2インスタンスを作ってみます。これを見ている皆様はEC2に関しては何回も作っていると思うので、いろいろ端折ります。
10.0.1.0/24 サブネットにインスタンスを作成する
VPC Dashboard
VPC Dashボードから、「Launch EC2 Instasnce」ボタンをクリックします
いろいろ説明すっとばします。
Step3. Configre Instance Details
- Network : 作成したVPCインスタンスを選択
- Subnet : 10.0.1.0 (Private Subnets) を選択
- Network Interfaces : 固定IPを設定
以降もいろいろ説明すっとばします。
SGの設定
Public SubnetからのhttpのリクエストをACCEPTするように設定します
Inbounds
これですべて設定は終わりです!!
接続してみよう!!
接続してみよう!といっても、Private Subnetなので接続できるわけがない!wということで、じゃあ、どうやって接続するのか
という話しになりますが、NASにSSHしてから接続されたNATから再度接続する感じになります。ちょっとわかりづらいですかね・・
NATにsshで接続した状態から・・・
Last login: Wed Feb 4 15:00:36 2015 from v157-7-64-118.z1d9.static.cnode.jp
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
[ec2-user@ip-10-0-0-132 ~]$
NATを介してさらに、プライベートサブネットのインスタンスへ接続します
[ec2-user@ip-10-0-0-132 ~] ssh -i /usr/local/aws/Glueth_Private_Key.pem ec2-user@10.0.1.100
Last login: Thu Feb 5 01:22:27 2015 from ip-10-0-0-132.ap-northeast-1.compute.internal
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
[ec2-user@ip-10-0-1-100 ~]$
Private Subnetから、curl でインターネットに出れるか確認してみます。
いけましたね(^_^)
[ec2-user@ip-10-0-1-100 ~]$ curl https://qiita.com/
<!DOCTYPE html><html xmlns:og="http://ogp.me/ns#"><head><meta charset="UTF-8" /><title>Qiita - プログラマの技術情報共有サービス</title><meta content="width=device-width,height=device-height,initial-scale=1" name="viewport" /><meta content="Qiitaは、プログラマのための技術情報共有サービスです。 プログラミングに関するTips、ノウハウ、メモを簡単に記録 &amp; 公開することができます。" name="description" /><meta content="summary" name="twitter:card" /><meta content="@Qiita" name="twitter:site" /><meta content="Qiita - プログラマの技術情報共有サービス" property="og:title" /><meta content="website" property="og:type" /><meta content="https://qiita.com/" property="og:url" /><meta content="https://cdn.qiita.com/assets/qiita-fb-982b84457c670df6145579238c40a453.png" property="og:image" /><meta content="Qiitaは、プログラマのための技術情報共有サービスです。 プログラミングに関するTips、ノウハウ、メモを簡単に記録 &amp; 公開することができます。" property="og:description" /><meta conte